2011-09-19 75 views
5

我在學習自定義組件,並且在自定義xml屬性方面遇到了一些麻煩。
我的自定義組件擴展了LinearLayout,並且在構造函數中(public Custom(Context context, AttributeSet attrs))我正在爲xml佈局(2個按鈕和1個EditText)充氣。
我也values/attrs宣佈這個自定義屬性:
TypedArray無法正常工作

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="Custom"> 
     <attr name="initValue" format="integer" /> 
     <attr name="stepSize" format="integer" /> 
     <attr name="maxValue" format="integer"/> 
    </declare-styleable> 
</resources> 


在後,我吹我試圖讀取自定義佈局的構造屬性,像這樣:

if (attrs != null) { 
       TypedArray ta = context.obtainStyledAttributes(attrs, 
         R.styleable.Custom, 0, 0); 
       setInitValue(ta.getInt(R.styleable.Custom_initValue, 0)); 
       setStepSize(ta.getInt(R.styleable.Custom_stepSize, 1)); 
       setMaxValue(ta.getInt(R.styleable.Custom_maxValue, 5));   
       ta.recycle(); 
      } 


現在我嘗試通過將此自定義組件添加到像這樣的xml佈局來測試此自定義組件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <here.is.my.package.Custom android:id="@+id/add" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     initValue="2" maxValue="7" stepSize="1" /> 
</LinearLayout> 


這不起作用,我只得到默認值(0,1,5)。我錯過了什麼,或者這是正常的行爲?

回答

8

好吧,我想出了我的問題的答案。答案是我只是使用我的自定義XML屬性沒有名稱空間和Android只是忽略它們,並給了我默認值。添加我的命名空間後:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:customAttribute="http://schemas.android.com/apk/res/gere.is.my.package" 
     android:orientation="vertical" android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <here.is.my.package.Custom android:id="@+id/add" 
      android:layout_width="wrap_content" android:layout_height="wrap_content" 
      customAttribute:initValue="2" customAttribute:maxValue="7" customAttribute:stepSize="1" /> 
    </LinearLayout> 

一切正常。

+0

親愛的同樣顯示問題我...我創建了一個CustomTextView並創建一個單獨的XML佈局,所以任何人都可以使用它只是通過使用 ...但是當我試圖獲取自定義值屬性..它的給予默認只有價值...任何建議。 – CoDe

+0

@Shubh請發佈一個提供問題所有細節的新問題。 – Luksprog

+0

它爲我工作....重新啓動工作區後,項目清理再次......並開始工作......謝謝 – CoDe

1

在搖籃項目,使用

的xmlns:customView = 「http://schemas.android.com/apk/res-auto」

這對我的作品!