安卓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;