編輯Android程式遊戲對話方塊

baiyecheng發表於2015-03-23

Android軟體開發之盤點所有Dialog對話方塊大合集(一) medium avatar hello.liu

對話方塊大合集

今天我用自己寫的一個Demo 和大家詳細介紹一個Android中的對話方塊的使用技巧。

1.確定取消對話方塊

對話方塊中有2個按鈕 通過呼叫 setPositiveButton 方法 和 setNegativeButton 方法 可以設定按鈕的顯示內容以及按鈕的監聽事件。

我們使用AlerDialog 建立對話方塊 AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);
複製程式碼 使用builder設定對話方塊的title button icon 等等 builder.setIcon(R.drawable.icon); builder.setTitle("你確定要離開嗎?"); builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //這裡新增點選確定後的邏輯 showDialog("你選擇了確定"); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //這裡新增點選確定後的邏輯 showDialog("你選擇了取消"); } }); builder.create().show(); 複製程式碼 這個dialog用於現實onClick後監聽的內容資訊 private void showDialog(String str) { new AlertDialog.Builder(MainDialog.this) .setMessage(str) .show(); } 複製程式碼 2.多個按鈕資訊框

        AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);                    
        builder.setIcon(R.drawable.icon);
        builder.setTitle("投票");
        builder.setMessage("您認為什麼樣的內容能吸引您?");
        builder.setPositiveButton("有趣味的", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                showDialog("你選擇了有趣味的");
            }
        });
        builder.setNeutralButton("有思想的", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                showDialog("你選擇了有思想的");                    
            }
        });
        builder.setNegativeButton("主題強的", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                showDialog("你選擇了主題強的");  
            }
        });
        builder.create().show();

複製程式碼 3.列表框

這個陣列用於列表選擇 final String[] mItems = {"item0","item1","itme2","item3","itme4","item5","item6"}; 複製程式碼 AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);
builder.setTitle("列表選擇框"); builder.setItems(mItems, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //點選後彈出視窗選擇了第幾項 showDialog("你選擇的id為" + which + " , " + mItems[which]); } }); builder.create().show(); 複製程式碼 4.單項選擇列表框

mSingleChoice 用於記錄單選中的ID int mSingleChoiceID = -1; 複製程式碼 AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);

     mSingleChoiceID = -1;
     builder.setIcon(R.drawable.icon);
         builder.setTitle("單項選擇");
         builder.setSingleChoiceItems(mItems, 0, new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int whichButton) {
                     mSingleChoiceID = whichButton;
                     showDialog("你選擇的id為" + whichButton + " , " + mItems[whichButton]);
             }
         });
         builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int whichButton) {
                 if(mSingleChoiceID > 0) {
                 showDialog("你選擇的是" + mSingleChoiceID);
                 }
             }
         });
         builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int whichButton) {

             }
         });
        builder.create().show();

複製程式碼 5.進度條框

點選進度條框按鈕後 開啟一個執行緒計算讀取的進度 假設讀取結束為 100 Progress在小於100的時候一直線上程中做迴圈++ 只到讀取結束後,停止執行緒。 mProgressDialog = new ProgressDialog(MainDialog.this); mProgressDialog.setIcon(R.drawable.icon); mProgressDialog.setTitle("進度條視窗"); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.setMax(MAX_PROGRESS); mProgressDialog.setButton("確定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //這裡新增點選後的邏輯超級p57:http://www.p57a.com/ } }); mProgressDialog.setButton2("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //這裡新增點選後的邏輯 } }); mProgressDialog.show(); new Thread(this).start();

public void run() {
    int Progress = 0;
    while(Progress < MAX_PROGRESS) {
    try {
        Thread.sleep(100);
        Progress++;  
        mProgressDialog.incrementProgressBy(1);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    }

}

複製程式碼 6.多項選擇列表框

MultiChoiceID 用於記錄多選選中的id號 存在ArrayList中 選中後 add 進ArrayList 取消選中後 remove 出ArrayList。 ArrayList MultiChoiceID = new ArrayList (); 複製程式碼 AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);

    MultiChoiceID.clear();
    builder.setIcon(R.drawable.icon);
        builder.setTitle("多項選擇");
        builder.setMultiChoiceItems(mItems,
                new boolean[]{false, false, false, false, false, false, false},
                new DialogInterface.OnMultiChoiceClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton,
                            boolean isChecked) {
                       if(isChecked) {
                           MultiChoiceID.add(whichButton);
                           showDialog("你選擇的id為" + whichButton + " , " + mItems[whichButton]);
                       }else {
                           MultiChoiceID.remove(whichButton);
                       }

                    }
                });
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                String str = "";
                int size = MultiChoiceID.size();
                for (int i = 0 ;i < size; i++) {
                str+= mItems[MultiChoiceID.get(i)] + ", ";
                }
                showDialog("你選擇的是" + str);
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {

            }
        });
       builder.create().show();

複製程式碼 7.自定義佈局

講到自定義佈局我就得多說一說了,為什麼要多說一說呢? 其實自定義佈局在Android的開發中非常重要 因為它能讓開發者做出自己五彩繽紛的Activity 而不用去使用系統枯燥的介面。

自定義dialog有什麼好處?

比如我們在開發過長當中 要通過介紹系統傳送的一個廣播彈出一個dialog . 但是dialog必需是基於activity才能呈現出來 如果沒有activity 的話 程式就會崩潰。所以我們可以寫一個自定義的 dialog 把它定義成一個activity 這樣我們收到一條開啟超級p57:http://www.p57a.com/dialog的廣播後 直接啟動這個 activity 程式正常執行~~

這就是自定義dialog的好處。

註明:下面這個例子只是寫了自定義dialog 沒有把它單獨的寫在一個activity中 如果須要的話 可以自己改一下。 AlertDialog.Builder builder = new AlertDialog.Builder(MainDialog.this);
LayoutInflater factory = LayoutInflater.from(this); final View textEntryView = factory.inflate(R.layout.test, null); builder.setIcon(R.drawable.icon); builder.setTitle("自定義輸入框"); builder.setView(textEntryView); builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) {

                EditText userName = (EditText) textEntryView.findViewById(R.id.etUserName);
                EditText password = (EditText) textEntryView.findViewById(R.id.etPassWord);
                showDialog("姓名 :"  + userName.getText().toString()  + "密碼:" + password.getText().toString() );
                }
            });
            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                }
            });
          builder.create().show();

複製程式碼 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal" android:id="@+id/dialog"> <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal" android:id="@+id/dialogname">

<TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/tvUserName" android:text="姓名:" /> <EditText android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/etUserName" android:minWidth="200dip"/>
<LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal" android:id="@+id/dialognum" android:layout_below="@+id/dialogname" > <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/tvPassWord" android:text="密碼:" /> <EditText android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/etPassWord" android:minWidth="200dip"/>
複製程式碼 8.讀取進度框

顯示一個正在轉圈的進度條loading mProgressDialog = new ProgressDialog(this); mProgressDialog.setTitle("讀取ing"); mProgressDialog.setMessage("正在讀取中請稍候"); mProgressDialog.setIndeterminate(true); mProgressDialog.setCancelable(true); mProgressDialog.show(); 複製程式碼 最後如果你還是覺得我寫的不夠詳細 不要緊我把原始碼的下載地址貼出來 歡迎大家一起討論學習 雨鬆MOMO希望可以和大家一起進步

相關文章