2012-07-23

Android對話方塊(AlertDialog)應用(二) - 自定義對話方塊

上篇基本介紹之後,此篇來為您介紹更為實用的自定義型式對話方塊

自定義對話方塊可以算是個簡單型的Activity,可以讓我們做一此簡單的選取

不用再另外加開一個Activity,再用Intent把資料傳來傳去的很麻煩

下面就用一個實例:點餐系統,實作自定義對話方塊


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:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:text="@string/welcome" android:gravity="center_horizontal"/>
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/btn" android:id="@+id/btn"></Button>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView1" android:text="@string/str2"></TextView>
</LinearLayout>


strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="welcome">歡迎光臨蟹堡王</string>
    <string name="app_name">點餐系統</string>
    <string name="btn">進入點餐系統</string>
    <string name="str2">您點的餐點有:</string>
</resources>

OrderingsystemActivity.java
package com.orderingsystem;


import android.app.AlertDialog; 
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class OrderingsystemActivity extends Activity {
	 //複選框項目  
	public String[] choices={"美味蟹堡","義式香腸堡","蔬菜水果堡","香蕉潛艇堡","香烤雞肉堡"};
	 //Check判斷,注意數量比較和複選框內數量相同
	public boolean[] chsBool = {false,false,false,false,false};
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new Button.OnClickListener(){
			@Override
			public void onClick(View v) {
				   
                 //包含多個選項及複選框的對話框  
				AlertDialog  dialog = new AlertDialog.Builder(OrderingsystemActivity.this)
				.setIcon(android.R.drawable.btn_star_big_on)
				.setTitle("您點的餐點有:")  
				.setMultiChoiceItems(choices, chsBool, multiClick)
                .setPositiveButton("確認", onclick)
                .setNegativeButton("離開",  onclick).create(); 
				dialog.show();  
			}
        	
        });
    }
    
 // 對話複選框事件監聽器 
    
    OnMultiChoiceClickListener multiClick = new OnMultiChoiceClickListener(){  
        @Override  
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {  
            //記錄選取的項目
        	chsBool[which]=isChecked;  
        }  
          
    };  
    
    // 對話框按鈕點擊事件監聽器 
      
   OnClickListener onclick = new OnClickListener() {  
	   
 	@Override
 	public void onClick(DialogInterface dialog, int which) {  
         switch (which) {  
             case Dialog.BUTTON_NEGATIVE:  
                 Toast.makeText(OrderingsystemActivity.this, "暫時不點了!",  
                         Toast.LENGTH_LONG).show();  
                 break;  
             case Dialog.BUTTON_POSITIVE:  
                 //點選確認時寫到"你點的餐點有:"後面
            	 TextView Ans = (TextView)findViewById(R.id.textView1);
            	 String selectedStr = ""; 
            	 for(int i=0; i<chsBool.length; i++) { 
            		 if (chsBool[i]==true)
            		 {
            			//加入"\n"自動換行
            			 selectedStr = selectedStr + "\n" +  choices[i];
            		 }
            	 }
            	 Ans.setText("您點的餐點有:" + selectedStr);
                 break;  
         }  
 	}
   };  
}

執行畫面




後記:

像這種選取的動作使用自定義對話方塊就能簡單的完成

不用再麻煩的使用Activity,畫面比較複雜時才需另開一個Activity


不然如果是簡單的選取,其實用這個就綽綽有餘了。

2 則留言:

  1. 非常詳細!! 感謝LIN前輩的教學!!

    回覆刪除
  2. 請問 , 使用 Alertlog 視窗內的字
    可以改變顏色嗎?

    回覆刪除

您的寶貴建議是我前進的動力!