设备设置独立的字体大小

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

1
这不是一个答案(因此是一条评论...),但你真的不应该尝试。例如,视力受损的用户将使用其设备提供的最大字体大小,你的应用程序不尊重这一点是错误的(或至少不友善)。这就是为什么文本大小被指定为“sp”或缩放像素的原因。 - NigelK
3个回答

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的答案更适用于活动或应用程序场景。


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>

它并没有解决这个问题,唯一的作用就是在活动打开时忽略更改。如果重新启动活动,则字体将再次受到影响。 - Jesus Dimrix
1
@JesusDimrix,请使用“dp”作为字体大小单位。 - ozbek
是的,那是我的最后选择,但似乎没有其他好的解决方案。 - Jesus Dimrix

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文件中使用,而且其中一些设置可能只能通过编程方式使用(至少我记得是这样的)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接