本文將介紹的簡單控件與上篇最大的不同就是引入了各種各樣的監(jiān)聽器近范,用于捕捉用戶動作并做出特定的響應(yīng),相信大家學(xué)java時候?qū)λ辛艘欢ǖ恼J(rèn)識延蟹,接下來以Button為例评矩,總結(jié)三種監(jiān)聽器實(shí)現(xiàn)方法,然后會分別介紹其余簡單控件的作用和所需監(jiān)聽器的類型阱飘。
6.Botton :按鈕
按鈕無處不在斥杜,它是和用戶進(jìn)行交互的一個常用控件。如下圖這樣的一個Button:
為了實(shí)現(xiàn)點(diǎn)擊登錄按鈕后登錄的操作沥匈,就需要用監(jiān)聽器捕捉點(diǎn)擊的動作并作出反應(yīng)蔗喂,因?yàn)榇颂幧婕暗教D(zhuǎn)頁面等知識,暫且先用Log日志進(jìn)行調(diào)試高帖,使用Log日志的方法是Log.i()缰儿,含有的兩個參數(shù)都是string類型,前者表示標(biāo)簽名稱散址,便于快速定位乖阵,后者表示調(diào)試信息。
Button的監(jiān)聽器是OnClickListener预麸,如何注冊點(diǎn)擊事件呢瞪浸?首先在Mainactivity中對聲明一個Button對象并綁定數(shù)據(jù),然后用setOnClickListener方法給它安上監(jiān)聽器吏祸,這里需要一個OnClickListener對象的參數(shù)默终,實(shí)現(xiàn)方式有以下三種方法:
(1)匿名內(nèi)部類
在括號內(nèi)部new一個匿名監(jiān)聽器對象,然后直接重寫方法onClick犁罩。這時運(yùn)行app并點(diǎn)擊登錄按鈕齐蔽,從Log日志可見onClick事件被觸發(fā)了:
查看Log日志方法見技能篇。
(2)獨(dú)立類
和匿名類相對的床估,在外部初始化一個有名字的監(jiān)聽器對象含滴。
(3)監(jiān)聽接口方式
繼承監(jiān)聽接口要在MainActivity類內(nèi)重寫方法onClick,此時用this就可以實(shí)現(xiàn)監(jiān)聽器的作用丐巫。
7.ImageButton :圖片按鈕
ImageButton是顯示圖片的按鈕谈况,它和Button的區(qū)別是:Button可以顯示文本信息,有android:text屬性但沒有android:src屬性递胧,它也可以沒有任何文本信息就是一個按鈕碑韵;ImageButton正好相反,沒有android:text屬性但有android:src屬性缎脾,如果不設(shè)置scr屬性ImageButton的高度會不確定祝闻。當(dāng)然兩者都有android:background屬性,Button想顯示圖片遗菠,ImageButton想有高度联喘,也可以通過它實(shí)現(xiàn)华蜒,但圖片變形與否就要看控件大小了。下圖展示了兩個Button的效果:
ImageButton的監(jiān)聽器也是OnClickListener豁遭,具體見Button叭喜,此處不再贅述。
在環(huán)境篇介紹過drawable和mipmap系列文件夾都存放圖片資源蓖谢,在src和backgroud可通過@drawable/或@mipmap/顯示系統(tǒng)提供的圖片捂蕴,也可以將系統(tǒng)外的圖片拖進(jìn)上述文件夾里,這和用@string/顯示文本的功能是一致的闪幽。觀察上面的兩個按鈕启绰,它們默認(rèn)底色是灰色,被點(diǎn)擊之后有輕微的效果沟使,現(xiàn)在要把Button改成底色為橘色點(diǎn)擊后閃現(xiàn)紅色的按鈕委可,下面通過改變按鈕的樣式的這個小例子介紹如何用drawable實(shí)現(xiàn)自定義圖像。
step1:在drawable文件夾下新建xml文件腊嗡,shape標(biāo)簽着倾。
因?yàn)楸纠枰o按鈕兩個背景顏色,而shape是就是用于定義形狀的燕少。過程講解見下圖:
上圖展示了在shape里常用的四個屬性卡者,這里給Button自定義前兩個屬性就可以。
step2.在drawable文件夾下新建xml文件客们,selector標(biāo)簽崇决。
光有兩個圖形還不夠,我們需要selector將兩者聯(lián)系在一起底挫。過程講解見下圖:
step3.設(shè)置Button的background屬性恒傻。
總的來說,android自定義控件樣式在drawable文件夾下的XML文件中建邓,然后通過設(shè)置控件的background屬性達(dá)到效果盈厘。
8.ToggleButton :多狀態(tài)按鈕
ToggleButton是開關(guān)按鈕,它有兩種狀態(tài):選中和未選擇狀態(tài)官边。比如使用手機(jī)的手電筒沸手,有開和關(guān)兩種狀態(tài),分別對應(yīng)不同的圖標(biāo)注簿。ToggleButton有幾個常用的屬性:android:checked(當(dāng)前按鈕的狀態(tài)契吉,true表示當(dāng)前處于選中狀態(tài),false表示未選中也是默認(rèn)狀態(tài))诡渴、 android:textOn (當(dāng)被選中時按鈕上的文本內(nèi)容)捐晶、android:textOff(當(dāng)未被選中時按鈕上的文本內(nèi)容)。現(xiàn)在下圖這個布局就很容易理解了(我事先在drawable下放入了兩張圖標(biāo)):
那么如何讓圖標(biāo)和按鈕同時變化呢?就需要ToggleButton的監(jiān)聽器OnCheckedChangeListener了租悄。當(dāng)選中ToggleButton時,觸發(fā)onCheckedChanged事件并會返回一個布爾類型的參數(shù)ischecked恩袱,利用ischecked可以改變ToggleButton的選中狀態(tài)從而改變ToggleButton顯示的文本內(nèi)容泣棋,還可以改變ImageView顯示的背景圖標(biāo)。
9.CheckBox :復(fù)選框
CheckBox是個選框畔塔,有兩種狀態(tài):選中和未選擇狀態(tài)潭辈,“復(fù)”說明它可以在這兩個狀態(tài)反復(fù)切換。CheckBox常用屬性:android:checked(當(dāng)前復(fù)選框的狀態(tài)澈吨,true表示當(dāng)前處于選中狀態(tài)把敢,false表示未選中也是默認(rèn)狀態(tài))、android:text(復(fù)選框后文本內(nèi)容)谅辣。CheckBox的監(jiān)聽器也是OnCheckedChangeListener修赞。下面我們用CheckBox實(shí)現(xiàn)一道可多選的選擇題:
用Log日志進(jìn)行調(diào)試代碼如下,我們希望在日志文件顯示出被選中的CheckBox上的文本內(nèi)容桑阶,先用getText()方法拿到復(fù)選框上的文本信息再通過toString()方法轉(zhuǎn)換成string類型柏副,就能實(shí)現(xiàn)了。
調(diào)試結(jié)果:
10.RadioButton :單選按鈕
RadioButton也有選中和未選中的兩個狀態(tài)蚣录,但它和復(fù)選框CheckBox的區(qū)別是它選中后再點(diǎn)擊不能改變狀態(tài)割择,這有什么用處呢?其實(shí)RadioButton常常構(gòu)成一個集合以RadioGroup的形式為我們所用萎河,比如一道多選一的選擇題荔泳,每組RadioGroup里只能有一個RadioButton被選中,如果想改變此時被選中的RadioButton的狀態(tài)虐杯,只能通過選中其他RadioButton來實(shí)現(xiàn)玛歌。RadioGroup有個常用的屬性:android:orientation(表示包含的RadioButton的排列方式,horizontal表示水平排列擎椰,vertical表示垂直排列)沾鳄。
RadioGroup的監(jiān)聽器也是OnCheckedChangeListener,它們都和選中改變狀態(tài)有關(guān)确憨。關(guān)于OnCheckedChangeListener監(jiān)聽器也介紹了許多译荞,相信大家一定能理解下圖的代碼含義了!
關(guān)于簡單控件就介紹到這里休弃,后續(xù)還會介紹一些稍微高級的控件吞歼,謝謝大家的觀看~
>下一篇預(yù)告:布局篇