Hello World 進階了 -- 對話視窗
This document is provided as is. You are welcomed to use it for
non-commercial purpose.
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
請勿轉貼
到目前為止,我們已經知道要如何在螢幕上排版並放入 GUI 元件,並且說明了事件處理的方式;也就是說,進階版的 Hello World 已經快要完成了。要完成如下圖所示的結果,只差一小步:那就是把訊息放到對話視窗中。
常用的 Android 對話視窗有兩種,一種是 android.widget.Toast,另一種是 android.app.AlertDialog.Builder,我們先介紹 Toast 的作法
- Toast 的用法: 首先先看一下一個範例:
Toast.makeText(HelloName.this, "Hello " + input.getText(), Toast.LENGTH_LONG).show();
Toast.makeText().show() 會將 makeText() 所定義的內容以 Toast 的方式顯示出來;而 makeText() 內有三個參數:
- 第一個參數說明該對話視窗出現的畫面;由於對話視窗是出現在"這個"畫面上,也就是 HelloName 的這個物件上,所以第一個參數寫成 HelloName.this。請特別注意,由於 Toast.makeText().show() 敘述寫在內隱類別內,所以 this 前面的 HelloName 不能省略!
- 第二個參數定義該對話視窗的文字內容;這個部分就簡單了,依照之前的說明,第二個參數就寫成 "Hello " + input.getText()。
- 第三個參數定義該對話視窗出現在畫面上的時間;Toast 類別總共定義了兩種,一種是 LENGTH_LONG(出現時間約 4-5 秒),另一種是 LENGTH_SHORT(出現時間約 1-2 秒);至於其所代表的值,請參考 API 文件。
- AlertDialog 的用法: AlertDialog 是一個蠻特別的類別,它不能像其它的類別可以直接利用 new 來產生一個 AlertDialog 的物件,而必須借用 AlertDialog.Builder() 來產生物件。產生 AlertDialog 物件的範例程式如下:
01 AlertDialog.Builder ad = new AlertDialog.Builder(HelloName.this); 02 ad.setTitle("可有可無"); 03 ad.setMessage("Hello " + input.getText()); 04 ad.setNeutralButton("OK", 05 new DialogInterface.OnClickListener() { 06 public void onClick(DialogInterface dialog, int which) { 07 //不做任何事情 直接關閉對話方塊 08 } 09 }); 10 ad.show(); 11 input.setText("");
- 第01-09 行也可以縮寫成如下的一行敘述,從程式碼可以看出這樣的設計方式連 AlertDialog 物件變成匿名的(之前還需要宣告一個名為 sb 的變數)。究竟程式設計人員應該使用哪種方式就見仁見智了;其實概念通了,這些都不是哪麼重要。
new AlertDialog.Builder(HelloName.this).setTitle("可有可無").setMessage("Hello " + input.getText()).setNeutralButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //不做任何事情 直接關閉對話方塊 } }).show();
- 為了確認剛剛的說明,完整的程式碼如下所示:(請自行練習完成)
public class HelloName extends Activity { /** 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.button1); button.setOnClickListener(new HelloButton()); } private class HelloButton implements OnClickListener { public void onClick(View view) { EditText input = (EditText) findViewById(R.id.editText1); AlertDialog.Builder ad = new AlertDialog.Builder(HelloName.this); ad.setTitle("可有可無"); ad.setMessage("Hello " + input.getText()); ad.setNeutralButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //不做任何事情 直接關閉對話方塊 } }); ad.show(); input.setText(); } } }
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
沒有留言:
張貼留言