android 解析xml 到 AttributeSet物件

心鑫發表於2013-11-11

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:attr="http://schemas.android.com/apk/res/com.example.powerimageviewtest"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


    <com.example.powerimageviewtest.PowerImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/anim"
        attr:auto_play="false"
        android:background="@drawable/ic_launcher"
        />


</RelativeLayout>

public PowerImageView(Context context, AttributeSetattrs) {

attributeSet 是在layoutinflat 中屬值的



通過索引訪問

attrs.getAttributeCount()  返回 7  屬性的個數

 attrs.getAttributeName(i) 第i個屬性的name


for (int i = 0; i < attrs.getAttributeCount(); i++) {
			// 11-11 14:50:36.835: I/System.out(7639): fd-->id
			// 11-11 14:50:36.835: I/System.out(7639): fd-->background
			// 11-11 14:50:36.835: I/System.out(7639): fd-->layout_width
			// 11-11 14:50:36.835: I/System.out(7639): fd-->layout_height
			// 11-11 14:50:36.835: I/System.out(7639): fd-->src
			// 11-11 14:50:36.835: I/System.out(7639):
			// fd-->layout_centerInParent
			// 11-11 14:50:36.835: I/System.out(7639): fd-->auto_play
			// 不明白順序是怎麼來的
			syso("fd-->" + attrs.getAttributeName(i));
		}
從下面可看出,其實是xmlPullParser


attrs.getAttributeResourceValue(1, 0)     第1個元素的資源id 本例
ic_launcher 對應的id

attrs.getAttributeBooleanValue(6, false)  第6個元素的布林值


通過名稱空間訪問:

String androidNM = "http://schemas.android.com/apk/res/android";
		String myNM = "http://schemas.android.com/apk/res/com.example.powerimageviewtest";
		syso("fd-->" + attrs.getAttributeBooleanValue(myNM, "auto_play", false)); // false
		syso("fd-->" + attrs.getAttributeResourceValue(androidNM, "src", 0)); // 2130837504



相關文章