在开发我的应用程序时,我意识到如果有人从正常情况改变设备字体大小,我的应用程序字体大小也会改变,它会破坏我设计的一些视觉效果。所以我想询问是否有办法修复与设备设置无关的文字大小?
由于
答案 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文件中获得,并且其中一些设置可能只能以编程方式使用(至少这是我记得的)。