有没有办法将自定义XML属性传递给扩展View的类?

时间:2013-09-05 22:46:55

标签: android android-layout android-custom-view

假设我有类似的东西:

public class MyExcellentView extends View{
  //etc. etc.

}

并在xml中我使用它:

<com.my.package.MyExcellentView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 myCustomAttribute="100"
/>

有没有办法在myCustomAttribute内访问MyExcellentView

1 个答案:

答案 0 :(得分:3)

是的,这就是你这样做的方式:

public MyExcellentView(Context context, AttributeSet attrs){
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable. MyCustomView);
            int customAtt = a.getInteger(R.styleable. MyCustomView_yourCustomAttribute, defaultValue);
            a.recycle();
}

但是你还必须在attrs.xml中声明资源中的属性:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <declare-styleable name="MyCustomView">
      <attr name="yourCustomAttribute"/>
   </declare-styleable>
</resources>

另外,为了使用它,你必须这样做:

<com.my.package.MyExcellentView
  xmlns:customAtts="http://schemas.android.com/apk/res/com.my.package"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  customAtts:myCustomAttribute="100"/>

希望这有帮助。

问候!