Android自定义组合控件的过程

2022-11-30 16:22:40 浏览数 (2)

自定义组合控件的过程:

(1)自定义一个View,并且继承一种布局,一般来说是相对或者线性布局

(2)实现父类的(3个)构造方法,通常需要在每个构造方法中调用自定义的初始化布局方法(比如那个initView方法,这个方法需要将我们组合控件的那个布局文件转换成一个View,并且加载到自定义的View; 然后将要操作到的控件实例化)

private void iniView(Context context) {

//将制定的布局文件转换成一个View,并且加载到SettingItemView

View.inflate(context, R.layout.setting_item_view, this);

cb_states = (CheckBox) findViewById(R.id.cb_states);

tv_title = (TextView) findViewById(R.id.tv_title);

tv_desc = (TextView) findViewById(R.id.tv_desc);

}

(3)根据需要定义一些操作控件的API方法,比如之前的那个public void setChecked(boolean checked)等

(4)根据需要,自定义控件的属性,可以参照TextView属性

(5)首先,参照xmlns:android="http://schemas.android.com/apk/res/android"

自定义一个命名空间

xmlns:XXX="http://schemas.android.com/apk/res/包名"

例如:

xmlns:sxkeji="http://schemas.android.com/apk/res/com.example.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="desc_on" format="string"/>

<attr name="desc_off" format="string"/>

</declare-styleable>

</resources>

(7)在布局文件中使用自定义属性:

<com.sxkeji.mobilesafe.ui.SettingItemView

sxkeji:title="设置自动更新"

sxkeji:desc_on="自动升级已经开启"

sxkeji:desc_off="自动升级已经关闭"

android:id="@ id/siv_update"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

(8)在我们自定义控件的View的、带有2个参数的构造函数中,利用attrs.getAttributeValue()方法取出属性值,关联布局文件中对应的控件

例如:

String title =  attrs.getAttributeValue("http://schemas.android.com/apk/res/com.example.mobilesafe", "title");

tv_title.setText(title);

0 人点赞