常見的對話框:
1.Toast
2.普通的對話框
3.列表對話框
4.單選對話框
5.多選對話框
6.自定義VIew對話框
7.進度條對話框(與進度相關的控件都可以到子線程更新UI)
8.是用了Adapter的對話框
xml代碼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.dialog.MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="普通對話框"
android:onClick="dialog_1"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="列表對話框"
android:onClick="dialog_2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="單選對話框"
android:onClick="dialog_3"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="多選對話框"
android:onClick="dialog_4"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="自定義View對話框"
android:onClick="dialog_5"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="進度條對話框"
android:onClick="dialog_6"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="使用Adapter的對話框"
android:onClick="dialog_7"/>
</LinearLayout>
java代碼:
package com.example.dialog;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 點擊按鈕彈出一個普通對話框
public void dialog_1(View view){
// 創建一個對話框實例,Builder是AlertDialog的靜態內部類,所有的對話框需要填寫上下文的都不許要填寫this
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 設置標題
builder.setTitle("更新提示");
// 設置標題前面的圖標
builder.setIcon(R.mipmap.ic_launcher_round);
// 設置內容
builder.setMessage("馬上更新");
// 設置確定鍵(積極的)及監聽
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 按下確定鍵後該實現什麼功能,這裏就Toast下
Toast.makeText(MainActivity.this, "按下了確定鍵", Toast.LENGTH_SHORT).show();
}
});
// 設置取消鍵(消極的)及監聽
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 按下取消鍵後實現什麼功能,這裏也就Toast下
Toast.makeText(MainActivity.this, "按下了取消鍵", Toast.LENGTH_SHORT).show();
}
});
// 跟Toast一樣一定要show出來,否則對話框不會顯示出來
builder.show();
}
// 點擊按鈕彈出一個列表對話框
public void dialog_2(View view){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("請選擇");
final String [] items = {"遊戲","運動","電影","旅遊","看書"};
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "選擇了"+items[which], Toast.LENGTH_SHORT).show();
}
});
// 這樣也可以show出來
AlertDialog dialog = builder.create();
dialog.show();
}
// 定義一個變量代表數組的座標
int index;
// 點擊彈出一個單選的對話框
public void dialog_3(View view){
// 創建一個對話框實例
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 設置標題
builder.setTitle("性別");
// 設置單選內容
final String items[] = {"男","女"};
// 設置單選(-1是默認狀態下沒有選中的條目)
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whih) {
// 選中項座標賦給index
index = whih;
}
});
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 監聽被選中條目之後實現什麼功能,這裏就Toast下
Toast.makeText(MainActivity.this,"選擇了"+items[index],Toast.LENGTH_SHORT).show();
}
});
// 顯示對話框
builder.show();
}
// 點擊按鈕彈出一個多選對話框
public void dialog_4(View view){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("選擇愛好");
final String hobby[] = {"看電影","聽音樂","旅遊","爬山","打籃球","踢足球","打羽毛球"};
// 初始化選項的狀態
final boolean choice[] = {false,false,false,false,false,false,false};
builder.setMultiChoiceItems(hobby, choice, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// 用戶選中的條目賦值給選項狀態數組
choice[which]=isChecked;
}
});
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < hobby.length; i++) {
if (choice[i]) {
sb.append(hobby[i]+" ");
}
}
Toast.makeText(MainActivity.this, "選擇了:"+sb.toString(), Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
// 點擊按鈕彈出一個自定義View的對話框
public void dialog_5(View view){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("正在連接wifi");
// 創建輸入文本
final EditText et = new EditText(this);
// 設置文本提示語句
et.setHint("請輸入密碼");
// 設置只能單行,不能換行
et.setSingleLine(true);
// 把輸入文本設置到View裏面才能顯示出來
builder.setView(et);
// 設置取消按鈕
builder.setNegativeButton("取消",null);
// 設置確定按鈕
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 獲取用戶輸入的密碼
String password = et.getText().toString();
// 判斷密碼是否正確
if (password.equals("123456789")){
Toast.makeText(MainActivity.this,"登陸成功",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this,"密碼輸入有誤", Toast.LENGTH_SHORT).show();
}
}
});
builder.show();
}
// 點擊按鈕彈出一個進度條對話框
public void dialog_6(View view){
// 創建一個進度條對話框實例
final ProgressDialog dialog = new ProgressDialog(this);
// 設置標題
dialog.setTitle("正在更新中");
// 設置進度條的樣式(水平樣式)默認是圓圈樣式的
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 顯示對話框
dialog.show();
// 設置一個子線程來更新進度(與進度相關的控件都可以到子線程更新UI)
new Thread(){
@Override
public void run() {
// 設置進度最大值
dialog.setMax(100);
// 設置當前進度
for (int i = 0; i <= 100; i++) {
dialog.setProgress(i);
// 這裏是模擬所有就每走一下休息50毫秒
SystemClock.sleep(50);
}
// 進度完成後關閉對話框
dialog.dismiss();
}
}.start();
}
// 點擊按鈕彈出一個使用了Adapter的對話框
public void dialog_7(View view){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("使用Adapter");
// 設置一個String類型的數組
final String [] items = {"遊戲","運動","電影","旅遊","看書"};
// 創建一個適配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items);
// 設置適配器
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"選擇了"+items[which],Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
}
下面就是運行效果: