對話框整理
普通對話框
/**
* 普通對話框
*
* 對話框中的一些屬性不一定是必須的,比如可以不設置標題、圖標之類的,
*
* 也可以只設置一個按鈕或者兩個按鈕,如常見的確認退出對話框
*/
private void commonDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("普通對話框");// 設置標題
// builder.setIcon(R.drawable.ic_launcher);//設置圖標
builder.setMessage("我是內容");// 爲對話框設置內容
// 爲對話框設置取消按鈕
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
myToast("您點擊了取消按鈕");
}
});
// 爲對話框設置中立按鈕
// builder.setNeutralButton("中立", new OnClickListener() {
//
// @Override
// public void onClick(DialogInterface arg0, int arg1) {
// // TODO Auto-generated method stub
// myToast("您點擊了中立按鈕");
// }
// });
// 爲對話框設置確定按鈕
builder.setPositiveButton("確定", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
myToast("您點擊了確定按鈕");
}
});
builder.create().show();// 使用show()方法顯示對話框
}
單選對話框
/**
* 單選對話框
*/
private void singleDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("單選對話框");
final String[] items = { "男", "女" };// 創建一個存放選項的數組
final boolean[] checkedItems = { true, false };// 存放選中狀態,true爲選中
// ,false爲未選中,和setSingleChoiceItems中第二個參數對應
// 爲對話框添加單選列表項
// 第一個參數存放選項的數組,第二個參數存放默認被選中的項,第三個參數點擊事件
builder.setSingleChoiceItems(items, 0, new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
for (int i = 0; i < checkedItems.length; i++) {
checkedItems[i] = false;
}
checkedItems[arg1] = true;
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
arg0.dismiss();
}
});
builder.setPositiveButton("確定", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
String str = "";
for (int i = 0; i < checkedItems.length; i++) {
if (checkedItems[i]) {
str = items[i];
}
}
myToast("您選擇了" + str);
}
});
builder.create().show();
}
多選對話框
/**
* 多選對話框
*/
private void multipleDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("多選對話框");
final String[] items = { "數學", "語文", "英語", "政治" };// 存放選項的數組
final boolean[] checkedItems = { false, true, false, false };
// 第一個參數選項,第二個參數選項的狀態,第三個點擊事件
builder.setMultiChoiceItems(items, checkedItems,
new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1,
boolean arg2) {
// TODO Auto-generated method stub
if (arg2) {
checkedItems[arg1] = true;
} else {
checkedItems[arg1] = false;
myToast("您取消了" + items[arg1]);
}
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
arg0.dismiss();
}
});
builder.setPositiveButton("確定", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
String str = "";
for (int i = 0; i < checkedItems.length; i++) {
if (checkedItems[i]) {
str = str + items[i];
}
}
myToast("您選擇了" + str);
}
});
builder.create().show();
}
列表對話框
/**
* 列表對話框
*/
private void listDialog() {
final String[] items = { "蘋果", "草莓", "橘子", "冬瓜" };
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("我是列表對話框");
builder.setItems(items, new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
myToast(items[arg1]);
}
});
builder.create().show();
}
不帶進度條的對話框,常用於等待加載數據時使用
/**
* 不帶進度條的對話框,常用於等待加載數據時使用
*/
private void proDialog1() {
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("不帶進度條的對話框");
dialog.setMessage("正在加載中~");
dialog.show();
}
帶進度的對話框
/**
* 帶進度的對話框
*/
private void proDialog2() {
final ProgressDialog dialog = new ProgressDialog(MainActivity.this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 設置水平樣式
dialog.setTitle("帶進度條的對話框");
dialog.setMessage("加載中~");
dialog.setMax(200);
dialog.show();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for (int j = 0; j <= 200; j++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dialog.setProgress(j);
}
}
}).start();
}
自定義佈局的對話框
/**
* 自定義佈局的對話框
*/
private void layDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
// 創建一個view,並且將佈局加入view中
View view = LayoutInflater.from(MainActivity.this).inflate(
R.layout.dialog_edt, null, false);
// 將view添加到builder中
builder.setView(view);
// 創建dialog
final Dialog dialog = builder.create();
// 初始化控件,注意這裏是通過view.findViewById
final EditText edt = (EditText) view.findViewById(R.id.edt);
Button confirm = (Button) view.findViewById(R.id.confirm);
Button cancel = (Button) view.findViewById(R.id.cancel);
// 設置button的點擊事件及獲取editview中的文本內容
confirm.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String str = edt.getText() == null ? "" : edt.getText()
.toString();
myToast(str);
}
});
// 取消按鈕
cancel.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.show();
}
佈局:
<?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:gravity="center"
android:orientation="vertical" >
<EditText
android:id="@+id/edt"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:hint="請輸入內容" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="50dp"
android:gravity="center"
android:orientation="horizontal" >
<Button
android:id="@+id/confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="確定" />
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="取消" />
</LinearLayout>
</LinearLayout>
自定義對話框
package com.example.dialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
/**
* 自定義對話框
*
* @author dimanche
*
*/
public class MyDialog extends Dialog {
private TextView title, content;
private Button confirm, cancel;
private String titleStr, contentStr, confirmStr, cancelStr;
private Context mContext;
// 按鈕監聽器
private OnNoClickListener onNoClickListener;
private OnYesClickListener onYesClickListener;
public MyDialog(Context context) {
super(context);
this.mContext = context;
}
public MyDialog(Context context, int theme) {
super(context, theme);
this.mContext = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog_my);
init();
setSize();
title.setText(titleStr);
content.setText(contentStr);
confirm.setText(confirmStr);
cancel.setText(cancelStr);
// 確認按鈕
confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (onYesClickListener == null) {
return;
}
onYesClickListener.confirm();
}
});
// 取消按鈕
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (onNoClickListener == null) {
return;
}
onNoClickListener.cancel();
}
});
}
/*
* 初始化控件
*/
private void init() {
title = (TextView) findViewById(R.id.title);
content = (TextView) findViewById(R.id.content);
confirm = (Button) findViewById(R.id.confirm);
cancel = (Button) findViewById(R.id.cancel);
}
/*
* 設置對話框的大小
*/
private void setSize() {
Window window = getWindow();
// Point point = new Point();
Display display = getWindow().getWindowManager().getDefaultDisplay();
int x = display.getWidth();
int y = display.getHeight();
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.width = (x * 3) / 4;
layoutParams.height = y / 2;
window.setAttributes(layoutParams);
}
// ============================爲外界服務部分============================
/*
* 設置取消對話框的點擊事件的監聽接口
*/
public interface OnNoClickListener {
public void cancel();
}
/*
* 設置確認對話框的點擊事件的監聽接口
*/
public interface OnYesClickListener {
public void confirm();
}
/*
* 爲外部設置監聽部分
*/
public void setOnYesClick(String str, OnYesClickListener onYesClickListener) {
if (str != null) {
this.confirmStr = str;
}
this.onYesClickListener = onYesClickListener;
}
public void setOnNoClick(String str, OnNoClickListener onNoClickListener) {
if (str != null) {
this.cancelStr = str;
}
this.onNoClickListener = onNoClickListener;
}
/**
* 爲外界暴露方法,設置標題內容等
*/
public void setTile(String str) {
this.titleStr = str == null ? "" : str;
}
public void setContent(String str) {
this.contentStr = str == null ? "" : str;
}
}
佈局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"
android:text="" />
<TextView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:padding="5dp"
android:text="sss" />
<View
android:id="@+id/line"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignRight="@id/line"
android:layout_alignParentBottom="true"
android:text="取消" />
<Button
android:id="@+id/confirm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/line"
android:layout_alignParentBottom="true"
android:text="確定" />
</RelativeLayout>
代碼已上傳百度雲:
鏈接:https://pan.baidu.com/s/1gF-XjSkeV5VdeDewAieJeA
提取碼:9pla
加入我的行列:
(嘿嘿嘿,點擊這裏關於我哦,分享小知識):https://www.jianshu.com/p/7d19f0df5b6b