我想在我的应用程序指定我自己的文字大小,但我有这样一个问题。

当我在设备设置中更改字体大小,我的应用程序的字体大小TextView也会改变。

Answer 1:

其实,设置字体大小只影响大小sp 。 因此,所有你需要做的-定义textSize在dp而不是sp ,然后设置将不会在您的应用程序更改文字大小。

下面是该文档的链接: 尺寸

但是请注意预期的行为是在所有的应用程序的字体尊重用户的喜好。 原因有很多用户可能要调整字体大小,其中有些甚至可能是医疗 - 视觉障碍的用户。 使用dp ,而不是sp的文字可能会导致对一些应用程式使用者的不情愿区别。

即:

android:textSize="32dp"

Answer 2:

这样做最简单的就是使用类似以下内容:

android:textSize="32sp"

如果您想了解更多关于textSize属性,可以检查Android的开发者文档 。

Answer 3:

使用dimension喜欢你使用的资源类型string资源( DOCS )。

在你dimens.xml文件,声明维度的变量:

25dp

150dp

30dp

16sp

然后,你可以使用这些值是这样的:

android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/font_size"/>

你可以声明不同dimens.xml针对不同类型的屏幕文件。 这样做可以保证你的应用程序在不同设备所需的外观。

当你没有指定android:textSize系统将使用默认值。

Answer 4:

还要注意的是,如果TEXTSIZE被设置在代码,调用textView.setTextSize(X)解释为SP的数目(X)。 使用setTextSize(TypedValue.COMPLEX_UNIT_DIP, X)在DP设定值。

Answer 5:

那么是不是有一个dimen.xml文件中定义时,通过代码重新指定DIP或SP一件好事。

我认为最好的办法是使用dimen.xml值时使用PX:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));

通过这种方式,你可以从DP切换,如果需要dimen.xml文件到SP,而无需更改任何代码。

Answer 6:

简单的方式,以防止整个应用程序从由系统字体大小得到实现是使用碱活性updateConfiguration。

//in base activity add this code.
public void adjustFontScale( Configuration configuration) {
configuration.fontScale = (float) 1.0;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adjustFontScale( getResources().getConfiguration());
}
Answer 7:
在移民 ,而不是SP的使用字体大小textSize解决这个问题。
Answer 8:
这可能会有帮助。 添加代码自定义应用程序或BaseActivity
/**
* 重写 getResource 方法,防止系统字体影响
*
* @return
*/
@Override
public Resources getResources() {
Resources resources = super.getResources();
if (resources != null && resources.getConfiguration().fontScale != 1) {
Configuration configuration = resources.getConfiguration();
configuration.fontScale = 1;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
return resources;
}

然而,资源#updateConfiguration是API 25级,这意味着它会不支持一些有朝一日deplicated。

Answer 9:

你有TextView的标签在XML写:

android:textSize="32dp"

Answer 10:

如果使用的单位是SP,而不是DP,和你想覆盖系统字体缩放,你要做的就是重写一个方法在活动- 看到这个帖子 。

resources.updateConfiguration已被废弃,越野车(上奥利奥我有格式的文本问题)。

Answer 11:

您可以使用此代码:

android:textSize="32dp"

它解决了你的问题,但你要知道,你应该尊重用户的决定。 由此,从设备的设置更改文字大小不会改变此值。 所以这就是为什么你需要使用SP,而不是DP的。 所以我的建议是审查与不同的系统字体大小您的应用程序(小,中,大,...)

Answer 12:

重写getResources()中活性的影响。

在SP和往常一样,比如集合的TextView的尺寸android:textSize="32sp"

override fun getResources(): Resources {
return super.getResources().apply {
configuration.fontScale = 1F
updateConfiguration(configuration, displayMetrics)
}
}