设备设置独立的字体大小

时间:2013-11-06 16:13:19

标签: android textview font-size

在开发我的应用程序时,我意识到如果有人从正常情况改变设备字体大小,我的应用程序字体大小也会改变,它会破坏我设计的一些视觉效果。所以我想询问是否有办法修复与设备设置无关的文字大小?

由于

3 个答案:

答案 0 :(得分:2)

检查源代码DisplaySettings.java,这是控制字体大小比例的方法

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");
    }
}

这是一个解决方案,将字体大小保持在不同的字体大小。

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

我认为@shoe rat的回答对于活动或应用程序环境来说更好。

答案 1 :(得分:1)

如果您想完全忽略用户的字体大小首选项,请使用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>

答案 2 :(得分: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文件中获得,并且其中一些设置可能只能以编程方式使用(至少这是我记得的)。