2

我已經創建了下面的構造函數的自定義視圖子類:如果您可以直接從AttributeSet中讀取,爲什麼需要declare-styleable?

public MyCustomView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 

    // get custom "thingy" attribute specified in XML 
    int thingy = attrs.getAttributeIntValue(MY_NAMESPACE, "thingy", 0); 

    //rest of constructor 
    ... 
} 

可以看出,它抓住從它的XML屬性自定義「啄」屬性。這工作非常好,迄今爲止我沒有問題。那麼爲什麼Google會告訴您在declare-styleableres/values/attrs.xml(討論的here)中定義一個自定義視圖的XML屬性並通過調用context.getTheme().obtainStyledAttributes()(討論here)來應用它們?

回答

3

我很笨。第二個鏈接我張貼確實解釋:

當從XML佈局創建的視圖,所有 XML標記的屬性是從資源包讀取並傳遞到 視圖的作爲構造一個AttributeSet。儘管可以從AttributeSet中直接讀取 值,這樣做有一定的 缺點:屬性值中

  • 資源引用不解決
  • 樣式不適用

相反,通過AttributeSet設置爲 obtainStyledAttributes()。此方法返回已被解除引用和樣式化的TypedArray數組 。

相關問題