对话框
普通对话框
创建普通对话框
public void alertDialog(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage("你确定退出吗");
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this,"取消",Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this,"确定",Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
单选对话框
创建单选对话框
public void singleChoiceDialog(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择你喜欢的明星");
String[] items = {"王家卫", "刘德华", "王渤", "肖战"};
//第一个参数是给用户选择的选项,第二个参数是默认选中哪个选项,第3个参数是点击事件监听
builder.setSingleChoiceItems(items, 3, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this,items[which],Toast.LENGTH_SHORT).show();
dialog.dismiss(); // 取消对话框
}
});
builder.show();
}
多选对话框
创建多选对话框
public void multiChoiceDialog(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择你喜欢的水果");
String[] items = {"香蕉","荔枝","苹果", "橘子","圣女果"};
boolean[] checked = new boolean[]{false, true, true, false, false};
//第一个参数是选项数组,第二个参数是代表选项是否被选中的boolean类型的数组,第3个参数是点击事件监听
builder.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
//which:哪个选项被选中
//isChecked:被选中的选项的状态
checked[which] = isChecked;
for (int i = 0; i < items.length; i++) {
if (checked[i]) {
System.out.println(items[i] + "被选中");
}
}
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
进度条对话框
创建进度条对话框
public void progressDialog(View view) {
ProgressDialog progressDialog = new ProgressDialog(this);
//设置当前的对话框样式为水平
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//给对话框设置标题
progressDialog.setTitle("正在玩命下载中");
//给对话框设置最大进度
progressDialog.setMax(100);
//显示对话框
progressDialog.show();
//开启线程更新下载进度
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
//进度条对话框可以在子线程更新进度
progressDialog.setProgress(i);
SystemClock.sleep(100);
}
}
}).start();
}
自定义对话框
1.设计自定义对话框样式–>dialog_layout.xml
public class MyDialog extends Dialog {
public MyDialog(@NonNull Context context) {
super(context);
//为对话框设置布局
setContentView(R.layout.dialog_layout);
//设置点击事件
findViewById(R.id.yes_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//退出
System.exit(0);
}
});
//设置点击事件
findViewById(R.id.no_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
}
}
dialog_layout.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"
android:background="@mipmap/dialog_bg"
android:gravity="center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="真的要退出吗?"
android:textSize="34sp"
android:textColor="#e61414"
android:textStyle="bold"
android:layout_marginTop="265dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="25dp">
<Button
android:id="@+id/yes_btn"
android:layout_width="120dp"
android:layout_height="50dp"
android:background="@mipmap/yes_btn"/>
<Button
android:id="@+id/no_btn"
android:layout_width="120dp"
android:layout_height="50dp"
android:background="@mipmap/no_btn"
android:layout_marginLeft="20dp"/>
</LinearLayout>
</LinearLayout>
2.设计style,去标题,去背景;
<style name="myDialog" parent="Theme.AppCompat.Dialog">
<!--窗口没有标题-->
<item name="windowNoTitle">true</item>
<!--没有背景-->
<item name="android:windowBackground">@android:color/transparent</item>
</style>
3.将第一步的布局应用到当前自定义对话框,同时设置style;
4.实例化对话框(参数1:环境上下文,参数2:第二步创建的),并展示show();
MyDialog dialog = new MyDialog(this,R.style.myDialog);
dialog.show();
PopupWindow
创建PopupWindow的步骤:
- 创建PopupWindow对象实例;
- 设置背景、注册事件监听器和添加动画;
- 显示PopupWindow;
创建弹出式对话框的代码
public void showPopupWindow(View view) {
//实例化对象
//将布局转换成java对象
View v = LayoutInflater.from(this).inflate(R.layout.popup_layout, null);
//参数1:用在弹窗中的View
//参数2、3:弹窗的宽高
//参数4:focusable:能否获取焦点
PopupWindow popupWindow = new PopupWindow(v, 190, 35, true);
//设置(背景、动画)
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//设置能响应外部的点击事件
popupWindow.setOutsideTouchable(true);
//设置能响应点击事件
popupWindow.setTouchable(true);
//创建动画资源,创建一个style应用动画资源 对当前弹窗的动画风格设置为第二部的资源索引
popupWindow.setAnimationStyle(R.style.translate_anim);
//显示
//参数1(anchor):锚
//参数2、3:相对于锚在x、y方向上的偏移量
popupWindow.showAsDropDown(view,100, 50);
//为弹窗中的文本添加点击事件
v.findViewById(R.id.choose).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "您点击了选择", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
}
});
v.findViewById(R.id.choose_all).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "您点击了选择所有", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
}
});
v.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "您点击了选择复制", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
}
});
}
在styles.xml文件中声明了如下的样式:
<style name="translate_anim">
<!--窗体进入动画-->
<item name="android:windowEnterAnimation">@anim/translate</item>
</style>
这个样式指向的是一个动画样式文件translate.xml,需要在res目录下创建anim目录,然后再创建translate.xml文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="300"
android:toYDelta="0"
android:duration="2000"
></translate>
</set>
popup_layout.xml文件,弹出对话框的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00ffff"
android:padding="2dp">
<TextView
android:id="@+id/choose"
android:layout_width="60dp"
android:layout_height="30dp"
android:text="选择"
android:textColor="#ffffff"
android:gravity="center"
android:background="#000000"/>
<View
android:layout_width="2dp"
android:layout_height="30dp"
android:background="#00ffff" />
<TextView
android:id="@+id/choose_all"
android:layout_width="60dp"
android:layout_height="30dp"
android:text="全选"
android:textColor="#ffffff"
android:gravity="center"
android:background="#000000"/>
<View
android:layout_width="2dp"
android:layout_height="30dp"
android:background="#00ffff" />
<TextView
android:id="@+id/copy"
android:layout_width="60dp"
android:layout_height="30dp"
android:text="复制"
android:textColor="#ffffff"
android:gravity="center"
android:background="#000000"/>
</LinearLayout>