1.自定义组合控件的界面:myview.xml:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TableRow>
<TextView
android:id="@+id/textview"
android:textSize="30sp"
android:text="@string/boshu1"
/>
<ImageView
android:id="@+id/bo1"
android:background="@drawable/greenb"
android:layout_width="80dp"
android:layout_height="15dp"
android:layout_gravity="center"
/>
<ImageView
android:id="@+id/bo2"
android:background="@drawable/greyb"
android:layout_width="80dp"
android:layout_height="15dp"
android:layout_gravity="center"
/>
<ImageView
android:id="@+id/bo3"
android:background="@drawable/greyb"
android:layout_width="80dp"
android:layout_height="15dp"
android:layout_gravity="center"
/>
</TableRow>
</TableLayout>
2.自定义控件的属性设置,用来对自定义控件中的子控件进行设置attrs.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--自定义控件的属性-->
<declare-styleable name="boshu">
<attr name="boshuText" format="string"/>
<attr name="boshuBg1" format="integer"/>
<attr name="boshuBg2" format="integer"/>
<attr name="boshuBg3" format="integer"/>
</declare-styleable>
</resources>
3.自定义控件java文件:myview.java 继承的布局要与myview.xml定义的布局一致,这里都是TableLayout:
public class boshu extends TableLayout {
private TextView textview;
private ImageView img1;
private ImageView img2;
private ImageView img3;
private ImageView img4;
private String boshuText;
private Integer pic1;
private Integer pic2;
private Integer pic3;
private Integer pic4;
public boshu(Context context, AttributeSet attrs) {
super(context, attrs);
//加载视图布局
LayoutInflater.from(context).inflate(R.layout.boshu,this,true);
//加载自定义的属性
TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.boshu);
boshuText=a.getString(R.styleable.boshu_boshuText);
pic1=a.getResourceId(R.styleable.boshu_boshuBg1,R.drawable.greyb);
pic2=a.getResourceId(R.styleable.boshu_boshuBg2,R.drawable.greyb);
pic3=a.getResourceId(R.styleable.boshu_boshuBg3,R.drawable.greyb);
pic4=a.getResourceId(R.styleable.boshu_boshuBg4,R.drawable.greyb);
//回收资源
a.recycle();
}
//此方法会在所有控件都从xml文件中加载完成后调用,实现“获取子控件对象"功能
protected void onFinishInflate(){
super.onFinishInflate();
//获取子控件
textview = (TextView)findViewById(R.id.textview);
img1=(ImageView)findViewById(R.id.bo1);
img2=(ImageView)findViewById(R.id.bo2);
img3=(ImageView)findViewById(R.id.bo3);
img4=(ImageView)findViewById(R.id.bo4);
//将从资源文件中加载的属性设置给子控件
if(!TextUtils.isEmpty(boshuText))
{
setPageBoshuText(boshuText);
}
setPageImage1(pic1);
setPageImage2(pic2);
setPageImage3(pic3);
setPageImage4(pic4);
}
public void setPageBoshuText(String text){
textview.setText(text);
}
public void setPageImage1(int resId){
img1.setBackgroundResource(resId);
}
public void setPageImage2(int resId){
img2.setBackgroundResource(resId);
}
public void setPageImage3(int resId){
img3.setBackgroundResource(resId);
}
public void setPageImage4(int resId){
img4.setBackgroundResource(resId);
}
}
4.调用该自定义控件的xml文件:second_main.xml:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.minzu.uidesign.boshu
android:id="@+id/boshu1"
android:layout_width="match_parent"
android:layout_height="40dp"
app:boshuBg1="@drawable/greenb"
app:boshuBg2="@drawable/greenb"
app:boshuBg3="@drawable/greyb"
app:boshuBg4="@drawable/greyb"
/>
/TableLayout>