Vik*_*ngh 155 android textview android-layout android-fonts
我想在我的应用程序中指定自己的文本大小,但是我在执行此操作时遇到了问题.
当我在设备设置中TextView
更改字体大小时,我的应用程序的字体大小也会更改.
san*_*tar 209
实际上,"设置"字体大小仅影响大小sp
.因此,所有你需要做的-定义textSize
的dp
,而不是sp
,然后设置将不会在您的应用程序更改文字大小.
这是文档的链接:尺寸
但请注意,预期的行为是所有应用程序中的字体都尊重用户的首选项.用户可能想要调整字体大小的原因有很多,其中一些甚至可能是医学视觉障碍用户.使用dp
而不是sp
文本可能导致不情愿地歧视您的某些应用程序的用户.
即:
android:textSize="32dp"
Run Code Online (Sandbox Code Playgroud)
小智 127
最简单的方法就是使用如下内容:
android:textSize="32sp"
Run Code Online (Sandbox Code Playgroud)
如果您想了解有关该textSize
属性的更多信息,可以查看Android开发人员文档.
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
系统,则使用默认值.
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,而无需更改任何代码.
防止整个应用程序受系统字体大小影响的简单方法是使用基本活动更新配置。
//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)
您可以使用此代码:
android:textSize="32dp"
Run Code Online (Sandbox Code Playgroud)
它解决了您的问题,但您必须知道您应该尊重用户的决定。因此,从设备设置更改文本大小不会更改该值。所以这就是为什么你需要使用sp而不是dp。所以我的建议是使用不同的系统字体大小(小,正常,大,...)来审查您的应用程序
归档时间: |
|
查看次数: |
487059 次 |
最近记录: |