3

在开发我的应用程序时,我意识到如果有人改变了正常的设备字体大小,我的应用程序字体大小也会改变,它会破坏我设计的一些视觉效果。所以我想问是否有一种方法可以独立于设备设置来修复文本大小?

谢谢

4

3 回答 3

2

check the source code DisplaySettings.java, here is the method to control font size scale

public void writeFontSizePreference(Object objValue) {
    try {
        mCurConfig.fontScale = Float.parseFloat(objValue.toString());
        ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig);
    } catch (RemoteException e) {
        Log.w(TAG, "Unable to save font size");
    }
}

here is a solution keep the font size in different fontscale.

float textSize = 22f;
mTextView.setTextSize(textSize / getResources().getConfiguration().fontScale);

and I think @shoe rat's answer is more better for an activity or application context.

于 2014-06-26T06:05:14.737 回答
2

如果您想完全忽略用户的字体大小偏好,请使用dp而不是sp字体大小。lint 会抱怨dp使用情况(这是正确的,因为您可能会给用户带来不便,并可能使您的应用程序无法供视障者使用),但您不应该面临任何运行时问题。

如果您只想忽略运行时字体大小的更改,请使用"fontScale"

<application android:label="@string/app_name"
    android:icon="@drawable/ic_launcher"
    ... >
    <activity android:name=".MyActivity"
        android:configChanges="fontScale">
        ...
    </activity>
</application>
于 2013-11-06T16:40:59.410 回答
0

Google 建议您使用 SP 设置字体大小,以便 UI 设置会修改您的应用程序中的字体大小。你用的是SP吗?

我相信使用 DP 或 PX 或其他方法可以解决您的问题。请记住,不建议出于可访问性目的这样做。

有关可能的文本大小类型的完整列表,请参阅http://developer.android.com/reference/android/util/TypedValue.html

他们来了:

COMPLEX_UNIT_DIP - TYPE_DIMENSION complex unit: Value is Device Independent Pixels.
COMPLEX_UNIT_IN  - TYPE_DIMENSION complex unit: Value is in inches.
COMPLEX_UNIT_MM  - TYPE_DIMENSION complex unit: Value is in millimeters.
COMPLEX_UNIT_PT  - TYPE_DIMENSION complex unit: Value is in points.
COMPLEX_UNIT_PX  - TYPE_DIMENSION complex unit: Value is raw pixels.
COMPLEX_UNIT_SP  - TYPE_DIMENSION complex unit: Value is a scaled pixel.

另外:请注意,并非所有这些选项都可以从 xml 文件中获得,并且其中一些设置只能以编程方式使用(至少我记得是这样)。

于 2013-11-06T16:28:33.600 回答