1. 程式人生 > >Android-彈窗AlterDialog對話方塊使用全解析

Android-彈窗AlterDialog對話方塊使用全解析

主要方法:

setMessage() 設定對話方塊內容為簡單文字
setItems() 對話款內容為簡單列表項
setSingleChoiceItems() 對話方塊內容為單選列表項
setMultiChoiceItems() 對話款內容為多選列表項
setAdapter() 內容為自定義列表項
setView() 內容為自定義view

 


六種樣式分析:

  1. 顯示訊息提示的對話方塊(例如:是否確認關閉)
  2. 簡單列表對話方塊
  3. 單選列表對話方塊
  4. 多選列表對話方塊
  5. 自定義對標對話方塊
  6. 自定義View對話方塊
  7.  

注:按鈕的點選事件在 MainActivity 中宣告 MainActivity的 XML 在文末給出

一、顯示訊息提示的對話方塊

效果:

實現方法:

建立 FirstService類 用於寫靜態方法

public class FirstService  extends MainActivity{
    public static void simple(View scource ){
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.mMainActivity)
                .setTitle("你好呀~")//設定對話方塊 標題
                .setIcon(R.drawable.seek02)//設定圖示
                .setMessage("the sentences you want to say");

        setPositiveButton(builder);//add 'yes' Button to AlertDialog
        setNegativeButton(builder)//add 'no' Button to AlertDialog
                .create()
                .show();
    }
    private static AlertDialog.Builder setPositiveButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.mMainActivity,"you click 'yes' button ",Toast.LENGTH_SHORT).show();
            }
        });
    }

    private static AlertDialog.Builder setNegativeButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.mMainActivity,"you click 'no' button ",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

在MainActivity中呼叫該方法:

public class MainActivity extends Activity {
    public static MainActivity mMainActivity;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMainActivity = this;
    }
    public void send(View source){
        FirstService.simple(getWindow().getDecorView());
    }
}

二、列表項對話方塊

// 由於Dialog 本身原因 選完後 dialog會自動關閉 如果不想自動關閉,可以:不關閉方法

效果:

具體實現:

public class FirstService  extends MainActivity{
    private static String[] items = new String[]{
            "I believe I can fly",
            "Sunshine brightly",
            "I love study Java",
            "Wiw cool Dialog",
    };
    public static void simple(View scource ){
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.mMainActivity)
                .setTitle("set your list Dialog's title here")//設定對話方塊 標題
                .setIcon(R.drawable.seek02)//設定圖示
                .setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.mMainActivity,"you click '" + items[which] + "' button ",Toast.LENGTH_SHORT).show();
                        return;
                    }
                });

        setPositiveButton(builder);//add 'yes' Button to AlertDialog
        setNegativeButton(builder)//add 'no' Button to AlertDialog
                .create()
                .show();
    }
    private static AlertDialog.Builder setPositiveButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.mMainActivity,"you click 'yes' button ",Toast.LENGTH_SHORT).show();
            }
        });
    }

    private static AlertDialog.Builder setNegativeButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.mMainActivity,"you click 'no' button ",Toast.LENGTH_SHORT).show();
                return;
            }
        });
    }
}

主活動中呼叫方法與(一)中類似,這裡就不給出了了


三、單選列表對話方塊

具體呼叫方法:

public static void simple(View scource ){
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.mMainActivity)
                .setTitle("單選列表對話方塊")//設定對話方塊 標題
                .setIcon(R.drawable.seek02)//設定圖示
                .setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.mMainActivity,"you click '" + items[which] + "' button ",Toast.LENGTH_SHORT).show();
                    }
                });

        setPositiveButton(builder);//add 'yes' Button to AlertDialog
        setNegativeButton(builder)//add 'no' Button to AlertDialog
                .create()
                .show();
    }

其他部分程式碼與 二 中相同,這裡就不在給出


四、多選列表對話方塊

效果:

具體實現方法:

這裡為了傳送資料 判斷使用者選了哪些選項 setPositiveButton 進行了修改

public class FirstService  extends MainActivity{
    private static String[] items = new String[]{
            "I believe I can fly",
            "Sunshine brightly",
            "I love study Java",
            "Wiw cool Dialog",
    };
    private static boolean[] multiDialog = new boolean[]{false , true , false , true};
    public static void simple(View scource ){
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.mMainActivity)
                .setTitle("單選列表對話方塊")//設定對話方塊 標題
                .setIcon(R.drawable.seek02)//設定圖示
                .setMultiChoiceItems(items, multiDialog ,null);

        setPositiveButton(builder);//add 'yes' Button to AlertDialog
        setNegativeButton(builder)//add 'no' Button to AlertDialog
                .create()
                .show();
    }
    private static AlertDialog.Builder setPositiveButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                for ( int i = 0 ; i < items.length ; i++ ){
                    if (multiDialog[i]){
                        Toast.makeText(MainActivity.mMainActivity,"you click '"  + items[i] +  "' button ",Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }

    private static AlertDialog.Builder setNegativeButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.mMainActivity,"you click 'no' button ",Toast.LENGTH_SHORT).show();
                return;
            }
        });
    }
}

呼叫方法在 一 中給出 這裡不在給出


五、自定義列表項對話方塊

效果:

簡單實現:

public class FirstService  extends MainActivity{
    private static String[] items = new String[]{
            "I believe I can fly",
            "Sunshine brightly",
            "I love study Java",
            "Wiw cool Dialog",
    };
    public static void simple(View scource ){
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.mMainActivity)
                .setTitle("單選列表對話方塊")//設定對話方塊 標題
                .setIcon(R.drawable.seek02)//設定圖示
                .setAdapter(new ArrayAdapter<String>(mMainActivity,R.layout.cell,items),null);

        setPositiveButton(builder);//add 'yes' Button to AlertDialog
        setNegativeButton(builder)//add 'no' Button to AlertDialog
                .create()
                .show();
    }
    private static AlertDialog.Builder setPositiveButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.mMainActivity,"you click 'yes' button ",Toast.LENGTH_SHORT).show();
            }
        });
    }

    private static AlertDialog.Builder setNegativeButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.mMainActivity,"you click 'no' button ",Toast.LENGTH_SHORT).show();
                return;
            }
        });
    }
}

附上 /layout/cell 佈局檔案

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:id="@+id/cell"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="15dp"
    android:orientation="vertical">
</TextView>

六、自定義 View 對話方塊

效果:

具體實現方法:

public class FirstService  extends MainActivity{
    private static TableLayout tableLayout;
    public static void simple(View scource ){
        tableLayout = (TableLayout) mMainActivity.getLayoutInflater().inflate(R.layout.cell,null);
        AlertDialog.Builder builder = new AlertDialog.Builder(mMainActivity)
                .setTitle("單選列表對話方塊")//設定對話方塊 標題
                .setIcon(R.drawable.seek02)//設定圖示
                .setView(tableLayout);

        setPositiveButton(builder);//add 'yes' Button to AlertDialog
        setNegativeButton(builder)//add 'no' Button to AlertDialog
                .create()
                .show();
    }
    private static AlertDialog.Builder setPositiveButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //do login operations here
                Toast.makeText(MainActivity.mMainActivity,"you info:" + tableLayout.toString(),Toast.LENGTH_SHORT).show();
            }
        });
    }

    private static AlertDialog.Builder setNegativeButton(AlertDialog.Builder builder){
        // use 'setPositiveButton' method to add 'yes' Button
        return builder.setNegativeButton("no", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //do nothing here
                Toast.makeText(MainActivity.mMainActivity,"you click 'no' button ",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

最後給出 cell.xml 佈局:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
    android:id="@+id/cell"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TableRow>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="使用者名稱"
            android:textSize="10pt"/>
        <!--Users can input personal info in here-->
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="please input your account:"
            android:selectAllOnFocus="true"/>
        <!--if you set selectAllOnFocus 'true' your keyboard will open-->
    </TableRow>
    <TableRow>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Code"
            android:textSize="10pt"/>
        <!--Users can input personal info in here-->
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="please input your Code:"
            android:selectAllOnFocus="true"/>
    </TableRow>
    <TableRow>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Phone"
            android:textSize="10pt"/>
        <!--Users can input personal info in here-->
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="please input your Phone number:"
            android:selectAllOnFocus="true"/>
    </TableRow>
</TableLayout>

最後給出 MainActivity的佈局檔案:

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/idtatabHost"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">
    <Button
        android:id="@+id/send"
        android:onClick="send"
        android:text="點我一下 有驚喜(嚇) 。。。"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

可以看到 Button中 android:onClick="send"聲明瞭 它的點選事件