2012-05-17 81 views
8

我有一個自定義視圖來擴展其中一個框架類。 Android中的大多數View都有一些爲它們定義的默認屬性(例如Button可點擊,由android:clickable="true"設置)。Android:自定義視圖的默認屬性

如何爲我的自定義視圖提供應用程序範圍的默認值?

+0

http://stackoverflow.com/questions/2695646/declaring-a-custom-android-ui-element-using-xml – Ixx

+0

我不問如何定義自定義屬性。我已經這樣做了。我想要的是爲這些屬性定義一些**默認值**,以便可以將視圖添加到佈局文件而無需設置一些額外的屬性。 – Karakuri

回答

12

我正是如此解決我自己的問題:

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的標準小部件。

+2

這是如何應用於您的視圖? customViewStyle鏈接到View實現的位置在哪裏? – cottonBallPaws

+1

@cottonBallPaws,以下指出我正確的方向:http://stackoverflow.com/a/31505624/5166250 – Travis

1

您還可以爲此佈局創建樣式,並設置使用視圖的樣式。

來源:http://developer.android.com/guide/topics/resources/style-resource.html

+2

使用樣式標記只是設置佈局文件中個別屬性的快捷方式 - 這不是我想要完成的。我想要一些默認的外觀/屬性,然後誰使用我的自定義視圖可以使用樣式標籤進一步修改它。 想想這樣:當你將一個TextView添加到佈局時,它具有文本大小,文本顏色等的默認值。這些必須來自某處,因爲您不必指定樣式或任何東西。您更改的屬性或您引用的樣式將應用於這些默認值。 – Karakuri

0

我想你會需要越過採取AttributeSet參數的構造函數查看,並建立自己的修改的AttributeSet傳遞給父類的構造。

編輯:甚至更輕鬆,只需讓您的視圖子類的構造函數調用setClickable等將默認值更改爲你想要的。

+3

這是我最初做的。問題是,如果另一個開發人員使用我的自定義視圖並將xml中的clickable =「false」,那麼我對'setClickable()'的調用會破壞他的編程。 (也許他計劃只有在用戶做了點什麼之後才能點擊它,比如勾選了一個複選框。) 儘管** I **期望它是可點擊的,其他人可能不會,所以我想提供一些默認值行爲而不訴諸於此類內部呼叫。否則,我需要一種方法來讀取視圖的所有屬性,而不僅僅是我在attrs中定義的自定義屬性。 – Karakuri

相關問題