• 沒有找到結果。

4.3 #3:如何呈現按鈕(Button)之 2

4. 由於可能有多個按鈕,其事件都會傳遞到 ex02 類別,都由 onClick()函數負責 處理,所以在onClick()函數裡的 switch 指令藉由按鈕 id 值來判斷到底是哪一 個按鈕送來的事件。如果是由id 值為 id/button 的按鈕(即 OK)所送來的話,就 在畫面標題(Title)區顯示出字串:”this is OK button”。 反之,如果是由 id 值 為id/button2 的按鈕(即 Exit)所送來的話,就呼叫父類別的 finish()函數而結束 目前的畫面(即目前的 Activity)。

4.3 #3:如何呈現按鈕(Button)之 2

在上一個範例裡,使用了指令:btn.setOnClickListener(this)來指明要將按鈕 的 事 件 傳 遞 給 目 前 物 件 的 onClick() 函 數 去 處 理 之 。 本 範 例 則 使 用 指 令 : btn.setOnClickListener(listener)將按鈕的事件傳遞給 listener 物件的 onClick()函數 處理之。

4.3.1 操作情境:

1. 首先,此程式的畫面出現按鈕如下:

2. 如果按下<OK>按鈕,畫面標題(Title)區顯示出字串:”this is OK button”。

3. 如果選取<Exit>,程式就結束了。

4.3.2 撰寫步驟:

第 4 章 Android 應用程式設計的基礎手藝:12 技 93

public class ex03 extends Activity { @Override

public void onCreate(Bundle icicle) { super.onCreate(icicle);

setContentView(R.layout.main);

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

Button btn2 = (Button)findViewById(R.id.button2);

btn.setOnClickListener(listener);

btn2.setOnClickListener(listener2);

}

OnClickListener listener = new OnClickListener() {

public void onClick(View v) { setTitle("this is OK button"); } };

OnClickListener listener2 = new OnClickListener() { public void onClick(View v) { finish(); } };

}

Step-3: 修改/res/layout/main.xml 的內容,更改為:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView android:id="@+id/tv"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""

/>

94 Android應用框架原理與程式設計36 技

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

<Button android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="OK"

/>

<Button android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Exit"

/>

</LinearLayout>

並儲存之。

Step-4: 執行之。

4.3.3 說明:

1. 指令:btn.setOnClickListener(listener);

這指明將 btn 按鈕的事件傳遞給 listener 物件的 onClick()函數處理之。

2. 回想,在先前的「第 2 技」裡,使用了指令:btn.setOnClickListener(this);

這指明要將btn 按鈕的事件傳遞給目前物件的 onClick()函數處理。

3. 以上的兩種指令寫法的效果是一樣的,由你自己決定如何彈性運用。

4.3.4 補充說明:

剛才的範例,其畫面上有兩個按鈕(Button),但是很樸素單調,沒有圖案或 色彩。如果你想替按鈕加上一些花樣,有兩個主要的途徑:

1) 使用 Button 類別的 setBackgroundResource()函數,可以替按鈕加上背景 圖案。

2) 改用 ImageButton 類別,可以替按鈕加上前景圖像。

例如,將改上一範例的 Button 改為 ImageButton,會出現比較漂亮的按鈕了。如 下述的畫面:

第 4 章 Android 應用程式設計的基礎手藝:12 技 95

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

為了實現這美觀的按鈕,可將上一範例的程式碼改寫為:

// ---- ex03_a.java 程式碼 --- package com.misoo.ex03;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageButton;

public class ex03 extends Activity { @Override

public void onCreate(Bundle icicle) { super.onCreate(icicle);

setContentView(R.layout.main);

ImageButton btn = (ImageButton)findViewById(R.id.button);

ImageButton btn2 = (ImageButton)findViewById(R.id.button2);

btn.setOnClickListener(listener);

btn2.setOnClickListener(listener2);

}

OnClickListener listener = new OnClickListener() { public void onClick(View v) {

setTitle("this is OK button");

} };

OnClickListener listener2 = new OnClickListener() { public void onClick(View v)

{ finish(); } };

}

96 Android應用框架原理與程式設計36 技

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

這 段 程 式 碼 使 用 到 /res/drawable/ 裡 的 兩 個 圖 像 : ok.jpg 和 exit.jpg 。 而 ImageButton 按鈕與圖像之關係則描述於/res/layout/main.xml 檔案裡,如下圖:

本書主旨在於介紹 Android 程式的基本組件和架構,為了讓範例更為簡單易

懂,本書並未使用許多種點綴和雕飾。但是隨著你的經驗成長了,想要畫龍點

睛,自然會去嘗試將Android 程式畫面雕飾得漂亮又大方。

第 4 章 Android 應用程式設計的基礎手藝:12 技 97

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯