步骤:
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 变量取出我们需要的属性值,再关联自定义布局文件对应的控件