Android 自定義view的四個(gè)構(gòu)造函數(shù)什么情況下調(diào)用
// 在new一個(gè)view的時(shí)會(huì)被調(diào)用
public TestView7(Context context) {
super(context);
}
// 在xml中定義時(shí)會(huì)被調(diào)用(即使xml中的自定義view有使用自定義屬性季二,依然調(diào)用2個(gè)參數(shù)的構(gòu)造方法)
public TestView7(Context context, AttributeSet attrs) {
super(context, attrs);
}
// 自己手動(dòng)調(diào)用才會(huì)被使用
public TestView7(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
// 自己手動(dòng)調(diào)用才會(huì)被使用
public TestView7(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
Android 自定義view構(gòu)造方法中的參數(shù)都是什么
Context:上線文
AttributeSet attrs : 從xml中定義的參數(shù)
int defStyleAttr :自定義view的主題(主題中優(yōu)先級(jí)最高的屬性)
int defStyleRes :自定義view的風(fēng)格(style中次于xml中定義的風(fēng)格)
在android中的屬性可以在多個(gè)地方進(jìn)行賦值喊儡,涉及到的優(yōu)先級(jí)排序?yàn)椋?
Xml直接定義 > xml中style引用 > defStyleAttr > defStyleRes > theme直接定義
如何自定義view的屬性
Custom View添加自定義屬性主要是通過declare-styleable標(biāo)簽為其配置自定義屬性,具體做法是: 在res/values
目錄下增加一個(gè)resources xml文件,示例如下(res/values/attrs_my_custom_view.xml):
<resources>
<declare-styleable name="MyCustomView">
<attr name="custom_attr1" format="string" />
<attr name="custom_attr2" format="string" />
<attr name="custom_attr3" format="string" />
<attr name="custom_attr4" format="string" />
</declare-styleable>
<attr name="custom_attr5" format="string" />
</resources
獲取自定義屬性
public MyCustomView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
String attr1 = ta.getString(R.styleable.MyCustomView_custom_attr1);
String attr2 = ta.getString(R.styleable.MyCustomView_custom_attr2);
String attr3 = ta.getString(R.styleable.MyCustomView_custom_attr3);
String attr4 = ta.getString(R.styleable.MyCustomView_custom_attr4);
Log.e("customview", "attr1=" + attr1);
Log.e("customview", "attr2=" + attr2);
Log.e("customview", "attr3=" + attr3);
Log.e("customview", "attr4=" + attr4);
ta.recycle();
}
使用自定義view的屬性值
在xml的根layout中引入命名空間
xmlns:lsp="http://schemas.android.com/apk/res-auto"(lsp是自己起的名字)
在自己的view中使用
android:padding="10dp"
lsp:image="@mipmap/ic_launcher"
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者