Android之自定义组合控件

自定义组合控件,顾名思义就是说自定义的组合起来的控件~

如图:


有没有人觉得这个好简单啊,不就是写个布局的事吗~是吧,是的,是可以写个布局文件,但是,等条目多起来的时候,就麻烦了~所以,这时候,就引进了自定义组合控件这个功能,而且,仔细观察,每一个条目只有左边的图片和文字不同,大致是相同的,所以这时候可以把每一个条目当成是自定义组合控件,这样的话,不管你有多少个条目,就写几个自定义组合控件就行了~

步骤:

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>

第三行是我的命名空间~

然后自定义组合控件就这么完成了~~~

想要源码的点这


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值