Android应用程序中TextView的字体大小会随着本机设置更改字体大小而变化

Vik*_*ngh 155 android textview android-layout android-fonts

我想在我的应用程序中指定自己的文本大小,但是我在执行此操作时遇到了问题.

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

san*_*tar 209

实际上,"设置"字体大小仅影响大小sp.因此,所有你需要做的-定义textSizedp,而不是sp,然后设置将不会在您的应用程序更改文字大小.

这是文档的链接:尺寸

但请注意,预期的行为是所有应用程序中的字体都尊重用户的首选项.用户可能想要调整字体大小的原因有很多,其中一些甚至可能是医学视觉障碍用户.使用dp而不是sp文本可能导致不情愿地歧视您的某些应用程序的用户.

即:

android:textSize="32dp"
Run Code Online (Sandbox Code Playgroud)

  • 很久以前我想知道是否有什么规则可以使用`sp`以及什么时候应该使用`dp`.我在这里得到了非常好的回应:http://stackoverflow.com/questions/11638691/android-sp-vs-dp-texts-what-would-adjust-the-scale-and-what-is-the-philosoph (10认同)

小智 127

最简单的方法就是使用如下内容:

android:textSize="32sp"
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关该textSize属性的更多信息,可以查看Android开发人员文档.

  • 我仍然不知道为什么有100个赞成票.因为如果我们在应用程序中使用sp进行set textsize.然后我们在Setting中更改字体大小,应用程序中的TextView也会更改 (6认同)

ash*_*rov 47

使用dimension您使用string资源(DOCS)等资源类型.

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <dimen name="textview_height">25dp</dimen>
  <dimen name="textview_width">150dp</dimen>
  <dimen name="ball_radius">30dp</dimen>
  <dimen name="font_size">16sp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用这些值:

<TextView
   android:layout_height="@dimen/textview_height"
   android:layout_width="@dimen/textview_width"
   android:textSize="@dimen/font_size"/>
Run Code Online (Sandbox Code Playgroud)

您可以dimens.xml为不同类型的屏幕声明不同的文件.这样做可以保证您的应用在不同设备上的外观.

如果未指定android:textSize系统,则使用默认值.

  • 问题不是屏幕。这是在 android 显示设置中选择的原生字体大小,导致了上述问题 (2认同)

Arp*_*pit 24

另请注意,如果textSize在代码中设置,则调用textView.setTextSize(X)将数字(X)解释为SP.使用setTextSize(TypedValue.COMPLEX_UNIT_DIP, X)在设定值DP.


mba*_*mba 12

在dimen.xml文件中定义时,必须通过代码再次指定DIP或SP并不是一件好事.

我认为最好的选择是在使用dimen.xml值时使用PX:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));
Run Code Online (Sandbox Code Playgroud)

这样,您可以在dimen.xml文件中根据需要从DP切换到SP,而无需更改任何代码.


Usa*_* US 9

防止整个应用程序受系统字体大小影响的简单方法是使用基本活动更新配置。

//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());
}
Run Code Online (Sandbox Code Playgroud)


Hos*_*ami 5

您可以使用此代码:

android:textSize="32dp"
Run Code Online (Sandbox Code Playgroud)

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

https://stacklearn.ir