在Android開(kāi)發(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="自動(dòng)更新關(guān)閉" victor:desc_on="自動(dòng)更新開(kāi)啟" victor:title="設(shè)置自動(dòng)更新" > </com.victor.mobilesafe.ui.SettingItemView> </LinearLayout>
總結(jié):
1.自定義一個(gè)View 一般來(lái)說(shuō),繼承相對(duì)布局,或者線性布局 ViewGroup;
2.實(shí)現(xiàn)父類的構(gòu)造方法。一般來(lái)說(shuō),需要在構(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è)置自動(dòng)更新" itheima:desc_on="設(shè)置自動(dòng)更新已經(jīng)開(kāi)啟" itheima:desc_off="設(shè)置自動(dòng)更新已經(jīng)關(guān)閉"
8.在我們自定義控件的帶有兩個(gè)參數(shù)的構(gòu)造方法里AttributeSet attrs 取出我們的屬性值,關(guān)聯(lián)自定義布局文件對(duì)應(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自定義組合控件的基本編寫(xiě)方法
- 探究Android中ListView復(fù)用導(dǎo)致布局錯(cuò)亂的解決方案
- Android自定義控件之繼承ViewGroup創(chuàng)建新容器
- Android自定義控件之創(chuàng)建可復(fù)用的組合控件
相關(guān)文章
詳解Android的網(wǎng)絡(luò)數(shù)據(jù)存儲(chǔ)
LeanCloud是一種簡(jiǎn)單高效的數(shù)據(jù)和文件存儲(chǔ)服務(wù),本文主要介紹了利用LeanCloud來(lái)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的存儲(chǔ)的實(shí)現(xiàn)方法。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧2016-12-12Android 系統(tǒng)相機(jī)拍照后相片無(wú)法在相冊(cè)中顯示解決辦法
這篇文章主要介紹了Android 系統(tǒng)相機(jī)拍照后相片無(wú)法在相冊(cè)中顯示解決辦法的相關(guān)資料,需要的朋友可以參考下2016-12-12Android studio中生成引用.aar和.jar的方法詳解
這篇文章主要是講解.aar的生成與引用,文中的內(nèi)容屬于完全基礎(chǔ)性概念,對(duì)剛學(xué)習(xí)使用Android studio的朋友們很有幫助,有需要的可以參考學(xué)習(xí),下面來(lái)一起看看吧。2016-09-09Android 添加TextView刪除線(代碼簡(jiǎn)單)
最近接了個(gè)項(xiàng)目,其中有項(xiàng)目需求是這樣的,有這么個(gè)需求,就是一個(gè)產(chǎn)品下有兩個(gè)價(jià)格,一個(gè)是市場(chǎng)價(jià),一個(gè)是銷售價(jià),這時(shí)要把市場(chǎng)價(jià)添加個(gè)刪除線;怎么實(shí)現(xiàn)呢?下面小編給大家分享一段簡(jiǎn)單的代碼實(shí)現(xiàn)Android 添加TextView刪除線2016-02-02Android數(shù)據(jù)類型之間相互轉(zhuǎn)換系統(tǒng)介紹
一些初學(xué)Android的朋友可能會(huì)遇到JAVA的數(shù)據(jù)類型之間轉(zhuǎn)換的苦惱;本文將為有這類需求的朋友解決此類問(wèn)題2012-11-11詳解Android開(kāi)發(fā)中硬件加速支持的使用方法
這篇文章主要介紹了Android應(yīng)用開(kāi)發(fā)中硬件加速支持的使用方法,主要針對(duì)圖形繪制時(shí)的硬件加速與OpenGL調(diào)用,需要的朋友可以參考下2016-02-02Android SharedPreferences存取操作以及封裝詳解
SharedPreferences是安卓平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,用來(lái)保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再?gòu)腟haredPreferences中將值取出2021-11-11Flutter開(kāi)發(fā)之Widget自定義總結(jié)
這篇文章主要給大家介紹了關(guān)于Flutter開(kāi)發(fā)中Widget自定義的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04