Android系統(tǒng)控件Button是一種按鈕控件,用戶能夠在該控件上點擊,并后引發(fā)相應(yīng)的事件處理方法;ImageButton用以實現(xiàn)能夠顯示圖像功能的控件按鈕。下面通過一個例子來加深對這兩個控件的理解。
1.建立一個“ButtonDemo”的程序
程序包含Button和ImageButton兩個按鈕,上方是“Button按鈕”,下方是一個ImageButton控件,如圖-1所示。

代碼清單1 main.xml
ButtonDemo在XML文件中的代碼如代碼清單1所示。
ButtonDemo在XML文件中的代碼如代碼清單1所示。
<Button android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button01" >
</Button>
<ImageButton android:id="@+id/ImageButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageButton>
在上述代碼中,定義Button控件的高度、寬度和內(nèi)容及ImageButton控件的高度和寬度,但是沒定義顯示的圖像,在后面的代碼中進(jìn)行定義。
2.引入資源
將download.png文件復(fù)制到/res/drawable文件夾下,在/res目錄上選擇Refresh,就可以看到新添加的文件顯示在/res/drawable文件夾下,同時R.java文件內(nèi)容也得到了更新,否則提示無法找到資源的錯誤。
3.更改Button和ImageButton內(nèi)容
在ButtonDemo.java中引入android.widget.Button和android.widget.ImageButton,并修改其代碼如代碼清單2所示。
代碼清單2 ButtonDemo.java
Button button = (Button)findViewById(R.id.Button01);
ImageButton imageButton = (ImageButton)findViewById(R.id.ImageButton01);
button.setText("Button按鈕");
imageButton.setImageResource(R.drawable.download);
上述代碼中,第1行代碼用于引用在XML文件中定義的Button控件。
第2行代碼用于引用在XML文件中定義的ImageButton控件。
第3行代碼將Button的顯示內(nèi)容更改為“Button按鈕”。
第4行代碼利用setImageResource()方法,將新加入的png文件R.drawable.download傳遞給ImageButton。
4.按鈕響應(yīng)點擊事件:添加點擊事件的監(jiān)聽器
在ButtonDemo.java中添加代碼清單3所示的代碼。
代碼清單3 ButtonDemo.java
final TextView textView = (TextView)findViewById(R.id.TextView01);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
textView.setText("Button按鈕");
}
});
imageButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
textView.setText("ImageButton按鈕");
}
});
在本段代碼中,第2行代碼中button對象通過調(diào)用setOnClickListener()方法,注冊一個點擊(Click)事件的監(jiān)聽器View.OnClickListener()。
第3行代碼是點擊事件的回調(diào)方法。
第4行代碼將TextView的顯示內(nèi)容更改為“Button按鈕”。
這里我們來了解一下View.OnClickListener()。
View.OnClickListener()是View定義的點擊事件的監(jiān)聽器接口,并在接口中僅定義了onClick()方法。當(dāng)Button從Android界面框架中接收到事件后,首先檢查這個事件是否是點擊事件,如果是點擊事件,同時Button又注冊了監(jiān)聽器,則會調(diào)用該監(jiān)聽器中的onClick()方法。每個View僅可以注冊一個點擊事件的監(jiān)聽器,如果使用setOnClickListener()方法注冊第二個點擊事件的監(jiān)聽器,之前注冊的監(jiān)聽器將被自動注銷。
多個按鈕注冊到同一個點擊事件的監(jiān)聽器上,代碼如代碼清單4所示。
代碼清單4 多個按鈕注冊到一個點擊事件的監(jiān)聽器上
Button.OnClickListener buttonListener = new Button.OnClickListener(){
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.Button01:
textView.setText("Button按鈕");
return;
case R.id.ImageButton01:
textView.setText("ImageButton按鈕");
return;
}
}};
Button.setOnClickListener(buttonListener);
ImageButton.setOnClickListener(buttonListener);
該段代碼中,第1行至第12行代碼定義了一個名為buttonListener的點擊事件監(jiān)聽器;第13行代碼將該監(jiān)聽器注冊到Button上;第14行代碼將該監(jiān)聽器注冊到ImageButton上。