文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Jollen 的 Android 教學,#16: Event Listener的用..

Jollen 的 Android 教學,#16: Event Listener的用..

时间:2010-10-19  来源:landuochong

Event Listener的用法: 以Click Listener為例

以Android所提供的View.OnClickListener來說明程式實作方法。一個較為良好的實作方法是在我們的Acitivty類別裡 實作View.OnClickListener介面,即:

import android.view.View;

public class HelloClickListener extends Activity implements View.OnClickListener {
...
}

每一個View都可以註冊一個event listener,當Android框架收到「click」事件後,便回呼event listener的callback method。以Button類別(按鈕元件)為例,當我們想要處理使用者觸控按鈕的事件時,就要呼叫Button類別的 setOnClickListener()方法來註冊click listener。上述的實作方方法是,直接在我們的Activity類別HelloClickListener裡實作 View.OnClickListener,因此上述Button類別的click listener為「this」。

上述的實作觀念,可用圖1來表示。


圖1: HelloClickListener類別實作View.OnClickListener介面

註冊click listener的程式碼如下:

   public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button button = (Button)findViewById(R.id.btn);
button.setOnClickListener(this);
}

在onCreate()裡先找到Button元件,它的click listener為this為,接著在我們的Activity類別裡實作onClick()。onClick()方法的程式碼如下,我們以Toast類別 來回應訊息給使用者:

   public void onClick(View v) {
Toast.makeText(
this,
"Yes.",
Toast.LENGTH_LONG).show();
}

完整程式碼: HelloClickListener.java

package com.moko.helloclicklistener;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import android.view.View;

public class HelloClickListener extends Activity implements View.OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button button = (Button)findViewById(R.id.btn);
button.setOnClickListener(this);
}

public void onClick(View v) {
Toast.makeText(
this,
"Yes.",
Toast.LENGTH_LONG).show();
}

}

執行結果


圖2: HelloClickListener的執行結果

當使用者觸碰畫面上的按鈕時,便以Toast類別在畫面上顯示「Yes」。

什麼是樣式(Styles)?

Android的樣式設計(style)是一個很重要的功能,因為它可以讓應用程式裡的元件(widget)「長」得跟別人很不一樣。樣式設計的使 用規定如下:

  • 在Android專案裡以XML資源檔來定義「樣式」
  • 一個Android專案可以定義多個樣式
  • 讓widget套用其中一個樣式

Android的styles功能,主要的對象是widget,樣式是為了套用到widget上;另外Android還提供佈景(theme)功 能,可以做更大範圍的套用。

如何定義樣式

定義樣式的方式如下:

1. 在Android專案的「res/values」資料夾裡建立styles.xml樣式定義檔。如圖1。


圖1: 建立styles.xml

2.在styles.xml裡定義樣式,以下是一個範例:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="myText">
<item name="android:textSize">18sp</item>
<item name="android:textColor">#880</item>
</style>
</resources>

styles.xml的寫法說明如下:

1. 在 <resource>標籤裡定義資源項目, <style>標籤用來定義樣式資源
2. <style>的name屬性定義此樣式的名字,widget使用此名字以套用樣式
3. <item>標籤定義此樣式的內容
4. <item>的name屬性為android:textSize時,表示定義此樣式的字體大小,在此設定字體大小為18sp
5. <item>的name屬性為android:textColor時,表示定義此樣式的字體顏色,在此設定字體顏色為#880(RGB)
6. 更多的樣式屬性,請參考Android Reference

定義好樣式後,就可以讓widget套用樣式。

Widget如何套用樣式

如何讓widget套用上述定義的「myText」樣式,方法很簡單。還記得UI layout檔main.xml嗎?只要在widget的項目裡,加上style屬性,並指定樣式名稱即可。以下是HelloStyles範例:

<?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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello, this is HelloStyles."
style="@style/myText"
/>
</LinearLayout>

「@style/myText」表示要指定一個style的名稱,此名稱為myText。

執行結果:图略

上一節提到佈景(theme)是可以大範圍套用的UI美化功能,其套用範圍為「整個 螢幕」,從程式碼的角度來看,佈景可以套用到以下二個範圍:

  • 整個應用程式(application)
  • 整個activity

接下來,我們以一個很簡單的例子,來說明如何套用佈景到application。在一些應用,我們可能不想要顯示視窗標題(title),怎麼做出 這個功能呢?利用佈景設定的方式即可達成。以下是實作方法。

在styles.xml裡加入以下內容:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="myTheme">
<item name="android:windowNoTitle">true
</style>
</resources>

修改AndroidManifest.xml,在標籤裡加上「theme」屬性:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.moko.hellotheme"
android:versionCode="1"
android:versionName="1.0.0">
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:theme="@style/myTheme">
<activity android:name=".HelloTheme"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

執行結果:


圖1: HelloTheme的執行結果

在這個範例裡,我們並沒有修改任何的程式碼,其原理是透過佈景設定的方法。定義佈景的方式與定義樣式(styles)相同,同樣是在 styles.xml裡以<item>標籤來定義。

以下是使用HelloTheme的說明:

1. <item>的name屬性為android:windowNoTitle時,表示定義是否要顯示視窗標題,在此設定為true,表示不要有 視窗標題
2. 在<application>標籤裡加上theme屬性,將佈景套用到應用程式

佈景除了能套用到應用程式外,也能套用到activity。如何套用佈景到activity呢?只要在<activity>裡加入 theme屬性即可,做法與<application>相同。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载