自定義對話方塊可以算是個簡單型的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
不然如果是簡單的選取,其實用這個就綽綽有餘了。



非常詳細!! 感謝LIN前輩的教學!!
回覆刪除請問 , 使用 Alertlog 視窗內的字
回覆刪除可以改變顏色嗎?