我可以在Android中使用XML变量吗?

时间:2012-09-02 13:55:48

标签: android xml

而不是为每个textview使用以下行:

android:textSize="40sp"

我能用变量替换40sp吗?

作为一个附带问题,我建议使用SP单位,因为它符合用户定义的设置。这是最佳做法吗?

3 个答案:

答案 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会随设备大小和用户设置而缩放。