Android控件系列之Button以及Android監(jiān)聽器使用介紹
更新時間:2012年11月09日 10:12:44 作者:
Button是各種UI中最常用的控件之一,它同樣也是Android開發(fā)中最受歡迎的控件之一,用戶可以通過觸摸它來觸發(fā)一系列事件,要知道一個沒有點擊事件的Button是沒有任何意義的,因為使用者的固定思維是見到它就想去點
學習目的:
1、掌握在Android中如何建立Button
2、掌握Button的常用屬性
3、掌握Button按鈕的點擊事件(監(jiān)聽器)
Button是各種UI中最常用的控件之一,它同樣也是Android開發(fā)中最受歡迎的控件之一,用戶可以通過觸摸它來觸發(fā)一系列事件,要知道一個沒有點擊事件的Button是沒有任何意義的,因為使用者的固定思維是見到它就想去點!
先看下Android中普通Button的樣子:
1、為了設置Button上的值(如上圖的“確定”),我們把這個值先作為一個資源存放在Res\values\strings.xml中:
<string name="btnText">確定</string>
其中btnText可以視作這個值的鍵或ID,確定則是它的值,我們最后綁定的是它的鍵,Android系統(tǒng)會自動根據鍵找到它的值。
2、在layout目錄下的XML布局文件中,我們添加一個Button
<Button
android:layout_width="fill_parent"
android:layout_height ="wrap_content"
android:text="@string/btnText"
></Button>
其中l(wèi)ayout_width和layout_height屬性是必須的,但具體的賦值可以根據您的項目需要
一般可以是具體的大小,即:數(shù)字+單位,如android:layout_height ="30px"
或者設置枚舉的幾種值:
fill_parent 它將自動放大到與父控件一樣的大小,比如 android:layout_width="fill_parent"表示它的寬度將填滿父控件的橫向控件
wrap_content它將根據自己的值的占據控件來決定大小,一般使用這個值的控件會顯的較小,好處是不需要測量具體大小,它一定會正好把所有的值給顯示出來
而Text屬性,則顯示了按鈕的值,如果android:layout_width用了wrap_content屬性,這個值的長度將會隱式地決定按鈕的寬度。
這個例子中,我們用資源文件的btnText所對應的值作為Button的值,那么如果我們要把“確定”改成“取消”,只需要改變strings.xml中的值即可,不需要改動任何java代碼,對于那些需要將項目移植為其他語言版本的也是非常有用,比如要將軟件賣給老外,可以將“確定”改成“OK”,而不需要重新編譯。
3、為Button申明ID
繼續(xù)在XML中為Button添加ID屬性
android:id="@+id/btnOK"
+表示通過它來生成靜態(tài)資源,如果沒有+,表示使用的是指定位置的靜態(tài)資源,一般為控件賦ID時,都使用+這個方法
保存XML后,可以發(fā)現(xiàn)R.java中已經有一個內部類id,這個id類有一個靜態(tài)字段叫btnOK,它的具體值您根本不必關心,我們可以在代碼中獲得它。
4、在Activity中獲取到這個Button實例
如果您想把每個控件ID都背下來,那可能很難,更合適的做法是利用R.id來獲取指定的名稱,而這個名稱又唯一對應了控件ID
一般的,如果我們希望在某個Activity中使用按鈕,您第一個想到的方法應該是findViewById,通過R中的靜態(tài)ID,我們可以輕易獲得控件實例,至于如何尋找,這是Android的事:
Button btn = (Button)findViewById(R.id.btnOK);
如果系統(tǒng)不能識別,您需要導入Android的Button所在的類包:
import android.widget.Button;
您可以在Activity的生命周期內,隨時尋找到這個Button,但我強烈介意您,如果需要多次調用這個Button時,在onCreate中利用findViewById找到它后,把它記錄在Activity的一個全局變量中,然后以后不需要再去find這個Button,因為find本身也需要時間,即使您沒有察覺,但他的確需要花費時間。因為Android運行在手機或者平板電腦上,我建議您編碼時充分考慮代碼的簡潔、效率,從而節(jié)省資源和電量。
獲取到這個Button的實例后,我們可以利用代碼為他賦值,比如btn.setText("按鈕的值改變了");
5、為按鈕定制監(jiān)聽器:
A、什么是監(jiān)聽器?
您需要記住以下幾點:
1、監(jiān)聽器是個抽象類,它包含了一個事件觸發(fā)時系統(tǒng)會去調用的函數(shù)
2、在子類中,根據您項目的需要重寫這個函數(shù)
3、派生后的監(jiān)聽器需要綁定到按鈕上,就像一個耳機可以發(fā)出聲音,但您不去戴它,您是聽不到它發(fā)出的聲音的。一般的情況是這個按鈕可能需要這個監(jiān)聽器,而另外一個按鈕需要另外一個監(jiān)聽器,每個監(jiān)聽器各司其職,但功能相似時,也可以多個按鈕共同綁定一個監(jiān)聽器。
4、各種控件,都有常用的事件,如點擊按鈕,拖動一個滾動條,切換一個ListView的選項等等,他的綁定監(jiān)聽器的函數(shù)命名規(guī)則是setOn****Listener
B、為什么要這么設計?
1、當用戶(也可能系統(tǒng))觸發(fā)某個控件的某個事件后,往往要處理一些細節(jié),但他們不具有通用性,例如您可能點擊按鈕后改變它的值,也可能希望點擊按鈕后彈出一個網頁,或者點擊按鈕后關閉當前Activity。正由于結果可能太多樣,設計者索性將實現(xiàn)完全留給Android開放者去實現(xiàn)
2、監(jiān)聽器其實是一種回調:
它不需要您去執(zhí)行On****Listener,而是系統(tǒng)觸發(fā)后自動會去調用它,流程如下圖:

C、監(jiān)聽器如何定制?
您可以使用自定義內部類繼承監(jiān)聽器抽象類,并實現(xiàn)抽象方法。您也可以使用Java提供的抽象類的匿名實現(xiàn):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.btnOK);
//綁定匿名的監(jiān)聽器,并執(zhí)行您所要在點擊按鈕后執(zhí)行的邏輯代碼
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(MyActivity.this, "點擊了按鈕", Toast.LENGTH_LONG).show();
}
});
}
總結:
本文介紹了如何使用Android中Button的方法,并著重介紹了事件監(jiān)聽器的設計目的、運行流程和使用方法。
1、掌握在Android中如何建立Button
2、掌握Button的常用屬性
3、掌握Button按鈕的點擊事件(監(jiān)聽器)
Button是各種UI中最常用的控件之一,它同樣也是Android開發(fā)中最受歡迎的控件之一,用戶可以通過觸摸它來觸發(fā)一系列事件,要知道一個沒有點擊事件的Button是沒有任何意義的,因為使用者的固定思維是見到它就想去點!
先看下Android中普通Button的樣子:
以及點中Button后的樣子:
1、為了設置Button上的值(如上圖的“確定”),我們把這個值先作為一個資源存放在Res\values\strings.xml中:
<string name="btnText">確定</string>
其中btnText可以視作這個值的鍵或ID,確定則是它的值,我們最后綁定的是它的鍵,Android系統(tǒng)會自動根據鍵找到它的值。
2、在layout目錄下的XML布局文件中,我們添加一個Button
復制代碼 代碼如下:
<Button
android:layout_width="fill_parent"
android:layout_height ="wrap_content"
android:text="@string/btnText"
></Button>
其中l(wèi)ayout_width和layout_height屬性是必須的,但具體的賦值可以根據您的項目需要
一般可以是具體的大小,即:數(shù)字+單位,如android:layout_height ="30px"
或者設置枚舉的幾種值:
fill_parent 它將自動放大到與父控件一樣的大小,比如 android:layout_width="fill_parent"表示它的寬度將填滿父控件的橫向控件
wrap_content它將根據自己的值的占據控件來決定大小,一般使用這個值的控件會顯的較小,好處是不需要測量具體大小,它一定會正好把所有的值給顯示出來
而Text屬性,則顯示了按鈕的值,如果android:layout_width用了wrap_content屬性,這個值的長度將會隱式地決定按鈕的寬度。
這個例子中,我們用資源文件的btnText所對應的值作為Button的值,那么如果我們要把“確定”改成“取消”,只需要改變strings.xml中的值即可,不需要改動任何java代碼,對于那些需要將項目移植為其他語言版本的也是非常有用,比如要將軟件賣給老外,可以將“確定”改成“OK”,而不需要重新編譯。
3、為Button申明ID
繼續(xù)在XML中為Button添加ID屬性
android:id="@+id/btnOK"
+表示通過它來生成靜態(tài)資源,如果沒有+,表示使用的是指定位置的靜態(tài)資源,一般為控件賦ID時,都使用+這個方法
保存XML后,可以發(fā)現(xiàn)R.java中已經有一個內部類id,這個id類有一個靜態(tài)字段叫btnOK,它的具體值您根本不必關心,我們可以在代碼中獲得它。
4、在Activity中獲取到這個Button實例
如果您想把每個控件ID都背下來,那可能很難,更合適的做法是利用R.id來獲取指定的名稱,而這個名稱又唯一對應了控件ID
一般的,如果我們希望在某個Activity中使用按鈕,您第一個想到的方法應該是findViewById,通過R中的靜態(tài)ID,我們可以輕易獲得控件實例,至于如何尋找,這是Android的事:
Button btn = (Button)findViewById(R.id.btnOK);
如果系統(tǒng)不能識別,您需要導入Android的Button所在的類包:
復制代碼 代碼如下:
import android.widget.Button;
您可以在Activity的生命周期內,隨時尋找到這個Button,但我強烈介意您,如果需要多次調用這個Button時,在onCreate中利用findViewById找到它后,把它記錄在Activity的一個全局變量中,然后以后不需要再去find這個Button,因為find本身也需要時間,即使您沒有察覺,但他的確需要花費時間。因為Android運行在手機或者平板電腦上,我建議您編碼時充分考慮代碼的簡潔、效率,從而節(jié)省資源和電量。
獲取到這個Button的實例后,我們可以利用代碼為他賦值,比如btn.setText("按鈕的值改變了");
5、為按鈕定制監(jiān)聽器:
A、什么是監(jiān)聽器?
您需要記住以下幾點:
1、監(jiān)聽器是個抽象類,它包含了一個事件觸發(fā)時系統(tǒng)會去調用的函數(shù)
2、在子類中,根據您項目的需要重寫這個函數(shù)
3、派生后的監(jiān)聽器需要綁定到按鈕上,就像一個耳機可以發(fā)出聲音,但您不去戴它,您是聽不到它發(fā)出的聲音的。一般的情況是這個按鈕可能需要這個監(jiān)聽器,而另外一個按鈕需要另外一個監(jiān)聽器,每個監(jiān)聽器各司其職,但功能相似時,也可以多個按鈕共同綁定一個監(jiān)聽器。
4、各種控件,都有常用的事件,如點擊按鈕,拖動一個滾動條,切換一個ListView的選項等等,他的綁定監(jiān)聽器的函數(shù)命名規(guī)則是setOn****Listener
B、為什么要這么設計?
1、當用戶(也可能系統(tǒng))觸發(fā)某個控件的某個事件后,往往要處理一些細節(jié),但他們不具有通用性,例如您可能點擊按鈕后改變它的值,也可能希望點擊按鈕后彈出一個網頁,或者點擊按鈕后關閉當前Activity。正由于結果可能太多樣,設計者索性將實現(xiàn)完全留給Android開放者去實現(xiàn)
2、監(jiān)聽器其實是一種回調:
它不需要您去執(zhí)行On****Listener,而是系統(tǒng)觸發(fā)后自動會去調用它,流程如下圖:

C、監(jiān)聽器如何定制?
您可以使用自定義內部類繼承監(jiān)聽器抽象類,并實現(xiàn)抽象方法。您也可以使用Java提供的抽象類的匿名實現(xiàn):
復制代碼 代碼如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.btnOK);
//綁定匿名的監(jiān)聽器,并執(zhí)行您所要在點擊按鈕后執(zhí)行的邏輯代碼
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(MyActivity.this, "點擊了按鈕", Toast.LENGTH_LONG).show();
}
});
}
總結:
本文介紹了如何使用Android中Button的方法,并著重介紹了事件監(jiān)聽器的設計目的、運行流程和使用方法。
您可能感興趣的文章:
相關文章
Android開發(fā)之模仿微信打開網頁的進度條效果(高仿)
這篇文章主要介紹了Android開發(fā)之模仿微信打開網頁的進度條效果(高仿)的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07android 仿微信demo——微信主界面實現(xiàn)
本系列文章主要介紹了微信小程序-閱讀小程序實例(demo),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望能給你們提供幫助2021-06-06正確在Flutter中添加webview實現(xiàn)詳解
這篇文章主要為大家介紹了正確在Flutter中添加webview實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12Android openGl 繪制簡單圖形的實現(xiàn)示例
這篇文章主要介紹了Android openGl 繪制簡單圖形的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03通過Jetpack Compose實現(xiàn)雙擊點贊動畫效果
這篇文章主要介紹了如何利用Jetpack Compose實現(xiàn)雙擊點贊動畫效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2022-01-01