而不是为每个textview使用以下行:
android:textSize="40sp"
我能用变量替换40sp吗?
作为一个附带问题,我建议使用SP单位,因为它符合用户定义的设置。这是最佳做法吗?
答案 0 :(得分:6)
我能用变量替换40sp吗?
您可以使用a dimension resource(例如android:textSize="@dimen/someSize"
),也可以使用执行此操作的样式(根据AlexN的答案),或者通过setTextSize()
在运行时设置大小。
我建议按用户定义的设置使用SP单位。这是最佳做法吗?
在较新版本的Android上,用户可以通过“设置”应用程序更改基本字体大小。通过使用sp
单位,您的字体大小将与基本字体大小一起缩放。如果您使用其他单位(例如dp
),则无论用户在“设置”中拥有什么,您的字体大小都将保持不变。不可能说sp
的任何给定使用是否是“最佳实践” - 我确信在某些情况下允许更改字体大小将是一件坏事。但是,默认情况下,sp
可能是正确的起点。
答案 1 :(得分:2)
据我所知,使用SP对于Text Size来说是一个非常好的做法。 根据你的第一个问题 - 我认为我们不能使用变量,但是,有更好的方法。看看 - http://developer.android.com/guide/topics/ui/themes.html
因此,如果您要定义样式,则可以像<TextView android:id = "@+id/myId" style = "@style/myStyle"/>
一样在XML中声明您的视图
此样式将包含您要在该屏幕上设置为textView的所有参数。
答案 2 :(得分:1)
不,在XML文件中不可能使用基于代码的变量。但是,您可以使用样式。
示例:
<style name="MyTvStyle">
<item name="android:textSize">40sp</item>
</style>
然后像这样应用:
<TextView style="@style/MyTvStyle" ... />
基于代码的方法也是可能的。如果TextViews定义了android:id
属性,您可以使用findViewById
方法在代码中检索它们。
示例:
int[] id_array = {
R.id.textview1, R.id.textview2, R.id.textview3 //Put all the id's of your textviews here
}
for(int i : id_array) { //Loop trough all the id's and retrieve the Textview associated with it.
TextView textview = (TextView)findViewById(i);
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP,40); //Set the text size to 40sp
}
是的,使用sp
代替普通像素值总是更好。由于sp
会随设备大小和用户设置而缩放。