自定义组合控件,顾名思义就是说自定义的组合起来的控件~
如图:
有没有人觉得这个好简单啊,不就是写个布局的事吗~是吧,是的,是可以写个布局文件,但是,等条目多起来的时候,就麻烦了~所以,这时候,就引进了自定义组合控件这个功能,而且,仔细观察,每一个条目只有左边的图片和文字不同,大致是相同的,所以这时候可以把每一个条目当成是自定义组合控件,这样的话,不管你有多少个条目,就写几个自定义组合控件就行了~
步骤:
1.先写一个条目的布局文件:
view.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="70dp"
android:background="#ffffff">
<ImageView
android:id="@+id/iv1"
android:src="@drawable/pengyouquan"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="15dp"
android:layout_centerVertical="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:id="@+id/tv"
android:text="朋友圈"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@id/iv1"/>
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginRight="15dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/jiantou"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#ECECEC"
android:layout_alignParentBottom="true"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"/>
</RelativeLayout>
2.自定义属性(图片和文本)
在res/values/新建了个attrs.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView_attrs">
<attr name="src" format="reference"></attr>
<attr name="text" format="string"></attr>
</declare-styleable>
</resources>
MyView_attrs是自定义属性的名字
src和text是自定义属性的字段~
reference值类型为引用类型,比如图片什么的~
string值类型为字符串
3.新建一个类继承了view.xml的RelativeLayout,将自定义布局的文件加载进来,然后获得自定义属性段的值,在相应的组件上设置相应的值~
public class MyView extends RelativeLayout{
private ImageView icon_iv;
private TextView tv;
//如果要自定义属性,那么就要回调俩个参数的构造器
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initview(context);
拿到自定义的属性
TypedArray ta=context.obtainStyledAttributes(attrs, R.styleable.MyView_attrs);
获取自定义属性的值
String text=ta.getString(R.styleable.MyView_attrs_text);
Drawable drawable=ta.getDrawable(R.styleable.MyView_attrs_src);
把值设置到相应组件上
tv.setText(text);
icon_iv.setImageDrawable(drawable);
}
public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
initview(context);
}
private void initview(Context context) {
// TODO Auto-generated method stub
把自定义的布局加载进来
View.inflate(context, R.layout.view, this);
icon_iv=(ImageView) this.findViewById(R.id.iv1);
tv=(TextView) this.findViewById(R.id.tv);
}
}
4.然后在activity_main.xml加上自定义组合控件,还要记得加上命名空间,要几个条目就加几个~
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xu="http://schemas.android.com/apk/res/com.example.comp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.example.comp.MyView
xu:src="@drawable/pengyouquan"
xu:text="朋友圈"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.example.comp.MyView>
<com.example.comp.MyView
xu:src="@drawable/papaqi"
xu:text="啪啪奇"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.example.comp.MyView>
<com.example.comp.MyView
xu:src="@drawable/shouchang"
xu:text="收藏"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.example.comp.MyView>
</LinearLayout>
第三行是我的命名空间~
然后自定义组合控件就这么完成了~~~