自定义View控件, 算是常见的用法. 刚接触安卓开发的时候, 很多人习惯在不同的XML布局文件里面Copy一大段代码, "达到相同View不断被使用的效果",但如果以后要改这个view了,估计也是很头疼的事情,而且一大段代码看起来也不够简洁. 而一旦自定义一个view, 就能在布局里面重复的调用它,而不必写一大段XML代码了. 这里用一个简单的例子介绍下.
比如这个布局: (一个RelativeLayout里面, 左右分别一个TextView),常见的是在某个列表里充当item
首先, 当然是在layout文件夹新建这个布局文件: item_list_cus_2.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="45dp" android:paddingLeft="15dp" android:paddingRight="15dp" android:background="@color/white" > <TextView android:id="@+id/tv_item_list_cus_2_title" android:layout_width="wrap_content" android:layout_height="35dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:textSize="16sp" android:textColor="@color/font_black" android:gravity="center_vertical" android:text="内容展示" android:textIsSelectable="true" /> <TextView android:id="@+id/tv_item_list_cus_2_con" android:layout_width="wrap_content" android:layout_height="35dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:textSize="16sp" android:textColor="@color/gray_high" android:gravity="center_vertical" android:text="内容展示二" android:textIsSelectable="true" /> </RelativeLayout>
于是,在values文件夹新建一个attrs.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="ItemListCustomText"> <attr name="title" format="string" /> <attr name="content" format="string" /> </declare-styleable> </resources>我们假设,左边那个TextView是充当Title, 右边的TextView是充当content. 所以上面分别自定义title和content的属性, 格式都是string.
public class ItemListCustomText extends RelativeLayout{ private TextView tv_left; private TextView tv_rirght; private String title; private String content; public ItemListCustomText(Context context, AttributeSet attrs) { super(context, attrs); View view = View.inflate(context, R.layout.item_list_custom_2, this); tv_left = (TextView) view.findViewById(R.id.tv_item_list_cus_2_title); tv_rirght = (TextView) view.findViewById(R.id.tv_item_list_cus_2_con); TypedArray t = context.obtainStyledAttributes(attrs, R.styleable.ItemListCustomText); title = t.getString(R.styleable.ItemListCustomText_title); if(title != null) tv_left.setText(title); content = t.getString(R.styleable.ItemListCustomText_content); if(content != null) tv_rirght.setText(content); t.recycle(); } public void setTitle(String title){ tv_left.setText(title); } public void setContent(String content){ tv_rirght.setText(content); } }上面类中主要提供了两个方法, setTitle(String title) 和setContent(String content), 这样代码里就能通过在它们去设置文本内容.
要注意的地方:xmlns:itemText="http://schemas.android.com/apk/res/com.sample.android"
com.sample.android 这里应该写自己的包名,就是AndroidManifest.xml里面的那个,你懂的~
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:itemText="http://schemas.android.com/apk/res/com.sample.android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#F5F6F7" > <com.sample.android.widget.ItemListCustomText android:id="@+id/area_self_info_onlineTime" android:layout_width="match_parent" android:layout_height="45dp" itemText:title="标题" itemText:content="内容" /> </LinearLayout>
在代码里findViewById后,直接调用自定义的方法设置文本即可.
itemText.setContent("标题~"); itemText.setContent("内容~");
原文地址:http://blog.csdn.net/stzy00/article/details/42007215