Button和ImageButton

Paste_Image.png

Paste_Image.png
Button下的文字,數(shù)字,字符串一般不直接在xml文件中寫,建議到values下的string中建立對(duì)應(yīng)字符串,例如在values->string下新建

Paste_Image.png
然后去xml的Button中

Paste_Image.png
- ImageButton是用于在按鈕上顯示圖片的。所以是沒有android:text這個(gè)屬性的。并且如果在布局文件中寫上android:text="我是一個(gè)按鈕",在android 4.4環(huán)境中是不會(huì)看到任何效果的
onClick事件

Paste_Image.png

Paste_Image.png
匿名內(nèi)部類的實(shí)現(xiàn)
(View 是所有控件的父類)
- 初始化當(dāng)前所需控件,例如private Button loginButton;
- findViewById--返回的是一個(gè)View,故需要強(qiáng)制轉(zhuǎn)換成所需控件類型,例如loginButton= (Button)findViewById(R.id.button1);
- findViewById是如何查找對(duì)應(yīng)view的id的?gen目錄下中自動(dòng)生成的R文件中有一個(gè)類id,id類中自動(dòng)為每個(gè)控件創(chuàng)建了一個(gè)id
- 設(shè)置Button的監(jiān)聽器,通過(guò)監(jiān)聽器實(shí)現(xiàn)我們點(diǎn)擊Button要操作的事情(通過(guò)匿名內(nèi)部類方式實(shí)現(xiàn))
loginButton.setOnClickListener...

Paste_Image.png
(直接在里面new一個(gè)匿名內(nèi)部類)
獨(dú)立類的實(shí)現(xiàn)
- 在onCreate()方法外實(shí)現(xiàn)一個(gè)外部類,繼承自(implements--因?yàn)镺nClickListener是一個(gè)接口不是一個(gè)類,所以不用extends)OnClickListener,然后再在這個(gè)類里面寫邏輯,該類為其他按鈕的父類,比如你將在一個(gè)Activity中實(shí)現(xiàn)10個(gè)按鈕,而這10個(gè)按鈕需要實(shí)現(xiàn)同一個(gè)功能,就可以在父類中寫這個(gè)公用邏輯,然后再內(nèi)部類中寫各個(gè)按鈕的其他不同邏輯, 這樣避免了代碼的冗余

Paste_Image.png
- v代表當(dāng)前點(diǎn)擊按鈕的對(duì)象,哪個(gè)按鈕被點(diǎn)擊了它會(huì)把這個(gè)按鈕的對(duì)象傳給v。
外部類的這種用法,按鈕不僅會(huì)執(zhí)行子類中的onClick()方法,還會(huì)觸發(fā)父類中的onClick()方法

Paste_Image.png
- 注意到里面還用到一個(gè)v.setAlpha(0.5f),該方法設(shè)置透明度,點(diǎn)擊按鈕后按鈕透明

Paste_Image.png
接口方式實(shí)現(xiàn)監(jiān)聽事件
1.在當(dāng)前Activity類上通過(guò)implement onClickListener實(shí)現(xiàn)該接口
Paste_Image.png
此時(shí)會(huì)對(duì)應(yīng)生成一個(gè)onClick方法

Paste_Image.png
2.將監(jiān)聽器綁定到Button上
實(shí)例:private ImageButton imgBt;
初始化:imgBt= (ImageButton)findViewById(R.id.imageButton1);
3.給該Button設(shè)置監(jiān)聽器
imgBt.setOnClickListener(this);
this訪問當(dāng)前類的接口的一個(gè)對(duì)象,當(dāng)做這件事后imgBt.setOnClickListener(this);onClick事件就綁定到Button上去了,此時(shí)點(diǎn)擊Button就會(huì)觸發(fā)當(dāng)前實(shí)現(xiàn)的onClick方法