Android自定义View控件
自定义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>
自定义属性
两个TextView都要使用类似setText(" ")的方法去设置自己的内容是吧.于是,在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.
自定义View类,做控件
上面准备功夫做好.在 包里新建一个继承RelativeLayout的ItemListCustomText类, 请注意,这个名字必须和自定义属性XML文件中的name是一致的.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), 这样代码里就能通过在它们去设置文本内容.
使用自定义View的控件
要注意的地方: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("内容~");
以上,就是一个完整的自定义用法.例子虽简单,但是触类旁通.这样就能自己定义更复杂的一些View控件了.
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。