報告長官!吐司放不了太久,傳遞者怕過期就在半道上吃完了!
大家會覺得吐司呈現速度太快,若是訊息太長時會看不完嗎?或是當我想要呈現更多訊息時得要怎麼辦!
今天就是要告訴大家"正宗"的訊息如何呈現了!
同樣地,今天我們再將昨日的專案再"增加"複製成一個新的專案,將專案名稱命名為"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
越寫越覺得自己連java都忘光光了
像這堆 import
我根本就找不到 DialogInterface, AlertDialog 在那個 package
<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;
目的是要知道他是屬於哪個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裡
若是您用 Eclipse 的話,將滑鼠移到紅色抖抖線上的話,會出現錯誤訊息,以及他建議的解法
你只要選擇看起來像是"解"的選項即可,像這個錯誤應該會出現"import ..."之類的錯誤
類似小弟寫的這篇
可以善用 Eclipse 的功能哦
mosil這篇提到:
可以善用 Eclipse 的功能哦
這就對了
是我太急性子
沒去等他出現建議
今天又學到了一招