Dialog對話框
一、常用的對話框
1.普通對話框
普通對話框效果圖
代碼實現(xiàn):
//普通對話框方法
private void normal_dialog() {
//構(gòu)建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//設(shè)置屬性
builder.setTitle("普通對話框") //設(shè)置標題
.setIcon(R.mipmap.paidaixing)//設(shè)置圖標
.setMessage("是否同意?") //設(shè)置內(nèi)容
.setCancelable(true); //點擊對話框外部首妖,對話框關(guān)閉
//設(shè)置確定按鈕
builder.setPositiveButton("同意", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "已同意", Toast.LENGTH_SHORT).show();
}
});
//設(shè)置取消按鈕
builder.setNegativeButton("不同意", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "您不同意", Toast.LENGTH_SHORT).show();
}
});
//使用建造者創(chuàng)建對話框
AlertDialog dialog = builder.create();
dialog.show(); //顯示對話框
}
2.單選對話框
單選對話框效果圖
代碼實現(xiàn):
//單選對話框方法
private void single_dialog() {
//構(gòu)建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//設(shè)置屬性
builder.setIcon(R.mipmap.paidaixing)//設(shè)置圖標
.setTitle("選擇您的需求") //設(shè)置標題
.setCancelable(true); //點擊對話框外部,對話框關(guān)閉
//確定按鈕
builder.setPositiveButton("完成", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "已完成", Toast.LENGTH_SHORT).show();
}
});
//取消按鈕
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "已取消", Toast.LENGTH_SHORT).show();
}
});
//設(shè)置選項內(nèi)容
final String[] items = {"打滴","公交","騎行","徒步"};
//參數(shù)一 列表 參數(shù)二 默認選中下表 參數(shù)三 事件監(jiān)聽
builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "您的選擇為:"+items[i], Toast.LENGTH_SHORT).show();
}
});
//使用建造者創(chuàng)建對話框
AlertDialog dialog = builder.create();
dialog.show();//顯示對話框
}
3.多選對話框
多選對話框效果圖
代碼實現(xiàn):
//多選對話框方法
private void mulite_dialog() {
//定義選項
final String[] items = {"唱","跳","rap","籃球"};
//設(shè)置默認選中(true為選中)
final boolean[] flags = {true,true,true,true};
//構(gòu)建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//設(shè)置屬性
builder.setIcon(R.mipmap.paidaixing)//設(shè)置圖標
.setTitle("選擇您的興趣") //設(shè)置標題
.setPositiveButton("完成", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
for (int i = 0; i < flags.length; i++) {
if (flags[i]){
Toast.makeText(MainActivity.this, "您選擇了:"+items[i], Toast.LENGTH_SHORT).show();
}
}
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "您取消您??呢铣口?", Toast.LENGTH_SHORT).show();
}
});
//設(shè)置多選列表
//參數(shù)一 列表 參數(shù)二 默認選中下表 參數(shù)三 事件監(jiān)聽
builder.setMultiChoiceItems(items, flags, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
flags[i] = b;
}
});
//使用建造者創(chuàng)建對話框
AlertDialog dialog = builder.create();
dialog.show();//顯示對話框
}
4.簡單自定義對話框
效果圖
①自定義布局:custom_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image_View"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/sleep"/>
</LinearLayout>
②點擊彈出框或彈框外部關(guān)閉對話框彻亲,java代碼實現(xiàn):
//簡單自定義對話框
private void custom_dialog() {
//獲得視圖
View view = LayoutInflater.from(this).inflate(R.layout.custom_item, null);
ImageView image = view.findViewById(R.id.image_View);
//構(gòu)建者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//設(shè)置自定義布局
builder.setView(view);
//使用構(gòu)建者創(chuàng)建對話框
final AlertDialog dialog = builder.create();
dialog.show();//顯示對話框
//點擊彈框關(guān)閉對話框
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
}
5.水平精確進度條對話框
進度條對話框效果圖
代碼實現(xiàn):
//水平精確進度條
private void hor_progress_dialog() {
//1:實例化對象
final ProgressDialog dialog = new ProgressDialog(this);
//2:設(shè)置屬性
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設(shè)置水平樣式
dialog.setMax(100);//進度條最大值
dialog.setMessage("加載中...");//設(shè)置內(nèi)容
dialog.show();//顯示
//定時器模擬進度
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int progress = 0;
@Override
public void run() {
if (progress >= 100){
dialog.dismiss();//根據(jù)條件消失
timer.cancel();
}
dialog.setProgress(progress += 15);
}
},0,1000);//0秒后執(zhí)行,每隔1000毫秒執(zhí)行一次
}
6.日期選擇對話框
日期對話框效果圖 ps:Android版本不同顯示的樣式也不同
代碼實現(xiàn):
//日期選擇對話框DatePickerDialog
private void date_dialog() {
/**
* context 上下文
* listener 監(jiān)聽器
* year 默認的年
* month 默認的月
* dayOfMonth 默認的日
*/
Calendar calendar = Calendar.getInstance();//日歷對象
new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Toast.makeText(MainActivity.this, "當前日期:"+year+"-"+(month+1)+"-"+dayOfMonth, Toast.LENGTH_SHORT).show();
}
},calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();
}
7.時間選擇對話框
時間選擇對話框效果圖
代碼實現(xiàn):
//時間選擇對話框:TimePickerDialog
private void time_dialog() {
/**
* context 上下文
* listener 監(jiān)聽器
* hourOfDay 默認的時
* minute 默認的分鐘
* is24HourView 是否采用24時禁止
*/
Calendar calendar = Calendar.getInstance();//日歷對象
new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minute) {
Toast.makeText(MainActivity.this, "當前時間:"+hour+":"+minute, Toast.LENGTH_SHORT).show();
}
},calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),false).show();
}
二迹冤、自定義對話框
1.步驟
①.自定義類繼承Dialog
②.重寫Dialog的方法并添加需要的功能
③.在Activity中實例化自定義類的對象
效果圖
自定義對話框效果圖
2.代碼實現(xiàn):
①xml布局:自定義對話框的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<RelativeLayout
android:id="@+id/relative_layout"
android:layout_width="300dp"
android:layout_height="200dp"
android:gravity="center_horizontal">
<TextView
android:id="@+id/textView"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:gravity="center"
android:text="WARNING"
android:textColor="@android:color/holo_red_dark"
android:textSize="30dp" />
<TextView
android:id="@+id/textView1"
android:layout_width="200dp"
android:gravity="center"
android:layout_height="wrap_content"
android:layout_below="@id/textView"
android:layout_marginTop="25dp"
android:text="是否繼續(xù)訪問"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_id1"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:text="取消"
android:background="@android:color/holo_green_light"
android:textColor="@android:color/holo_red_light"
android:textSize="15sp"/>
<Button
android:id="@+id/btn_id2"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@id/btn_id1"
android:text="確定"
android:textSize="15sp"
android:background="@android:color/holo_red_light"
android:textColor="@android:color/holo_green_light"/>
</RelativeLayout>
</RelativeLayout>
②自定義類繼承Dialog
package com.bwie.androidthesecond;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
public class MyDialog extends Dialog {
private Button button1,button2; //確定和取消按鈕
private TextView textView1,textView2;//標題文本和消息文本
private String titleStr,messageStr; //外部設(shè)置的title文本和外部設(shè)置的消息文本
private String yesStr,noStr; //確定文本和取消文本的顯示內(nèi)容
private YesOnClickListener yesOnClickListener;//確定按鈕被點擊了的監(jiān)聽器
private NoOnClickListener noOnClickListener;//取消按鈕被點擊了的監(jiān)聽器
//定義接口
public interface NoOnClickListener{
void onNoClick();
}
//set方法
public void setNoOnClickListener(NoOnClickListener noOnClickListener) {
this.noOnClickListener = noOnClickListener;
}
//定義接口
public interface YesOnClickListener{
void onYesClick();
}
//set方法
public void setYesOnClickListener(YesOnClickListener yesOnClickListener){
this.yesOnClickListener = yesOnClickListener;
}
//onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom1_item);
//初始化界面控件
textView1 = findViewById(R.id.textView);
textView2 = findViewById(R.id.textView1);
button1 = findViewById(R.id.btn_id1);
button2 = findViewById(R.id.btn_id2);
//如果用戶自定了title和message
if (titleStr != null){
textView1.setText(titleStr);
}
if (messageStr != null){
textView2.setText(messageStr);
}
//如果設(shè)置按鈕文字
if (noStr != null){
button1.setText(noStr);
}
if (yesStr != null){
button2.setText(yesStr);
}
//取消按鈕
button1.setOnClickListener(new View.OnClickListener() {
//設(shè)置取消按鈕被點擊后匿垄,向外界提供監(jiān)聽
@Override
public void onClick(View view) {
if (noOnClickListener != null){
noOnClickListener.onNoClick();
dismiss();
}
}
});
//確定按鈕
button2.setOnClickListener(new View.OnClickListener() {
//設(shè)置確定按鈕被點擊后移宅,向外界提供監(jiān)聽
@Override
public void onClick(View view) {
if (yesOnClickListener != null){
yesOnClickListener.onYesClick();
dismiss();
}
}
});
}
//從外界Activity為Dialog設(shè)置標題
public void setNoStr(String no){
noStr = no;
}
public void setYesStr(String yes){
yesStr = yes;
}
public void setTitle(String title){
titleStr = title;
}
public void setMessageStr(String message){
messageStr = message;
}
public MyDialog(Context context) {
super(context);
//去掉默認的標題欄
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
}
③MainActivity代碼 完全自定義對話框方法:
//完全自定義對話框
private void all_custom_dialog() {
//創(chuàng)建對象
MyDialog myDialog = new MyDialog(this);
myDialog.setTitle("worning"); //設(shè)置標題
myDialog.setMessageStr("訪問風險"); //設(shè)置消息
myDialog.setNoStr("不OJBK");//設(shè)置取消按鈕的文本
//取消按鈕的監(jiān)聽
myDialog.setNoOnClickListener(new MyDialog.NoOnClickListener() {
@Override
public void onNoClick() {
Toast.makeText(MainActivity.this, "沒有OJBK", Toast.LENGTH_SHORT).show();
}
});
myDialog.setYesStr("OJBK");//設(shè)置確定按鈕的文本
//確定按鈕的監(jiān)聽
myDialog.setYesOnClickListener(new MyDialog.YesOnClickListener() {
@Override
public void onYesClick() {
Toast.makeText(MainActivity.this, "OJBK了", Toast.LENGTH_SHORT).show();
}
});
myDialog.show();//顯示對話框
}