在Android開發(fā)中使用自定義組合控件的例子
一、定義一個(gè)XML布局文件
setting_item_view.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="60dip" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginLeft="5dip" android:layout_marginTop="5dip" android:textColor="#000000" android:textSize="20dip" /> <TextView android:id="@+id/tv_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tv_title" android:layout_marginLeft="5dip" android:layout_marginBottom="5dip" android:textColor="#99000000" android:textSize="18dip" /> <CheckBox android:clickable="false" android:focusable="false" android:id="@+id/cb_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="20dip" /> <View android:layout_width="fill_parent" android:layout_height="0.2dip" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:background="#000000" /> </RelativeLayout>
二、在src/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>
三、自定義一個(gè)view繼承自你需要的布局
iniview(Context context)初始化自定義的布局文件
根據(jù)需求自定義一些API方法
public class SettingItemView extends RelativeLayout { private CheckBox cb_status; private TextView tv_title; private TextView tv_desc; private String title; private String desc_on; private String desc_off; public void iniview(Context context){ View.inflate(context, R.layout.setting_item_view, this); cb_status = (CheckBox)findViewById(R.id.cb_status); tv_title = (TextView)findViewById(R.id.tv_title); tv_desc = (TextView)findViewById(R.id.tv_desc); } public SettingItemView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); iniview(context); } public SettingItemView(Context context, AttributeSet attrs) { super(context, attrs); iniview(context); title = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.victor.mobilesafe","title"); desc_on = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.victor.mobilesafe","desc_on"); desc_off = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.victor.mobilesafe","desc_off"); tv_title.setText(title); setDesc(desc_off); } public SettingItemView(Context context) { super(context); iniview(context); } public boolean isChecked(){ return cb_status.isChecked(); } public void setChecked(boolean checked){ if (checked) { setDesc(desc_on); }else{ setDesc(desc_off); } cb_status.setChecked(checked); } public void setDesc(String text){ tv_desc.setText(text); } }
四、在布局文件中使用該自定義組合控件
別忘記聲明自定義命名空間
xmlns:victor="http://schemas.android.com/apk/res/com.victor.mobilesafe"
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:victor="http://schemas.android.com/apk/res/com.victor.mobilesafe" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.victor.mobilesafe.ui.SettingItemView android:id="@+id/siv_update" android:layout_width="wrap_content" android:layout_height="wrap_content" victor:desc_off="自動更新關(guān)閉" victor:desc_on="自動更新開啟" victor:title="設(shè)置自動更新" > </com.victor.mobilesafe.ui.SettingItemView> </LinearLayout>
總結(jié):
1.自定義一個(gè)View 一般來說,繼承相對布局,或者線性布局 ViewGroup;
2.實(shí)現(xiàn)父類的構(gòu)造方法。一般來說,需要在構(gòu)造方法里初始化自定義的布局文件;
3.根據(jù)一些需要或者需求,定義一些API方法;
4.根據(jù)需要,自定義控件的屬性,可以參照TextView屬性;
5.自定義命名空間,例如:
xmlns:victor="http://schemas.android.com/apk/res/<包名>" xmlns:victor="http://schemas.android.com/apk/res/com.victor.mobilesafe"
6.自定義我們的屬性,在Res/values/attrs.xml
7.使用我們自定義的屬性
例如:
itheima:title="設(shè)置自動更新" itheima:desc_on="設(shè)置自動更新已經(jīng)開啟" itheima:desc_off="設(shè)置自動更新已經(jīng)關(guān)閉"
8.在我們自定義控件的帶有兩個(gè)參數(shù)的構(gòu)造方法里AttributeSet attrs 取出我們的屬性值,關(guān)聯(lián)自定義布局文件對應(yīng)的控件。
- Android自定義控件之自定義組合控件(三)
- Android自定義View之組合控件實(shí)現(xiàn)類似電商app頂部欄
- Android自定義控件之組合控件學(xué)習(xí)筆記分享
- Android組合控件實(shí)現(xiàn)功能強(qiáng)大的自定義控件
- Android自定義組合控件之自定義下拉刷新和左滑刪除實(shí)例代碼
- 實(shí)例講解Android應(yīng)用中自定義組合控件的方法
- Android中View自定義組合控件的基本編寫方法
- 探究Android中ListView復(fù)用導(dǎo)致布局錯亂的解決方案
- Android自定義控件之繼承ViewGroup創(chuàng)建新容器
- Android自定義控件之創(chuàng)建可復(fù)用的組合控件
相關(guān)文章
詳解Android的網(wǎng)絡(luò)數(shù)據(jù)存儲
LeanCloud是一種簡單高效的數(shù)據(jù)和文件存儲服務(wù),本文主要介紹了利用LeanCloud來進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的存儲的實(shí)現(xiàn)方法。具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12Android 系統(tǒng)相機(jī)拍照后相片無法在相冊中顯示解決辦法
這篇文章主要介紹了Android 系統(tǒng)相機(jī)拍照后相片無法在相冊中顯示解決辦法的相關(guān)資料,需要的朋友可以參考下2016-12-12Android studio中生成引用.aar和.jar的方法詳解
這篇文章主要是講解.aar的生成與引用,文中的內(nèi)容屬于完全基礎(chǔ)性概念,對剛學(xué)習(xí)使用Android studio的朋友們很有幫助,有需要的可以參考學(xué)習(xí),下面來一起看看吧。2016-09-09Android數(shù)據(jù)類型之間相互轉(zhuǎn)換系統(tǒng)介紹
一些初學(xué)Android的朋友可能會遇到JAVA的數(shù)據(jù)類型之間轉(zhuǎn)換的苦惱;本文將為有這類需求的朋友解決此類問題2012-11-11Android SharedPreferences存取操作以及封裝詳解
SharedPreferences是安卓平臺上一個(gè)輕量級的存儲類,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再從SharedPreferences中將值取出2021-11-11Flutter開發(fā)之Widget自定義總結(jié)
這篇文章主要給大家介紹了關(guān)于Flutter開發(fā)中Widget自定義的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04