Android 自定义组件 - 自定义属性 - 简单
自定义属性,是通过下面的文件 attr.xml 来定义的。
如果 attr.xml 不存在就创建吧。
res/values/attr.xml :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CellText2">
<attr name="text_left" format="string" />
<attr name="text_right" format="string" />
</declare-styleable>
</resources>
cell_text2.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp">
<TextView
android:id="@+id/textview_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textColor="#000"
android:textSize="16sp"/>
<TextView
android:id="@+id/textview_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:textColor="#a3a3a3"
android:textSize="14sp"/>
</RelativeLayout>
</LinearLayout>
CellText2.java:
package com.example.muzico.test;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class CellText2 extends RelativeLayout {
public TextView textLeft;
public TextView textRight;
private static final String TAG = CellText2.class.getSimpleName();
public CellText2(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.abc_cell_text2, this);
textLeft = findViewById(R.id.textview_left);
textRight = findViewById(R.id.textview_right);
TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.CellText2);
String text_left = ta.getString(R.styleable.CellText2_text_left);
String text_right = ta.getString(R.styleable.CellText2_text_right);
Log.e(TAG, "text_left = " + text_left + " , text_right = " + text_right);
textLeft.setText(text_left);
textRight.setText(text_right);
ta.recycle();
}
}
使用
在某个 xml 中使用:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mzc="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#fff">
<com.example.muzico.test.CellText2
android:layout_width="match_parent"
android:layout_height="60dp"
mzc:text_left="1111111"
mzc:text_right="22222222"
android:background="#33333333"
/>
</LinearLayout>
通过这句语句,将自定义属性引入使用:
xmlns:mzc="http://schemas.android.com/apk/res-auto"
再由 mzc调用自定义属性:
mzc:text_left="1111111"
mzc:text_right="22222222"
效果: