Android控制項系列之Button以及Android監聽器使用介紹

來源:互聯網
上載者:User

學習目的:

1、掌握在Android中如何建立Button
2、掌握Button的常用屬性
3、掌握Button按鈕的點擊事件(監聽器)

Button是各種UI中最常用的控制項之一,它同樣也是Android開發中最受歡迎的控制項之一,使用者可以通過觸摸它來觸發一系列事件,要知道一個沒有點擊事件的Button是沒有任何意義的,因為使用者的固定思維是見到它就想去點!

先看下Android中普通Button的樣子:

以及點中Button後的樣子:

我在Android控制項系列之XML靜態資源中已經強調了布局和代碼分離的重要性,因此本例中的Button我將用這種方式去實現:

1、為了設定Button上的值(如的“確定”),我們把這個值先作為一個資源存放在Res\values\strings.xml中:

<string name="btnText">確定</string>

其中btnText可以視作這個值的鍵或ID,確定則是它的值,我們最後綁定的是它的鍵,Android系統會自動根據鍵找到它的值。

2、在layout目錄下的XML布局檔案中,我們添加一個Button

複製代碼 代碼如下:<Button
android:layout_width="fill_parent"
android:layout_height ="wrap_content"
android:text="@string/btnText"
></Button>

其中layout_width和layout_height屬性是必須的,但具體的賦值可以根據您的項目需要

一般可以是具體的大小,即:數字+單位,如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

繼續在XML中為Button添加ID屬性

android:id="@+id/btnOK"

+表示通過它來產生靜態資源,如果沒有+,表示使用的是指定位置的靜態資源,一般為控制項賦ID時,都使用+這個方法

儲存XML後,可以發現R.java中已經有一個內部類id,這個id類有一個靜態欄位叫btnOK,它的具體值您根本不必關心,我們可以在代碼中獲得它。

4、在Activity中擷取到這個Button執行個體

如果您想把每個控制項ID都背下來,那可能很難,更合適的做法是利用R.id來擷取指定的名稱,而這個名稱又唯一對應了控制項ID

一般的,如果我們希望在某個Activity中使用按鈕,您第一個想到的方法應該是findViewById,通過R中的靜態ID,我們可以輕易獲得控制項執行個體,至於如何尋找,這是Android的事:

Button btn = (Button)findViewById(R.id.btnOK);

如果系統不能識別,您需要匯入Android的Button所在的類包:

複製代碼 代碼如下:import android.widget.Button;

您可以在Activity的生命週期內,隨時尋找到這個Button,但我強烈介意您,如果需要多次調用這個Button時,在onCreate中利用findViewById找到它後,把它記錄在Activity的一個全域變數中,然後以後不需要再去find這個Button,因為find本身也需要時間,即使您沒有察覺,但他的確需要花費時間。因為Android運行在手機或者平板電腦上,我建議您編碼時充分考慮代碼的簡潔、效率,從而節省資源和電量。

擷取到這個Button的執行個體後,我們可以利用代碼為他賦值,比如btn.setText("按鈕的值改變了");

5、為按鈕定製監聽器:

A、什麼是監聽器?

您需要記住以下幾點:

  1、監聽器是個抽象類別,它包含了一個事件觸發時系統會去調用的函數

  2、在子類中,根據您項目的需要重寫這個函數

  3、派生後的監聽器需要綁定到按鈕上,就像一個耳機可以發出聲音,但您不去戴它,您是聽不到它發出的聲音的。一般的情況是這個按鈕可能需要這個監聽器,而另外一個按鈕需要另外一個監聽器,每個監聽器各司其職,但功能相似時,也可以多個按鈕共同綁定一個監聽器。

  4、各種控制項,都有常用的事件,如點擊按鈕,拖動一個捲軸,切換一個ListView的選項等等,他的綁定監聽器的函數命名規則是setOn****Listener

B、為什麼要這麼設計?

  1、當使用者(也可能系統)觸發某個控制項的某個事件後,往往要處理一些細節,但他們不具有通用性,例如您可能點擊按鈕後改變它的值,也可能希望點擊按鈕後彈出一個網頁,或者點擊按鈕後關閉當前Activity。正由於結果可能太多樣,設計者索性將實現完全留給Android開放者去實現

  2、監聽器其實是一種回調:

它不需要您去執行On****Listener,而是系統觸發後自動會去調用它,流程如: 

C、監聽器如何定製?

您可以使用自訂內部類繼承監聽器抽象類別,並實現抽象方法。您也可以使用Java提供的抽象類別的匿名實現: 複製代碼 代碼如下:@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.btnOK);
//綁定匿名的監聽器,並執行您所要在點擊按鈕後執行的邏輯代碼
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的方法,並著重介紹了事件監聽器的設計目的、運行流程和使用方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.