我沒有找到一種方法來做到這一點編程,所以我在這裏發佈這個問題(我也沒有發現任何與此相關的問題)。以編程方式應用樣式資源
我有一個資源樣式,在res/values/styles.xml中定義。我想要做的是在我的活動中使用java將這種風格應用到我操縱的View對象中。
是否有可能在Android中實現這一點,或者風格只能應用於使用android:style屬性的對象?
我沒有找到一種方法來做到這一點編程,所以我在這裏發佈這個問題(我也沒有發現任何與此相關的問題)。以編程方式應用樣式資源
我有一個資源樣式,在res/values/styles.xml中定義。我想要做的是在我的活動中使用java將這種風格應用到我操縱的View對象中。
是否有可能在Android中實現這一點,或者風格只能應用於使用android:style屬性的對象?
不,一般不會將樣式資源應用於現有View實例。風格資源只能在施工期間應用到Views。
要理解爲什麼研究View(Context context, AttributeSet attrs, int defStyle)構造函數。這是唯一讀取中央視圖屬性(如android:background)的地方,因此在構建View之後無法應用樣式。視圖的子類使用相同的模式,如TextView。您將需要使用setter手動應用樣式屬性。
請注意,如果您主動實例化視圖,則可以通過defStyle
構造函數參數使用任何樣式資源。
不,這是不可能的。您通常用來訪問/ res /目錄中任何內容的Resources
類不支持獲取樣式。 http://developer.android.com/reference/android/content/res/Resources.html
- 更新 -
我這裏說的是不完全正確。 View(Context context, AttributeSet attrs, int defStyle)也像CRNV說,對於一些View實現
至少在一個TextView這是可能使用setTextAppearance(context, resid)
方法:可以在View
對象這樣的構造給予風格。 resId
的風格可以在R.style.
找到。
分享此答案here,但由於它有自己的會話線程,所以我覺得它在這裏也是相關的。
這個問題沒有一條線路解決方案,但是這對我的用例起作用。問題是,'View(context,attrs,defStyle)'的構造函數沒有引用實際的樣式,它需要一個屬性。因此,我們將:
在 'RES /值/ attrs.xml',定義一個新的屬性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="customTextViewStyle" format="reference"/>
...
</resources>
在RES /價值/ styles.xml '我要創造我想在我的自定義的TextView使用的樣式
<style name="CustomTextView">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:paddingLeft">14dp</item>
</style>
在 'RES /價值/的themes.xml' 或' RES /價值/樣式。XML」,修改的主題爲你的應用/活動,並添加以下樣式:
<resources>
<style name="AppBaseTheme" parent="android:Theme.Light">
<item name="@attr/customTextViewStyle">@style/CustomTextView</item>
</style>
...
</resources>
最後,在自定義的TextView,你現在可以使用構造與屬性,它會收到您的風格
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context, null, R.attr.customTextView);
}
}
值得注意的是,我反覆在不同的變體和不同的地方使用customTextView,但絕不要求視圖的名稱與樣式或屬性或任何內容相匹配。此外,這種技術應該適用於任何自定義視圖,而不僅僅是TextView。
我沒有以編程方式實例化視圖。它是我創建的一個自定義視圖,它擴展了LinearLayout ...所以我希望不要讓用戶使用style =「@ style/...」,我想以編程方式應用樣式,但使用樣式資源而不是以該現有樣式的屬性編程式應用屬性。 – Thiago
「請注意,如果您主動實例化視圖,則可以通過defStyle構造函數參數使用任何樣式資源。」 你做了這件事嗎? 我遇到問題並且在搜索時發現了這個問題。 http://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=12683 – sadaf