Android自定義View的自定義屬性
阿新 • • 發佈:2021-07-02
使用案列
layout.xml <com.example.rx_demo.MyView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:flag="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> attrs.xml <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView"> <attr name="flag" format="boolean" /> </declare-styleable> </resources> 自定義View取值 val typedArray = context.obtainStyledAttributes(attrs,R.styleable.MyView) val flag = typedArray.getBoolean(R.styleable.MyView_flag,true) typedArray.recycle()
attrs是實現了一個xml解析器,可以通過它獲取
<com.example.rx_demo.MyView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:flag="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
裡面所有值
看看R.txt檔案,關於自定義view屬性的東西
int[] styleable MyView { 0x7f030378 }
int styleable MyView_flag 0
int attr flag 0x7f030378
實際上等價於
int[] styleable MyView { flag }
int styleable MyView_flag 0
由此可知R.styleable.MyView是一個數組,裡面有一個flag的屬性
我們可以通過這個陣列過濾出我們想要的屬性值,丟進陣列
而R.styleable.MyView_flag是一個下標值,可以通過下標值拿到屬性