对话框
普通的对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher_background);
builder.setTitle("hello body");
builder.setMessage("先生女士们大家好");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {创建点击按钮
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你点击了确认按钮", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你点击了取消按钮", Toast.LENGTH_SHORT).show();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
单选对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher_background);
builder.setTitle("请选择您的出生地");
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();
}
});
final String[] items = {"北京","成都","西安"};//自定义数组
builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {//单选对话框的特有属性
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(Main2Activity.this, "您选中的城市是"+items[which], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
多选对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
String[] items = {"中国","日本","韩国","美国"};
final boolean[] flasgs = {true,true,false,false};//便于判断是否是选中状态
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher_background);
builder.setTitle("下列哪些地区是中国的");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(Main3Activity.this, "您点击了确认按钮", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(Main3Activity.this, "您点击了取消按钮", Toast.LENGTH_SHORT).show();
}
});
builder.setMultiChoiceItems(items, flasgs, new DialogInterface.OnMultiChoiceClickListener() {//多选对话框的特有属性
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
flasgs[which] = isChecked;
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
自定义对话框
java的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(R.layout.style_layout);//使用自定义布局,让对话框呈现出对应的布局
AlertDialog alertDialog = builder.create();
alertDialog.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:orientation="vertical"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一张图片"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/img1"/>
</LinearLayout>
带有水平进度条的对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main5);
final ProgressDialog dialog = new ProgressDialog(this);//这个是带有进度条的对话框
dialog.setMessage("正在下载");
dialog.setMax(100);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条的样式
dialog.show();
final Timer timer = new Timer();//设置计时器
timer.schedule(new TimerTask() {
int progress = 0;
@Override
public void run() {
if(progress == 100){//循环停止时
dialog.dismiss();
timer.cancel();//结束对话框
}
dialog.setProgress(progress+=1);
}
},0,100);
}
带有环形进度条的对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main6);
final ProgressDialog dialog = new ProgressDialog(this);//这个是带有进度条的对话框
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//设置进度条的样式
dialog.setMax(100);
dialog.setMessage("正在下载");
dialog.show();
final Timer timer = new Timer();//设置记时器
timer.schedule(new TimerTask() {
int progress = 0;
@Override
public void run() {
if(progress == 100) {//循环停止的时候
dialog.dismiss();
timer.cancel();//结束这个对话框
}
dialog.setProgress(progress+=1);
}
},0,100);
}
可选择日期的对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main7);
Calendar instance = Calendar.getInstance();//获取当前时间
new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {//创建匿名内部类的日期对话框
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Toast.makeText(Main7Activity.this, year+"-"+(month+1)+"-"+dayOfMonth, Toast.LENGTH_SHORT).show();//吐司,提示选中的时间
}
},instance.get(Calendar.YEAR),instance.get(Calendar.MARCH),instance.get(Calendar.DAY_OF_MONTH)).show();//将获取的当前时间存入到这个对话框中
}
可选择时间的对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main8);
Calendar instance = Calendar.getInstance();//获取当前时间
new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {//创建匿名内部类的日期对话框
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(Main8Activity.this, "选中的时间是"+hourOfDay+":"+minute, Toast.LENGTH_SHORT).show();//吐司,提示选中的时间
}
},instance.get(Calendar.HOUR),instance.get(Calendar.MINUTE),true).show();//将获取的当前时间存入到这个对话框中
}
自定义的对话框
创建一个自定义的对话框类,提供对应如何更改的方法
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"?>
<RelativeLayout 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=".Main3Activity">
<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#95FF0000"
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="#651FFF"
android:textSize="16sp"/>
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="28dp"
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="#000000"
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="#651FFF"
android:textSize="16sp"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>