iT邦幫忙

DAY 8
5

Android 學習手札系列 第 8

Day 8 - Android - 吐司不夠吃啦~

  • 分享至 

  • xImage
  •  

報告長官!吐司放不了太久,傳遞者怕過期就在半道上吃完了!失神
大家會覺得吐司呈現速度太快,若是訊息太長時會看不完嗎?或是當我想要呈現更多訊息時得要怎麼辦!
今天就是要告訴大家"正宗"的訊息如何呈現了!
同樣地,今天我們再將昨日的專案再"增加"複製成一個新的專案,將專案名稱命名為"Day8_Dialog"。
今天要帶給各位一個比吐司更適合拿來傳遞資料的功能-"Dialog",有看過網頁有時會彈跳出一個訊息框,要我們點選"確定"或是"取消"的按鈕吧!嗯~沒錯,就是那樣的功能,在還沒有點選前,訊息都不會不見,以確保吐司可能被吃完的可能搖頭


上圖裡雖然只看得到一個按鈕,但 android 針對"Dialog"提供了三種按鈕-Positive、Negative以及Neutral,以文字上來看就是指:正、反以及中立,就我們所熟悉的文字來說,分別就是用:是、否以及取消來呈現之。而當然,我們能夠根據我們想要的動作來去定義三個按鈕被按下時,分別要執行的動作。

接下來,就開始定義之啦!接下來的程式碼請寫在"Moogle2"裡,從大約28行處的button插入開始:

//初始化物件
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
//設定標題
dialog.setTitle("接收到的訊號: " + String.valueOf(mSignal));
//設定圖示
dialog.setIcon(android.R.drawable.ic_dialog_alert);
//讓三/四天王鍵的返回功能鍵失效
dialog.setCancelable(false);

以上是起手式,再來要定義三種按鈕的動作,其實三個按鈕的寫法大同小異

dialog.setPositiveButton("收到!", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        // 按下PositiveButton要做的事
    }
});

這樣的動作的定義其實就算完成了,只是,這樣還只是定義!少了一個"呈現"他的指令。

dialog.show();

接下來是 Moogle1 在收到回應後的內容,一樣是放在 onStart() 區段裡,而這裡就直接取代掉原本的 Toast 程式(大約在 53 行)

//初始化物件
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
//設定標題
dialog.setTitle("回覆的內容");
//設定內容
dialog.setMessage(message);
//設定圖示
dialog.setIcon(android.R.drawable.ic_dialog_alert);
//讓三(四)天王鍵的返回功能失效
dialog.setCancelable(false);
dialog.setPositiveButton("接收", new DialogInterface.OnClickListener() {
	public void onClick(DialogInterface dialog, int which) {
		//用吐司(Toast)來傳出訊息
		Toast.makeText(Moogle1Activity.this, message, Toast.LENGTH_LONG).show();
	}

});
dialog.setNegativeButton("無視", new DialogInterface.OnClickListener() {
	public void onClick(DialogInterface dialog, int which) {

	}

});
dialog.show();

因為這次已有了訊息的內容,而不是只有訊號,所以多了這一行程式『dialog.setMessage(message);』


這是 Moogle1 的畫面

在程式碼的部份,有人發現toast的寫法,有略微的不同,不知道大家有沒有發現呢疑惑
以上程式一樣可以在 Mosil's GitHub 裡下載哦^_^

最後,再加上幾張畫面




大家能夠從這幾張圖片看出我大概做了什麼事嗎,可以嘗試改改看,完整的程式碼將於後天(10/4)放上GitHub

《傳遞訊息用的包裹 流程與紀錄貓》


上一篇
Day 7 - Android - 傳遞訊息用的包裹
下一篇
Day 9 - Android - 流程與紀錄貓
系列文
Android 學習手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
0
海綿寶寶
iT邦大神 1 級 ‧ 2012-10-03 09:31:46

越寫越覺得自己連java都忘光光了
Orz

像這堆 import
我根本就找不到 DialogInterface, AlertDialog 在那個 package
Orz

<pre class="c" name="code">
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;


看更多先前的回應...收起先前的回應...
mosil iT邦新手 4 級 ‧ 2012-10-03 12:20:11 檢舉

目的是要知道他是屬於哪個import,
還是要知道他是哪個,然後自己手key進去呢?

我先複製Day7的project做為Day8_Dialog

然後我複製

<pre class="c" name="code">
    //初始化物件  
    AlertDialog.Builder dialog = new AlertDialog.Builder(this);  
    //設定標題  
    dialog.setTitle("接收到的訊號: " + String.valueOf(mSignal));  
    //設定圖示  
    dialog.setIcon(android.R.drawable.ic_dialog_alert);  
    //讓三/四天王鍵的返回功能鍵失效  
    dialog.setCancelable(false);  

接著AlertDialog當然出現紅色符號(undefined)
我知道要import他
但我試了
android.content
android.os
android.view
android.widget
到最後才看您提供的source code
才知道
原來在
android.app package裡
Orz

mosil iT邦新手 4 級 ‧ 2012-10-03 13:36:13 檢舉

若是您用 Eclipse 的話,將滑鼠移到紅色抖抖線上的話,會出現錯誤訊息,以及他建議的解法
你只要選擇看起來像是"解"的選項即可,像這個錯誤應該會出現"import ..."之類的錯誤

類似小弟寫的這篇

可以善用 Eclipse 的功能哦

mosil這篇提到:
可以善用 Eclipse 的功能哦

這就對了
是我太急性子
沒去等他出現建議
衝刺

今天又學到了一招
謝謝

0
pajace2001
iT邦研究生 1 級 ‧ 2012-10-03 21:32:56

謝謝
哈哈哈哈
好有趣的範例~

mosil iT邦新手 4 級 ‧ 2012-10-03 23:59:10 檢舉

謝謝您的喜歡謝謝

我要留言

立即登入留言