先简单介绍一下三种对话框的区别:
AlertDialog : Dialog继承Object,异步调用,不会阻塞UI线程。
Popupwindow:popupwindow是阻塞式对话框,dialog弹出时 后台还可以进行很多的操 作,而popupwindow弹出是 后台进程是阻塞的,要一直等待popupwindow 消失 才会进行操作。
BottomSheetDialog:一个自定义的从底部滑入的对话框。
一、AlertDialog 的使用:
setTitle :为对话框设置标题
setIcon :为对话框设置图标
setMessage:为对话框设置内容
setView : 给对话框设置自定义样式
setItems :设置对话框要显示的一个list,一般用于显示几个命令时
setMultiChoiceItems :用来设置对话框显示一系列的复选框
setSingleChoiceItems :用来设置对话框显示一系列的单选框
setNeutralButton :普通按钮
setPositiveButton :给对话框添加"Yes"按钮
setNegativeButton :对话框添加"No"按钮
create : 创建对话框
show :显示对话框
- 有多个按钮
setPositiveButton 设置一个确定按钮
setNegativeButton 设置一个取消按钮
setNeutralButton 设置一个普通按钮
AlertDialog alertDialog2 = new AlertDialog.Builder(this)
.setTitle("这是标题")
.setMessage("有多个按钮")
.setIcon(R.mipmap.ic_launcher)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(AlertDialogActivity.this, "这是确定按钮", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(AlertDialogActivity.this, "这是取消按钮", Toast.LENGTH_SHORT).show();
}
})
.setNeutralButton("普通按钮", new DialogInterface.OnClickListener() {//添加普通按钮
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(AlertDialogActivity.this, "这是普通按钮按钮", Toast.LENGTH_SHORT).show();
}
})
. create();
alertDialog2.show();
image.png
-
自定义View
View view_dialog= View.inflate(this, R.layout.activity_alter_dialog_setview, null); AlertDialog dialog = new AlertDialog.Builder(this, R.style.TransparentDialog).create(); dialog.show(); // 设置点击可取消 dialog.setCancelable(true); // 获取Window对象 Window window = dialog.getWindow(); // 设置对话框的大小 android.view.WindowManager.LayoutParams layoutParams = dialog.getWindow().getAttributes(); DisplayMetrics dm = getResources().getDisplayMetrics(); //获取该弹窗的参数值 int displayWidth = dm.widthPixels; int displayHeight = dm.heightPixels; layoutParams.width = (int) (displayWidth * 0.8); //宽度设置为屏幕的0.8 dialog.getWindow().setAttributes(layoutParams); window.setContentView(view_dialog);
定义AlertDialog透明样式
<style name="TransparentDialog" parent="Theme.AppCompat.Dialog"> <item name="android:windowBackground">@color/transparent</item> </style>
colors.xml
<color name="transparent">#00000000</color>
二、Popupwindow的使用:
View inflate = LayoutInflater.from(context).inflate(R.layout.house_share_popupwindow, null);
popupWindow = new PopupWindow(inflate, LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
//设置点击弹窗外隐藏自身
popupWindow.setFocusable(true);
popupWindow.setOutsideTouchable(true);
//设置位置
popupWindow.showAtLocation(inflate, Gravity.BOTTOM, 0, 0);
//设置PopupWindow的View点击事件
TextView mTvWx = inflate.findViewById(R.id.tv_wx);
TextView mTvPyq = inflate.findViewById(R.id.tv_pyq);
布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="分享至"
android:textColor="@color/black"
android:padding="@dimen/dp_10"
android:textSize="@dimen/sp_18" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_wx"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableTop="@drawable/icon_weixin"
android:gravity="center"
android:text="微信好友"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_pyq"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableTop="@drawable/icon_pyq"
android:gravity="center"
android:text="微信朋友圈"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_qq"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableTop="@drawable/icon_qq"
android:gravity="center"
android:text="QQ"
android:visibility="gone"
android:textSize="12sp" />
</LinearLayout>
<Button
android:id="@+id/bt_cancel_share"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="取消分享"
android:textColor="@color/gray_666666"
android:textSize="@dimen/sp_18"
android:padding="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/actionsheet_bottom_selector"
/>
</LinearLayout>
image.png
三、BottomSheetDialog的使用
BottomSheetDialog的使用非常简单,几行代码就搞定!
BottomSheetDialog bottomSheet = new BottomSheetDialog(this);//实例化
bottomSheet.setCancelable(true);//设置点击外部是否可以取消
bottomSheet.setContentView(R.layout.activity_layout_1);//设置对框框中的布局
bottomSheet.show();//显示弹窗 }
带圆角的弹窗,首先要设置透明背景
BottomSheetDialog bottomSheet = new BottomSheetDialog(this,R.style.BottomSheetDialog);
<style name="BottomSheetDialog" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/bottomSheetStyleWrapper</item>
</style>
<style name="bottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@android:color/transparent</item>
</style>
colors.xml
<color name="transparent">#00000000</color>
在根布局的view上设置background
android:background="@drawable/shape_sheet_dialog_bg"
shape_sheet_dialog_bg
<xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:topLeftRadius="@dimen/dp_15"
android:topRightRadius="@dimen/dp_15"/>
<solid android:color="@color/white" />
< /shape>
好了,三种对话框的简单使用就已经结束了,底部弹窗的方式我还是推荐第三种,毕竟简单方便。
网友评论