所有的对话框
对应的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Main2Activity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="pont"
android:textAllCaps="false"
android:text="普通对话框a"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="dan"
android:text="单选对话框"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="duo"
android:text="多选对话框"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="nins"
android:text="自定义对话框"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="dat"
android:text="日期对话框"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="times"
android:text="时间对话框"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="zdy"
android:text="自定义对话框2"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="zdy2"
android:text="自定义对话框3"/>
</LinearLayout>
对应的java代码
package com.example.day01;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;
import java.util.Calendar;
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
public void pont(View view) {//创建普通按钮的点击方法
AlertDialog.Builder builder = new AlertDialog.Builder(this);//创建一个普通的对话框
builder.setIcon(R.mipmap.ic_launcher_round);//设置图标
builder.setTitle("对话框");
builder.setMessage("信息");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {//设置按钮
Toast.makeText(Main2Activity.this, "点击了确认按钮", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(Main2Activity.this, "点击了取消按钮", Toast.LENGTH_SHORT).show();
}
});
AlertDialog alertDialog = builder.create();//创建对应的一个对话框
alertDialog.show();//展示对话框
}
public void dan(View view) {//设置单选的按钮的点击方法
AlertDialog.Builder builder = new AlertDialog.Builder(this);//创建一个普通的对话框
builder.setIcon(R.mipmap.ic_launcher_round);//设置图标
builder.setTitle("这是标题");
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {//设置按钮
Toast.makeText(Main2Activity.this, "点击了取消", Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(Main2Activity.this, "点击了确定", Toast.LENGTH_SHORT).show();
}
});
final String[] items = {"北京","南京","天津"};//创建一个将要填充的数组
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {//让数据填充进对话框中,并监听选中的是什么
Toast.makeText(Main2Activity.this, "您选中的是"+items[which], Toast.LENGTH_SHORT).show();
}
});
builder.show();//展示这个对话框
}
public void nins(View view) {//设置自定义的按钮的点击方法
AlertDialog.Builder builder = new AlertDialog.Builder(this);//创建一个普通的对话框
builder.setView(R.layout.lianxi_layout);//为这个对话框设置布局
builder.show();//展示对话框
}
public void duo(View view) {//设置多选的按钮的点击方法
AlertDialog.Builder builder = new AlertDialog.Builder(this);//创建一个普通的对话框
builder.setTitle("这是标题");//设置标题
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {//设置按钮
Toast.makeText(Main2Activity.this, "点击了取消", Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(Main2Activity.this, "点击了确定", Toast.LENGTH_SHORT).show();
}
});
String[] strings = {"北京","南京","天津"};//创建这个多选框要填充的数组
final boolean[] booleans = {false,false,true};//创建用来判断是否选中的布尔数组
builder.setMultiChoiceItems(strings, booleans, new DialogInterface.OnMultiChoiceClickListener() {//为对话框填充数据
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
booleans[which] = isChecked;//更改是否选中
}
});
builder.show();//展示对话框
}
public void dat(View view) {
Calendar instance = Calendar.getInstance();//获取当前的时间
new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {//创建一个日期对话框
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {//为日期对话框填充数据
Toast.makeText(Main2Activity.this, year+"-"+(month-1)+"-"+dayOfMonth, Toast.LENGTH_SHORT).show();//吐司选中的日期
}
},instance.get(Calendar.YEAR),instance.get(Calendar.MONTH),instance.get(Calendar.DATE)).show();//从当前时间中获取对应的日期
}
public void times(View view) {
Calendar instance = Calendar.getInstance();//获取当前的时间
new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {//创建一个时间对话框
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {//为时间对话框填充数据
Toast.makeText(Main2Activity.this, hourOfDay+":"+minute, Toast.LENGTH_SHORT).show();//吐司选中的时间
}
},instance.get(Calendar.HOUR),instance.get(Calendar.MINUTE),true).show();//从当前时间中获取对应的时间
}
public void zdy(View view) {
final DialogActivity dialogActivity = new DialogActivity(Main2Activity.this);//通过自己编写的一个自定义的对话框创建出一个以那个对话框为样式的对话框
dialogActivity.setTitle("这是更改后的标题");//对其数据进行更改
dialogActivity.setMessage("这是更改后的内容文本");
dialogActivity.setNoOnclickListener("点我", new DialogActivity.onNoOnclickListener() {//获取那个对话框中的点击方法,并更改其数据和获取对应的监听事件
@Override
public void onNoClick() {
Toast.makeText(Main2Activity.this, "这就是自定义", Toast.LENGTH_SHORT).show();//当点击时,吐司
dialogActivity.cancel();//关闭对话框
}
});
dialogActivity.show();//展示对话框
}
public void zdy2(View view) {
final Main3Activity main3Activity = new Main3Activity(Main2Activity.this);//通过自己编写的一个自定义的对话框创建出一个以那个对话框为样式的对话框
main3Activity.setTitle("警告警告");//对其数据进行更改
main3Activity.setMessage("重申重申再重申\n注意眼睛");
main3Activity.setOnYesOnclickListener("这是确定按钮", new Main3Activity.onYesOnclickListener() {
@Override
public void onYesClick() {//获取那个对话框中的点击方法,并更改其数据和获取对应的监听事件
Toast.makeText(Main2Activity.this, "确定了", Toast.LENGTH_SHORT).show();
main3Activity.cancel();//关闭对话框
}
});
main3Activity.setOnNoOnclickListener("这是取消按钮", new Main3Activity.onNoOnclickListener() {
@Override
public void onNoClick() {//获取那个对话框中的点击方法,并更改其数据和获取对应的监听事件
Toast.makeText(Main2Activity.this, "取消了", Toast.LENGTH_SHORT).show();
main3Activity.cancel();//关闭对话框
}
});
main3Activity.show();//展示对话框
}
}
难点
自定义对话框
对话框的java逻辑代码
package com.example.day01;
import android.app.Dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
//将这一个类作为自定义的一个对话框进行编写
public class DialogActivity extends Dialog {
private TextView title;
private TextView message;
private Button no;
private Button yes;
private String titleStr;
private String messageStr;
private String yesStr, noStr;
private onYesOnclickListener onYesOnclick;
private onNoOnclickListener onNoClick;
//进行设置该运行的内容的上下文
public DialogActivity (@NonNull Context context){
super(context);
//设置请求的页面大小
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
//创建让两个按钮可调用的方法
public void setNoOnclickListener(String str, onNoOnclickListener onNoOnclickListener) {
if (str != null) {//判断传输过来的值是否是空
noStr = str;
}
this.onNoClick = onNoOnclickListener;//获取到传输过来的对应监听器
}
public void setYesOnclickListener(String str, onYesOnclickListener yesOnclickListener) {
if (str != null) {
yesStr = str;
}
this.onYesOnclick = yesOnclickListener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);//获取对应的一个对话窗的样式
setCanceledOnTouchOutside(false);//设置除了对话框点击按钮外无法关闭
title = (TextView) findViewById(R.id.title);//进行初始化
message = (TextView) findViewById(R.id.message);
no = (Button) findViewById(R.id.no);
yes = (Button) findViewById(R.id.yes);
intidata();//对初始化后的数据进行判断,是否更换其文本的数据
intead();//内部存放有两个按钮的监听事件
}
private void intead() {
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onYesOnclick != null) {
onYesOnclick.onYesOnclick();//当此方法被调用的时候,让对应的本类方法也使用这个方法
}
}
});
//设置取消按钮被点击后,向外界提供监听
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onNoClick != null) {
onNoClick.onNoClick();
}
}
});
}
private void intidata() {//供这个自定义的方法更新数据
if (titleStr != null) {
title.setText(titleStr);
}
if (messageStr != null) {
message.setText(messageStr);
}
if(yesStr !=null){
yes.setText(yesStr);
}
if(noStr != null){
no.setText(noStr);
}
}
public void setTitle(String title) {//设置set方法,让对应的数据方便传入
titleStr = title;
}//获取实现这个类传输过来的数据
public void setMessage(String message) {
messageStr = message;
}
public interface onNoOnclickListener {//定义初始接口,让这个监听器和调用这个自定义对话框的类连接起来
public void onNoClick();
}
public interface onYesOnclickListener {
public void onYesOnclick();
}
}
对话框的对应布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DialogActivity">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#11ffffff">
<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:text="警告"
android:textColor="#38ADFF"
android:textSize="16sp"/>
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:layout_gravity="center"
android:text="保护视力,少玩手机"/>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="15dp"
android:background="#E4E4E4"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal">
<Button
android:id="@+id/no"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="10dp"
android:background="@null"
android:gravity="center"
android:lines="1"
android:text="取消"
android:textColor="#7D7D7D"
android:textSize="16sp"/>
<View
android:layout_width="1px"
android:layout_height="match_parent"
android:background="#E4E4E4"/>
<Button
android:id="@+id/yes"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:background="@null"
android:gravity="center"
android:lines="1"
android:text="确定"
android:textColor="#38ADFF"
android:textSize="16sp"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>