安卓AlertDialog彈窗的六種創建方式


安卓AlertDialog彈窗的六種創建方式

Android在開發中經常會遇到有彈框的需求。

經常使用的有Dialog 彈框,Window彈框(任意位置彈出除了外觀樣式和顯示的位置的區別之外,他們之間最本質的區別是: dialog是非阻塞式對話框,popupwindow是阻塞式對話框。也就是說dialog彈出時 后台還可以進行很多的操作,而popupwindow彈出是 后台進程是阻塞的,要一直等待popupwindow 消失 才會進行操作。

 

 

目錄

AlertDialog的六種創建方式... 1

創建AlertDialog的步驟:... 1

最常用的AlertDialog. 2

一、setMessage:設置對話框內容為簡單文本內容... 4

二、setItem:設置文本框內容為簡單列表項... 4

三、setSingleChoiceItems()設置對話框內容為單選列表項     5

四、setMultiChoiceItems()設置對話框內容為多選項列表     6

五、setView ()設置圖片內容為對話框項... 7

六、setView()設置對話框為自定義輸入框View.. 8

七、ProgressDialog()圓形進度條對話框... 10

 

 

AlertDialog的六種創建方式

創建AlertDialog的步驟:

1、創建AlertDialog.Builder對象

2、調用Builder (b有的)對象的setTitle方法設置標題,setIcon方法設置圖標

3、調用Builder相關方法如setMessage(顯示內容)方法、

setItems 方法、

setSingleChoiceItems方法、(色特行康崔賽騰)

setMultiChoiceItems方法、(色特某疼康崔賽騰)

setAdapter方法、(額達科特)

setView方法設置不同類型的對話框內容。

4、調用setPositiveButton(右邊)、

setNegativeButton(中間)()色特蘭格提兀巴騰、

setNeutralButton(左邊)設置多個按鈕(色特劉雀巴騰)

5、調用 方法創建AlertDialog對象

6、調用AlertDialog對象的show()方法將對話框顯示出來

 

最常用的AlertDialog.

今天主要是講他的用法。AlertDialog的用法也很簡單

經常用的:

setTitle :為對話框設置標題

 setIcon :為對話框設置圖標

 setMessage:為對話框設置內容

 setView : 給對話框設置自定義樣式

 setItems :設置對話框要顯示的一個list,一般用於顯示幾個命令時

 setMultiChoiceItems :用來設置對話框顯示一系列的復選框

 setSingleChoiceItems :用來設置對話框顯示一系列的單選框

 setNeutralButton    :普通按鈕

 setPositiveButton   :給對話框添加"Yes"按鈕

 setNegativeButton :對話框添加"No"按鈕

 create : 創建對話框

 show :顯示對話框

 

 

列表框list

單選框Radio

復選框check

圖片Picture

輸入entry

進度條 progress

 

  • 點擊普通彈窗時彈出下面的界面:

涉及到知識點:setMessage設置對話框內容為簡單文本內容

context

AlertDialog.Builder alertdialogbuilder = new AlertDialog.Builder(this);
alertdialogbuilder.setMessage("您確認要退出程序");
alertdialogbuilder.setPositiveButton("確定", null);
alertdialogbuilder.setNeutralButton("取消", null);
final AlertDialog alertdialog1 = alertdialogbuilder.create();
alertdialog1.show();

二、setItem:設置文本框內容為簡單列表項

核心代碼:

builder = new AlertDialog.Builder(this);

builder.setTitle("列表框")

        .setItems(new String[]{"列表項1", "列表項2", "列表項3"}, null)

        .setNegativeButton("確定", null);

builder.create().show();

三、setSingleChoiceItems()設置對話框內容為單選列表項

核心代碼:

final String[] item = new String[]{"選項1", "選項2", "選項3", "選項4"};

android.app.AlertDialog alertDialog = new android.app.AlertDialog.Builder(this)



        .setTitle("請選擇")//默認為0表示選中第一個項目

        .setSingleChoiceItems(item, 0, new DialogInterface.OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {

                Toast.makeText(MainActivity.this, "你單選了" + item[which], Toast.LENGTH_LONG).show();

            }

        })

        .setPositiveButton("確認", new DialogInterface.OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {



            }

        })

        .setNegativeButton("取消", null)

        .create();

alertDialog.show();

四、setMultiChoiceItems()設置對話框內容為多選項列表

 
          
核心代碼:
// 創建數據

final String[] items = new String[]{"我是Item一", "我是Item二", "我是Item三", "我是Item四"};

// 創建對話框構建器

builder = new AlertDialog.Builder(this);

builder.setIcon(R.drawable.ic_launcher_background)

        .setTitle("提示")

        .setMultiChoiceItems(items, //選項條

                new boolean[]{true, true, false, false, false},// //這個參數必須是boolean[]的,不能使Boolean[]的,有幾個item就數組長度幾個,true為勾選,false則相反

                new DialogInterface.OnMultiChoiceClickListener() {



                    @Override

                    public void onClick(DialogInterface dialog,

                                        int which, boolean isChecked) {

                        // TODO Auto-generated method stub

                        if (isChecked) {

                            Toast.makeText(MainActivity.this,

                                    items[which], Toast.LENGTH_SHORT).show();

                        }

                    }

                });

builder.create().show();

五、setView ()設置圖片內容為對話框項

 
          
核心代碼:
ImageView img = new ImageView(this);

img.setImageResource(R.mipmap.timg);

builder = new AlertDialog.Builder(this);

builder.setTitle("圖片框")

        .setView(img)

        .show();
 
//—————升級添加按鈕事件——————
ImageView img = new ImageView(this);

    img.setImageResource(R.mipmap.timg);

    builder = new AlertDialog.Builder(this);

    builder.setTitle("認識它嗎?")

            .setView(img).setPositiveButton("知道", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

        Toast.makeText(MainActivity.this,"哎呦,不錯哦",Toast.LENGTH_SHORT).show();

    }

}).setNegativeButton("不知道", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

        Toast.makeText(MainActivity.this,"一點也不老實",Toast.LENGTH_SHORT).show();

    }

}).setNeutralButton("誰呀", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

        Toast.makeText(MainActivity.this,"快睜開眼瞅瞅",Toast.LENGTH_SHORT).show();

    }

});

          builder.create() .show();

六、setView()設置對話框為自定義輸入框View

核心代碼點擊事件寫:
builder = new AlertDialog.Builder(this);

// 獲取布局

View view2 = View.inflate(MainActivity.this, R.layout.login, null);

// 獲取布局中的控件

final EditText username = (EditText) view2.findViewById(R.id.username);

final EditText password = (EditText) view2.findViewById(R.id.password);

final Button btn = (Button) view2.findViewById(R.id.btn_login);

// 設置參數

builder.setTitle("Login").setIcon(R.drawable.ic_launcher_background).setView(view2);

// 創建對話框

builder.create().show();

btn.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        // TODO Auto-generated method stub

        String uname = username.getText().toString().trim();

        String psd = password.getText().toString().trim();

        if (uname.equals("123") && psd.equals("123")) {

            Toast.makeText(MainActivity.this, "登錄成功", Toast.LENGTH_SHORT).show();

        }

        Toast.makeText(MainActivity.this, "登錄失敗", Toast.LENGTH_SHORT).show();

    }



});
LinearLayout還需要一個login.Xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="姓名"
            android:id="@+id/tv_name"/>
        <EditText
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:id="@+id/username"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="姓名"
            android:id="@+id/tv_pwd"/>
        <EditText
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:id="@+id/password"
            />
    </LinearLayout>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login"
        android:id="@+id/btn_login"/>
</LinearLayout>

 

 

七、ProgressDialog()圓形進度條對話框


 

                //ProgressDialog.STYLE_SPINNER 環形精度條

                //ProgressDialog.STYLE_HORIZONTAL 水平樣式的進度條

ProgressDialog:可以在當前界面彈出一個置頂於所有界面元素的對話框,同樣具有屏蔽其他控件的交互能力,用於提示用戶當前操作正在運行,讓用戶等待。

(設置可否使用back鍵返回,這里設置若是為progressDialog.setCancelable(flase),則要在數據加載完成后調用ProgressDialog的dismiss()來關閉對話框;)

ProgressDialog dialog = new ProgressDialog(this); //1.創建一個ProgressDialog的實例

dialog.setMessage("正在加載中");

dialog.show();//5.ProgessDialog顯示出來
 

感興趣同學可以思考:如何做出這種效果:(過時了)

 

//參考核心代碼:

final ProgressDialog dialog = new ProgressDialog(this);

        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

        dialog.setMessage("正在加載中");

        dialog.setMax(100);

        final Timer timer = new Timer();

        timer.schedule(new TimerTask() {

            int progress = 0;

 

            @Override

            public void run() {

                dialog.setProgress(progress += 5);

                if (progress == 100) {

                    timer.cancel();

                }

            }

        }, 0, 1000);

        dialog.show();

 


注意:

以上例子代碼使用到的類AlertDialog,DialogInterface分別來是

android.app.AlertDialog和android.content.DialogInterface
故需要導入如下包:
import android.app.AlertDialog;
import android.content.DialogInterface;


免責聲明!

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



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