我有一個自定義視圖來擴展其中一個框架類。 Android中的大多數View
都有一些爲它們定義的默認屬性(例如Button
可點擊,由android:clickable="true"
設置)。Android:自定義視圖的默認屬性
如何爲我的自定義視圖提供應用程序範圍的默認值?
我有一個自定義視圖來擴展其中一個框架類。 Android中的大多數View
都有一些爲它們定義的默認屬性(例如Button
可點擊,由android:clickable="true"
設置)。Android:自定義視圖的默認屬性
如何爲我的自定義視圖提供應用程序範圍的默認值?
我正是如此解決我自己的問題:
RES /價值/ attrs.xml:
<resources>
<attr name="customViewStyle" type="reference" />
</resources>
RES /價值/ styles.xml:
<resources>
<style name="AppTheme" parent="@android:style/Theme.Light">
<item name="android:background">@drawable/bg_light</item>
<item name="customViewStyle">@style/CustomView</item>
</style>
<style name="CustomView">
<item name="android:clickable">true</item>
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
</style>
</resources>
然後你所要做的就是將清單中的主題設置爲AppTheme。這也適用於在AppTheme的定義中使用android:[widget]Style
代替customViewStyle
的標準小部件。
這是如何應用於您的視圖? customViewStyle鏈接到View實現的位置在哪裏? – cottonBallPaws
@cottonBallPaws,以下指出我正確的方向:http://stackoverflow.com/a/31505624/5166250 – Travis
您還可以爲此佈局創建樣式,並設置使用視圖的樣式。
來源:http://developer.android.com/guide/topics/resources/style-resource.html
使用樣式標記只是設置佈局文件中個別屬性的快捷方式 - 這不是我想要完成的。我想要一些默認的外觀/屬性,然後誰使用我的自定義視圖可以使用樣式標籤進一步修改它。 想想這樣:當你將一個TextView添加到佈局時,它具有文本大小,文本顏色等的默認值。這些必須來自某處,因爲您不必指定樣式或任何東西。您更改的屬性或您引用的樣式將應用於這些默認值。 – Karakuri
我想你會需要越過採取AttributeSet參數的構造函數查看,並建立自己的修改的AttributeSet傳遞給父類的構造。
編輯:甚至更輕鬆,只需讓您的視圖子類的構造函數調用setClickable
等將默認值更改爲你想要的。
這是我最初做的。問題是,如果另一個開發人員使用我的自定義視圖並將xml中的clickable =「false」,那麼我對'setClickable()'的調用會破壞他的編程。 (也許他計劃只有在用戶做了點什麼之後才能點擊它,比如勾選了一個複選框。) 儘管** I **期望它是可點擊的,其他人可能不會,所以我想提供一些默認值行爲而不訴諸於此類內部呼叫。否則,我需要一種方法來讀取視圖的所有屬性,而不僅僅是我在attrs中定義的自定義屬性。 – Karakuri
http://stackoverflow.com/questions/2695646/declaring-a-custom-android-ui-element-using-xml – Ixx
我不問如何定義自定義屬性。我已經這樣做了。我想要的是爲這些屬性定義一些**默認值**,以便可以將視圖添加到佈局文件而無需設置一些額外的屬性。 – Karakuri