Android dialog應用

轉自:https://blog.csdn.net/guizhongyun/article/details/60339208

Android常用如下七種對話框,基本涵蓋了大部分應用場景,所以有些時候沒必要自己去定義對話框,除非對話框的樣式不滿足UI的設計.常用七種對話框如下所示:

  1. 簡單對話框
  2. 簡單列表對話框
  3. 單選列表對話框
  4. 多選列表對話框
  5. 進度條對話框
  6. 編輯對話框
  7. 自定義對話框

1. 簡單對話框

 private void showNormalDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("簡單對話框")
                .setIcon(R.mipmap.ic_launcher)
                .setMessage("這是一個簡單對話框")
                .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //定義自己想要做的操作
                        showText("確定");
                    }
                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                showText("取消");
            }
        });
        builder.create().show();
    }

2. 簡單列表對話框

private void showListDialog() {
        final String[] items = new String[]{"上海", "北京", "湖南", "湖北", "海南"};
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("簡單列表對話框");
        //由於message 和 items 都屬於彈出框的內容部分,兩者只能顯示一個, 所以千萬不要加這句,不然列表顯示不出來
//        builder.setMessage("這是一個簡單的列表對話框");
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                showText(items[which]);
            }
        });
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                showText("確定");
            }
        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                showText("取消");
            }
        });

        builder.create().show();
    }

3. 單選列表對話框

private void showSingleChoiceDialog() {
        final String[] items = new String[]{"上海", "北京", "湖南", "湖北", "海南"};
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("簡單列表對話框");
        //由於message 和 items 都屬於彈出框的內容部分,兩者只能顯示一個, 所以千萬不要加這句,不然列表顯示不出來
//        builder.setMessage("這是一個簡單的列表對話框");
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                showText(items[which]);
            }
        });
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                showText("確定");
            }
        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                showText("取消");
            }
        });

        builder.create().show();
    }

4. 多選對話框.

private void showMultiChoiceDialog() {
        final String[] items = new String[]{"上海", "北京", "湖南", "湖北", "海南"};
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("簡單列表對話框");
        //由於message 和 items 都屬於彈出框的內容部分,兩者只能顯示一個, 所以千萬不要加這句,不然列表顯示不出來
//        builder.setMessage("這是一個簡單的列表對話框");
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setMultiChoiceItems(items, new boolean[]{false, false, false, false, false}, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                showText(items[which]);
            }
        });
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                showText("確定");
            }
        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                showText("取消");
            }
        });

        builder.create().show();
    }

 5. 進度條對話框.

private void showProgressDialog() {
        final ProgressDialog dialog = new ProgressDialog(this);
        final int MAX_PROGRESS = 100;
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setCancelable(true);
        dialog.setCanceledOnTouchOutside(false);
        dialog.setIcon(R.mipmap.ic_launcher);
        dialog.setTitle("提示");
        dialog.setMessage("這是一個進度條對話框");
        dialog.setProgress(0);
        //監聽取消時間
        dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                showText("進度條結束");
            }
        });
        dialog.show();
        new Thread(new Runnable() {
            @Override
            public void run() {
                int progress = 0;
                while (progress < MAX_PROGRESS) {
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    progress++;
                    //非UI線程,可以處理DialogUI
                    dialog.setProgress(progress);
                }
                dialog.cancel();
            }
        }).start();

    }

6. 編輯對話框,也屬於自定義對話框.

private void showEditDialog() {
        final EditText editText = new EditText(this);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setIcon(R.mipmap.ic_launcher);
        builder.setTitle("編輯對話框");
        builder.setMessage("這是一個編輯對話框");
        builder.setView(editText);
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String input = editText.getText().toString();
                showText(input);
            }
        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

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

7. 自定義對話框

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="299dip"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:text="提示"
            android:layout_width="fill_parent"
            android:layout_height="40.0dip"
            android:gravity="center_vertical"
            android:paddingLeft="20.0dip"
            android:textSize="16dip"
            android:background="#288DF5"
            android:textColor="@color/white"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dip"
            android:gravity="left|center"
            android:paddingLeft="20dip"
            android:paddingRight="20dip"
            android:textColor="@color/black"
            android:text="@string/custom_dialog_msg"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dip">

            <Button
                android:layout_width="fill_parent"
                android:layout_height="40dip"
                android:layout_weight="1"
                android:text="確定"
                android:textColor="@color/white"
                android:textSize="16sp"/>
            <Button
                android:layout_width="fill_parent"
                android:layout_height="40dip"
                android:layout_marginLeft="5dip"
                android:layout_weight="1"
                android:text="取消"
                android:textColor="@color/white"
                android:textSize="16sp"/>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

/**
 * alertDialog提供了setView與setContentView兩種方法自定義視圖。
 * setContentView是在AlertDialog的父類Dialog的方法,在父類Dialog方法中,是調用了Window.setContentView。這是對應整個對話框窗口的view。
 * setView則是AlertDialog的方法,setView指的設置CustomView的部分而不是整個窗體,如果我們設置了buttonPanel又設置了contentPanel,則會在自定義的view下面顯示自帶的button。
 */

public class TestActivity extends BaseActivity {
    AlertDialog alertDialogWithSetView;
    AlertDialog alertDialogWithSetContentView;

    void showDialogWithSetView() {

        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        LinearLayout layout = (LinearLayout) getLayoutInflater().inflate(R.layout.my_dialog, null);
        Button btnConfirm = (Button) layout.findViewById(R.id.btn_confirm);
        btnConfirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.btn_confirm:
                        ToastUtil.showToast(context, "點擊了確定按鈕");
                        alertDialogWithSetView.dismiss();
                        break;
                }
            }
        });
        alertDialogWithSetView = builder.setView(layout).create();
        alertDialogWithSetView.setCancelable(false);//false-dialog彈出後會點擊返回鍵,dialog不消失; true-點擊返回鍵可消失;要想消失可以調用dismiss方法
        alertDialogWithSetView.setCanceledOnTouchOutside(false);//false-點擊對話框以外的區域,dialog不消失; true-點擊對話框以外區域,dialog消失.
        //先調用show這個方法,然後才設置dialog的長寬
        alertDialogWithSetView.show();
        //獲取屏幕的長寬
        WindowManager windowManager = getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        int screenheight = display.getHeight();
        int screenWidth = display.getWidth();
        //設置彈出框的長寬
        Window window = alertDialogWithSetView.getWindow();
        //設置窗口的位置
        window.setGravity(Gravity.BOTTOM);
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        layoutParams.width = screenWidth / 3;
        layoutParams.height = screenheight / 4;
        window.setAttributes(layoutParams);
    }


    void showDialogWithSetContentView() {

        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        alertDialogWithSetContentView = builder.create();
        alertDialogWithSetContentView.setCancelable(false);//false-dialog彈出後會點擊返回鍵,dialog不消失; true-點擊返回鍵可消失;要想消失可以調用dismiss方法
        alertDialogWithSetContentView.setCanceledOnTouchOutside(false);//false-點擊對話框以外的區域,dialog不消失; true-點擊對話框以外區域,dialog消失.
        //先調用show這個方法,然後才設置dialog的長寬
        alertDialogWithSetContentView.show();
        LinearLayout layout = (LinearLayout) getLayoutInflater().inflate(R.layout.my_dialog, null);
        Button btnConfirm = (Button) layout.findViewById(R.id.btn_confirm);
        btnConfirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.btn_confirm:
                        ToastUtil.showToast(context, "點擊了確定按鈕");
                        alertDialogWithSetContentView.dismiss();
                        break;
                }
            }
        });
        alertDialogWithSetContentView.setContentView(layout);
        //獲取屏幕的長寬
        WindowManager windowManager = getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        int screenheight = display.getHeight();
        int screenWidth = display.getWidth();
        //設置彈出框的長寬
        Window window = alertDialogWithSetContentView.getWindow();
        //設置窗口的位置
        window.setGravity(Gravity.BOTTOM);
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        layoutParams.width = screenWidth / 3;
        layoutParams.height = screenheight / 4;
        window.setAttributes(layoutParams);
    }

    @Override
    public int setCustomContentViewResourceId() {
        return 0;
    }

    @Override
    public void initParam() {

    }

    @Override
    public void initView() {

    }

    @Override
    public void initOperator() {

    }
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章