Android-原生對話框


package liudeli.ui.all;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Toast;

public class DialogActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
    }

    /**
     * 普通對話框
     * @param view
     */
    public void commonDialog(View view) {

        // AlertDialog.Builder 使用了構建器模式(相當於你把所有材料給工人,工人把制作好的房子給你)
        AlertDialog.Builder builder =
                new AlertDialog.Builder(DialogActivity.this); // 注意:這里只能使用當前Activity的this,
                                                                      // 不能使用:getApplicationContext(); getBaseContext(); 否則會有異常

        builder.setCancelable(false); // 設置點擊Dialog其他區域不隱藏對話框,默認是true

        builder.setTitle("警告");
        builder.setMessage("你確定要清空所有資料嗎 ?");

        // PositiveButton 右邊的按鈕
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                alertToast("點擊了確定");
            }
        });

        // 左邊的按鈕
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                alertToast("點擊了取消");
            }
        });

        // 最左邊的按鈕
        builder.setNeutralButton("明天提醒我", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                alertToast("明天這個時候通知你");
            }
        });


        AlertDialog alertDialog = builder.create(); // 工人把制作好的房子給你
        alertDialog.show();
    }

    /**
     * 列表對話框(列表條目對話框,列表單選對話框,列表多選對話框)
     * @param view
     */
    public void listDialog(View view) {
        // AlertDialog.Builder 使用了構建器模式(相當於你把所有材料給工人,工人把制作好的房子給你)
        final AlertDialog.Builder builder =
                new AlertDialog.Builder(DialogActivity.this); // 注意:這里只能使用當前Activity的this,
                                                                      // 不能使用:getApplicationContext(); getBaseContext(); 否則會有異常

        builder.setCancelable(false); // 設置點擊Dialog其他區域不隱藏對話框,默認是true

        builder.setTitle("選擇");

        /**
         * ⚠️注意:列表對話框,千萬不能設置setMessage,否則列表數據不能顯示
         */
        // builder.setMessage("請選擇以下編程語言");

        builder.setIcon(R.mipmap.ic_launcher);

        /**
         * 只要Dialog隱藏了就是調用這個監聽
         */
        builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                alertToast("Dismiss");
            }
        });

        /**
         * 可以設置適配器,可以當作ListView來使用
         */
        // builder.setAdapter();

        String[] items = new String[]{"Java", "Android", "iOS"};

        /**
         * 設置列表數據 列表條目形式
         */
        /*builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                alertToast(which + "");
            }
        });*/

        /**
         * 設置列表數據 列表多選形式
         */
        /*builder.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                alertToast(which + "");
            }
        });*/

        /**
         * 設置列表數據 列表單選形式
         */
        builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                alertToast(which + "");
                dialog.dismiss();
            }
        });

        // 必須放在后面 最后才能制作好
        AlertDialog alertDialog = builder.create(); // 工人把制作好的房子給你

        alertDialog.show();
    }

    /**
     * 進度條對話框(默認是不確定進度條,可以設置樣式為確定進度條)
     * @param view
     */
    public void progressDialog(View view) {
        final ProgressDialog progressDialog = new ProgressDialog(this); // 注意:這里只能使用當前Activity的this,
                                                                          // 不能使用:getApplicationContext(); getBaseContext(); 否則會有異常
        progressDialog.setTitle("提示");
        progressDialog.setTitle("正在加載中,可能要等待大半天");
        progressDialog.setCancelable(true); // 默認就是true

        // 設置為 確定進度條 (默認是不確定進度條)
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMax(100);

        new Thread(){
            @Override
            public void run() {
                super.run();
                for(int i=0; i< progressDialog.getMax(); i++) {
                    // 使用Android提供的睡眠
                    SystemClock.sleep(300);
                    progressDialog.setProgress(i + 1);
                }
            }
        }.start();

        progressDialog.show();
    }

    private void alertToast(String text) {
        Toast.makeText(DialogActivity.this, text, Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

 

Layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="普通對話框"
        android:onClick="commonDialog"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="列表對話框"
        android:onClick="listDialog"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="進度條對話框"
        android:onClick="progressDialog"
        />


</LinearLayout>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM