我想在我的应用程序中指定我自己的文本大小,但我这样做有一个问题。
当我在设备设置中改变字体大小时,我的应用程序TextView的字体大小也会改变。
我想在我的应用程序中指定我自己的文本大小,但我这样做有一个问题。
当我在设备设置中改变字体大小时,我的应用程序TextView的字体大小也会改变。
当前回答
这个解决方案是使用Kotlin,并且不使用已弃用的函数资源
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
adjustFontScale(resources.configuration)
}
private fun adjustFontScale(configuration: Configuration?) {
configuration?.let {
it.fontScale = 1.0F
val metrics: DisplayMetrics = resources.displayMetrics
val wm: WindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
wm.defaultDisplay.getMetrics(metrics)
metrics.scaledDensity = configuration.fontScale * metrics.density
baseContext.applicationContext.createConfigurationContext(it)
baseContext.resources.displayMetrics.setTo(metrics)
}
}
观察:这与上面的解决方案相同,但使用了Kotlin
其他回答
像使用字符串资源(DOCS)一样使用资源的维度类型。
在你的dimension .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>
然后你可以像这样使用这些值:
<TextView
android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/font_size"/>
您可以为不同类型的屏幕声明不同的dimension .xml文件。 这样做可以确保你的应用在不同设备上呈现出理想的外观。
当你不指定android:textSize时,系统使用默认值。
如果已经在dimension .xml文件中定义了DIP或SP,那么必须通过代码再次指定DIP或SP并不是一件好事。
我认为最好的选择是在使用dimension .xml值时使用PX:
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));
这样,如果需要,您可以在dimension .xml文件中从DP切换到SP,而无需更改任何代码。
我通常在资源文件中改变大小
<resources>
<dimen name="siez_1">40px</dimen>
<dimen name="siez_2">50px</dimen>
<dimen name="siez_3">60px</dimen>
</resources>
你可以使用下面的代码:
android:textSize="32dp"
它解决了你的问题,但你必须知道你应该尊重用户的决定。 这样,从设备设置中更改文本大小不会更改此值。这就是用sp代替dp的原因。 所以我的建议是使用不同的系统字体大小(小,正常,大,…)
https://stacklearn.ir
最简单的方法就是使用如下代码:
android:textSize="32sp"
如果你想了解更多关于textSize属性的信息,你可以查看Android开发者文档。