實(shí)例講解Android自定義控件
小編在此之前給大家介紹過關(guān)于Android自定義控件的用法等,需要的可以參考下:
可以看到QQ上的ToolBar其實(shí)就是一個自定義的view,可以看到不同的界面就是簡單地修改了文字而已,在第二張與第三張尤其的明顯,我們就仿QQ的這個Toolbar設(shè)置一個自定義控件
在開始之前,首先了解一下官方是如何實(shí)現(xiàn)一個控件的,比如說一個Linearlayout
它不是有l(wèi)ayout_width和layout_height這兩個屬性嗎?其實(shí),這兩個屬性就是官方定義的
官方的操作其實(shí)就是繼承了一個ViewGroup,Linearlayout相當(dāng)于一個自定義View,其中的方法我們也不用深究,我們打開Path的那個路徑,可以找到一個atts.xml文件,打開我們可以在里面看到定義了Linearlayout關(guān)于layout的屬性,有l(wèi)ayout_width和layout_height這幾個屬性,看到這里我們也就明白了我們在布局文件中引用要使用的屬性
正文開始,我們講解一個自定義控件的步驟:
1.設(shè)計(jì)需要使用的屬性
先將模式切換為project模式
新建一個moudle
修改相關(guān)包名,庫名
這里選擇第一個,也就是不創(chuàng)建activity界面,之后點(diǎn)擊finish就完成了
依次展開Topbar->res->values,在values創(chuàng)建一個atts.xml文件
xml文件代碼如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Topbar"> <attr name="title" format="string"/> <attr name="titleTextSize" format="dimension"/> <attr name="titleTextColor" format="color"/> <attr name="leftTextColor" format="color"/> <attr name="leftBackgroud" format="reference|color"/> <attr name="leftText" format="string"/> <attr name="rightTextColor" format="color"/> <attr name="rightBackgroud" format="reference|color"/> <attr name="rightText" format="string"/> </declare-styleable> </resources>
深入理解可以看看這一篇 http://blog.csdn.net/zjh_1110120/article/details/50976027
2.實(shí)現(xiàn)一個我們需要的控件
在topbar的java文件夾,新建一個Topbar類,使其繼承RelativeLayout
之后,重寫其中帶有兩個參數(shù)的構(gòu)造方法,Attributeset這個類是用來存放之前定義在xml文件中的各種屬性
之后,創(chuàng)建一個TypedArray類的對象ta,調(diào)用context的obtainStyleAttribute方法,獲取剛才我們創(chuàng)建的atts.xml中的各類屬性,第二個參數(shù)Topbar就是上文atts.xml中定義<declare-styleable name="Topbar">
之后,便是可以使用TypedArray類中的getxx方法來取得xml中定義的相關(guān)屬性,Topbar與atts.xml中定義的屬性使用下劃線連接
可以看到有些第二個參數(shù)為0,意思就是如果在布局文件沒有給控件的屬性沒有設(shè)置屬性值,就默認(rèn)為0
還要記得最后需要回收
之后獲得之前的屬性值,以此設(shè)置相關(guān)屬性
這里呢,當(dāng)我們在布局文件中使用了這個自定義控件的屬性時候,這個類就會獲得我們所輸入的屬性值,之后調(diào)用上述方法進(jìn)行設(shè)置
到這一步之后,我們還需要將左右button與標(biāo)題textview放在一個View中,使用LayoutPram的addview方法添加到VIew中
首先聲明三個LayoutPram
進(jìn)行寬高設(shè)置之后,使用addView添加到View當(dāng)中
到這一步,布局就是完成了,但是還要實(shí)現(xiàn)左右button的點(diǎn)擊事件,直接設(shè)置一個點(diǎn)擊的監(jiān)聽器就是完成了
但是,這不是我們想要的模板,模板的話,是應(yīng)該直接在activity中設(shè)置監(jiān)聽器不是更為快捷,而不應(yīng)該是在控件這里寫相關(guān)的事件處理,所以,我們得使用接口回調(diào)機(jī)制
仿照button設(shè)置監(jiān)聽器的方法,我們可以定義一個接口類topbarClickListener,在其中聲明兩個方法,對應(yīng)左按鈕的點(diǎn)擊與右按鈕的點(diǎn)擊事件,之后,聲明一個接口類對象listener,創(chuàng)建一個setOnTopbarClickListener方法,在其中將參數(shù)傳給之前聲明的listener
之后,修改左右button的點(diǎn)擊事件,使其調(diào)用接口里的方法,這樣就是完成了
三、引用我們的控件
引用就是像使用button那樣引用,進(jìn)行屬性的相關(guān)賦值,就如同我們使用button,textview等控件的屬性一樣
這里可以看到,有個cus,類似我們使用的android,像系統(tǒng)定義的button等控件,我們設(shè)置它的屬性都是需要寫上android,之前有一句xmlns:android=http://schemas.android.com/apk/res/android
這就是說明使用的android本身的控件屬性,android這個相當(dāng)于一個名字,我們可以隨便寫,之后將后面的改為res-auto,之后使用我們的自定義屬性就是以我們之前寫的名字為前綴,就如我圖中那樣
其中cus可以任意指定,但不能與系統(tǒng)的命名空間相同,在android studio中如上 用res-auto,在eclipse中res后需要完整的包名
右邊的預(yù)覽圖大家也可以看到實(shí)際的效果
大家在學(xué)習(xí)后如果有什么心得體會可以在下方直接給我們留言。
- android自定義控件ImageView實(shí)現(xiàn)圓形圖片
- Android自定義控件ImageView實(shí)現(xiàn)點(diǎn)擊之后出現(xiàn)陰影效果
- Android自定義控件ViewFipper實(shí)現(xiàn)豎直跑馬燈效果
- Android自定義控件打造絢麗平行空間引導(dǎo)頁
- Android自定義控件EditText實(shí)現(xiàn)清除和抖動功能
- Android自定義控件EditText使用詳解
- Android自定義控件實(shí)現(xiàn)下拉刷新效果
- 基于Android自定義控件實(shí)現(xiàn)雷達(dá)效果
- Android編程實(shí)現(xiàn)自定義控件的方法示例
- Android自定義控件之日期選擇控件使用詳解
- Android自定義控件實(shí)現(xiàn)九宮格解鎖功能
相關(guān)文章
Android中關(guān)于定時任務(wù)實(shí)現(xiàn)關(guān)閉訂單問題
在電商、支付等領(lǐng)域,往往會有這樣的場景,用戶下單后放棄支付了,那這筆訂單會在指定的時間段后進(jìn)行關(guān)閉操作,細(xì)心的你一定發(fā)現(xiàn)了像某寶、某東都有這樣的邏輯,而且時間很準(zhǔn)確,誤差在1s內(nèi);那他們是怎么實(shí)現(xiàn)的呢?今天通過本文學(xué)習(xí)定時任務(wù)實(shí)現(xiàn)關(guān)閉訂單問題2022-05-05Android檢測手機(jī)中存儲卡及剩余空間大小的方法(基于Environment,StatFs及DecimalFormat
這篇文章主要介紹了Android檢測手機(jī)中存儲卡及剩余空間大小的方法,基于Environment,StatFs及DecimalFormat實(shí)現(xiàn)該功能,具有一定參考借鑒價值,需要的朋友可以參考下2016-01-01flutter 動手?jǐn)]一個城市選擇citypicker功能
在一些項(xiàng)目開發(fā)中經(jīng)常會用到城市選擇器功能,今天小編動手?jǐn)]一個基于flutter 城市選擇citypicker功能,具體實(shí)現(xiàn)過程跟隨小編一起看看吧2021-08-08Flutter實(shí)現(xiàn)編寫富文本Text的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何通過Flutter實(shí)現(xiàn)編寫富文本Text,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下2022-11-11Android提高之BLE開發(fā)Android手機(jī)搜索iBeacon基站
這篇文章主要介紹了BLE開發(fā)Android手機(jī)搜索iBeacon基站,需要的朋友可以參考下2014-08-08Android實(shí)現(xiàn)驗(yàn)證碼登錄
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)驗(yàn)證碼登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-03-03Android實(shí)戰(zhàn)教程第五篇之一鍵鎖屏應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)教程第五篇之一鍵鎖屏應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11