2013-11-20 148 views
0

失去自定義的屬性,我已經中attrs.xml以下自定義佈局,在attrs.xml

<declare-styleable name="ToolsView"> 
     <attr name="width_behaviour" format="reference" /> 
    </declare-styleable> 

我在我的佈局文件下面的代碼:

<com.hidden.hidden2.view.ToolsView 
     xmlns:app="http://schemas.android.com/com.hidden.hidden2" 
     android:id="@+id/page_toolbar_container" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top|center_horizontal" 
     android:background="@drawable/tools_background" 
     android:gravity="center_horizontal" 
     android:layerType="software" 
     android:visibility="visible" 
     app:width_behaviour="@integer/tools_view_width_behaviour" /> 

然而,當我嘗試閱讀應用:在我的課

if (attributeSet != null) { 
      TypedArray a = getContext().obtainStyledAttributes(attributeSet, R.styleable.ToolsView, 0, 0); 
      final int N = a.getIndexCount(); 
      for (int i = 0; i < N; i++) { 
       int attr = a.getIndex(i); 
       switch (attr) { 
       case R.styleable.ToolsView_width_behaviour: 
        widthBehaviour = a.getInteger(attr, -1); 
        break; 
       } 
      } 

      a.recycle(); 

的屬性進行設置的構造width_behaviour不爲空,但N爲0 - 沒有自定義attri butes獲得!所以它永遠不會進入for循環。

任何想法爲什麼是這樣?我習慣了很多佈局,這是我第一次遇到問題。

回答

1

將屬性的格式更改爲整數或維數(取決於您在width_behaviour下的含義),它應該可以工作。引用是爲了另一個目的。

+0

你在這裏是正確的,但這並不是問題。 – George

+0

它仍然不是武器?呃...什麼是getContext?你爲什麼不使用construstor param的上下文? – Leonidos

+0

超級構造函數已經執行,所以技術上我可以從視圖的getContext()中取出它。我沒有直接獲取它,因爲這是在super(context,attrs)調用後定義的初始化方法中。無論如何,我發現錯誤,請參閱下面的答案。 – George

0

Ouch。這是一個相當愚蠢的錯誤。

請參閱xmlns的定義:app - xmlns:app =「http://schemas.android.com/com.hidden.hidden2」 它應該是xmlns:app =「http://schemas.android。 com/apk/res/com.hidden.hidden2「

/apk/res/part在我的聲明中不知所蹤。

希望這可以幫助別人有一天。