安卓AlertDialog彈窗的六種創建方式
Android在開發中經常會遇到有彈框的需求。
經常使用的有Dialog 彈框,Window彈框(任意位置彈出除了外觀樣式和顯示的位置的區別之外,他們之間最本質的區別是: dialog是非阻塞式對話框,popupwindow是阻塞式對話框。也就是說dialog彈出時 后台還可以進行很多的操作,而popupwindow彈出是 后台進程是阻塞的,要一直等待popupwindow 消失 才會進行操作。
目錄
一、setMessage:設置對話框內容為簡單文本內容... 4
三、setSingleChoiceItems()設置對話框內容為單選列表項 5
四、setMultiChoiceItems()設置對話框內容為多選項列表 6
六、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的用法也很簡單
經常用的:
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;
