2012-09-02 21 views
5

而不是使用此以下行的每個TextView中的:我可以在Android中使用XML的變量嗎?

android:textSize="40sp" 

我是否能夠以變量來代替40SP?

作爲一個側面的問題,我被推薦使用SP單元,因爲它通過用戶定義的設置。這是最佳做法嗎?

回答

5

我能用一個變量替換40sp嗎?

您可以使用a dimension resource(例如,android:textSize="@dimen/someSize"),或使用樣式做這個(每AlexN的答案),或通過setTextSize()在運行時設置的大小。

我被推薦使用SP單元,因爲它通過用戶定義的設置。這是最佳做法嗎?

在較新版本的Android上,用戶可以通過設置應用程序更改基本字體大小。通過對單位使用sp,您的字體大小將與基本字體大小一起縮放。如果您使用其他單位(例如,dp),則無論用戶在「設置」中具有什麼內容,字體大小都將保持不變。我們無法說明sp的使用是否是「最佳做法」 - 我相信有些情況下允許改變字體大小是件壞事。不過,默認情況下,sp可能是正確的起點。

2

據我所知,使用SP對於文本大小來說是一個非常好的做法。 並根據你的第一個問題 - 我認爲我們不能使用變量,但是,有一個更好的方法。檢查出來 - http://developer.android.com/guide/topics/ui/themes.html

所以,如果你定義一個樣式,您可以在XML聲明你瀏覽像<TextView android:id = "@+id/myId" style = "@style/myStyle"/> 而這種風格將incapsulate要設置爲屏幕上的textViews所有參數。

+0

謝謝。我甚至不知道風格。 – tomofv

1

不,不可能在XML文件中使用基於代碼的變量。不過,您可以使用這種樣式。

實施例:

<style name="MyTvStyle"> 
    <item name="android:textSize">40sp</item> 
</style> 

然後應用這樣的:基於

<TextView style="@style/MyTvStyle" ... /> 

A碼的方法也是可能的。如果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會根據設備大小和用戶設置進行縮放。

相關問題