在开发我的应用程序时,我意识到如果有人将设备字体大小从正常改变,我的应用程序字体大小也会更改,并破坏我设计的某些视觉效果。所以我想问一下,是否有一种方法可以独立于设备设置来修复文本大小?
谢谢。
谢谢。
请检查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的答案更适用于活动或应用程序场景。
dp
而不是sp
来设置字体大小。 Lint将对dp
的使用提出警告(这是正确的,因为您可能会为用户造成不便,并可能使视力受损的用户无法使用您的应用程序),但您不应该遇到任何运行时问题。<application android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
... >
<activity android:name=".MyActivity"
android:configChanges="fontScale">
...
</activity>
</application>
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文件中使用,而且其中一些设置可能只能通过编程方式使用(至少我记得是这样的)。