首页 > 代码库 > Android实例-手机安全卫士(七)-自定义组合控件

Android实例-手机安全卫士(七)-自定义组合控件

一、目标。

  将多个系统控件(TextView、Button、CheckBox等)组合成一个自定义的控件,并像系统控件一样使用。如图所示第1个自动更新控件是根据相对布局放置而成的,第2个自动更新控件即为自定义组合控件,它可以想一般的TextView等系统控件一样重复使用。

自定义控件如图:

技术分享

二、代码实现。

  1、在layout文件夹下新建一个xml文件(取名model_setting_item.xml),用于保存自定义控件的布局。

  2、在新建的xml文件(model_setting_item.xml)中根据设计将各个系统控件组织排列。这里可以将第六讲中的“设置中心”的布局文件(activity_setting.xml)里面的相对布局中的代码拷贝至新建的xml文件中,主要拷贝时要保留新建xml文件中相对布局的头。

新建xml文件(model_setting_item.xml)代码:

技术分享
 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:layout_width="wrap_content" 4     android:layout_height="wrap_content" 5     android:layout_marginLeft="10dip" 6     android:layout_marginRight="10dip" > 7  8     <TextView 9         android:id="@+id/setting_update_title"10         android:layout_width="wrap_content"11         android:layout_height="wrap_content"12         android:layout_marginTop="10dip"13         android:text="自动更新"14         android:textColor="#000000"15         android:textSize="22dip" />16 17     <TextView18         android:id="@+id/setting_update_content"19         android:layout_width="wrap_content"20         android:layout_height="wrap_content"21         android:layout_below="@id/setting_update_title"22         android:text="允许软件联网时自动更新"23         android:textColor="#88000000"24         android:textSize="18dip" />25 26     <CheckBox27         android:id="@+id/setting_update_checkbox"28         android:layout_width="wrap_content"29         android:layout_height="wrap_content"30         android:layout_alignParentRight="true"31         android:layout_centerVertical="true" />32 33     <View34         android:layout_width="match_parent"35         android:layout_height="0.1dip"36         android:layout_below="@id/setting_update_content"37         android:layout_marginTop="2dip"38         android:background="#70000000" />39 40 </RelativeLayout>
View Code

 

   3、类似于创建跑马灯控件(见第四讲)的方式在自定义工具类包(com.example.mobilesafe.ui)下新建一个继承相对布局的类(取名SettingItemView)。在新建类(SettingItemView)代码中:

    ①.定义三个构造方法(同“跑马灯”章节):菜单栏Source——Generate Constructors from Superclass,在弹出的对话框中点击OK。

代码如下:

技术分享
 1 public class SettingItemView extends RelativeLayout { 2  3     public SettingItemView(Context context, AttributeSet attrs, int defStyle) { 4         super(context, attrs, defStyle); 5     } 6  7     public SettingItemView(Context context, AttributeSet attrs) { 8         super(context, attrs); 9     }10 11     public SettingItemView(Context context) {12         super(context);13     }14 }
View Code

    ②.创建初始化布局文件的方法(取名iniView(Context context)),传一个上下文作为该方法的参数。在方法iniView(Context context)中通过View对象的inflate(Context context, int resource, ViewGroup root)方法将一个资源文件resource(布局文件)转成View对象并加载至ViewGroup中,参数Context context是上下文,int resource是需要转化的资源文件(这里就是刚才新建的xml文件(model_setting_item.xml),ViewGroup root就是需要装载的父组件(这是就是SettingItemView.this)。

iniView方法代码(注意导入R包时为com.example.mobilesafe.R资源包):

技术分享
1 private void iniView(Context context) {2         View.inflate(context, R.layout.model_setting_item, SettingItemView.this);3     }
View Code

 

    ③.在三个构造方法中均执行初始化布局文件的方法iniView(context)。

  4、使用自定义组合控件。

    在布局文件中(这里还是以”设置中心“布局文件activity_setting.xml为例)增加自定义组合控件,即在activity_setting.xml文件中的相对布局下创建一个以自定义控件全路径名称的控件,设置宽、高、id等属性。

代码如下:

技术分享
1  <com.example.mobilesafe.ui.SettingItemView2         android:id="@+id/setting_update"3         android:layout_width="wrap_content"4         android:layout_height="wrap_content" >5     </com.example.mobilesafe.ui.SettingItemView>
View Code

 

Android实例-手机安全卫士(七)-自定义组合控件