步骤:
1.先建立一个xml文件做好里面的布局;
2.建立一个对应的类;
3.在需要用到此布局的地方进行调用这个布局;
具体的实现代码:
1.建立的xml文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="63dip" > <TextView android:textColor="#000000" android:layout_marginTop="10dip" android:layout_marginLeft="10dip" android:id="@+id/tv_title" android:textSize="16sp" android:text="设置是否自动更新" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/tv_descri" android:layout_marginLeft="10dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tv_title" android:text="自动更新已经关闭" android:textColor="#88000000" /> <CheckBox android:layout_marginRight="10dip" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <View android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:layout_alignParentBottom="true" android:background="#000000" android:layout_width="fill_parent" android:layout_height="0.2dip" /> </RelativeLayout>2.建立一个对应的类:
package com.jit.mobilesafe.ui; import com.jit.mobilesafe.R; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.RelativeLayout; //这里面包括两个textview,一个checkbox,一个view public class SettingItemView extends RelativeLayout { private void initView(Context context) { // TODO Auto-generated method stub View.inflate(context, R.layout.setting_item_view, this); } public SettingItemView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(context); } public SettingItemView(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public SettingItemView(Context context) { super(context); initView(context); } }3.在需要此布局文件中进行调用此布局(也就是类)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_home" android:background="#8866ff" android:textSize="22sp" android:textColor="#000000" android:text="设置中心" android:gravity="center" android:layout_width="fill_parent" android:layout_height="55dip" /> <span style="color:#ff0000;"><com.jit.mobilesafe.ui.SettingItemView android:id="@+id/siv_setting" android:layout_width="wrap_content" android:layout_height="wrap_content" > </com.jit.mobilesafe.ui.SettingItemView> </span> </LinearLayout>
总结:
1.自定义一个View 一般来说,继承相对布局,或者是线性布局 ViewGroup
2.实现父类的构造方法,一般来说 需要在构造方法里初始化自定义的布局文件;
3.根据需要,定义一些API方法(也就是我们需要的一些用到的方法);
-------------------------------------------------------------------------------------------------------------
4.根据需要,自定义控件的属性,可以参考TextView属性;
5.自定义命名空间,例如:
xmlns:<自己起的名字>="http://schemas.android.com/apk/res/<包名>"
xmlns:itjit="http://schemas.android.com/apk/res/com.jit.mobilesafe"
6.自定义我们的属性,在res/values/attrs.xml 文件中
例如:
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="TextView"> <attr name="title" format="string" /> <attr name="descri_on" format="string" /> <attr name="descri_off" format="string" /> </declare-styleable> </resources>7.使用我们自定义的属性:
例如:
<com.jit.mobilesafe.ui.SettingItemView itjit:title="设置自动更新" itjit:descri_on="自动更新已经开启" itjit:descri_off="自动更新已经关闭" android:id="@+id/siv_setting_update" android:layout_width="wrap_content" android:layout_height="wrap_content" >8.在我们自定义控件中带有两个参数的构造方法里利用Attribute 变量取出我们需要的属性值,再关联自定义布局文件对应的控件