学习学习之鸿蒙&Android

Android 三种对话框的实现

2021-05-25  本文已影响0人  W会痛的石头

先简单介绍一下三种对话框的区别:

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 :显示对话框

 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 image.png
二、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>

好了,三种对话框的简单使用就已经结束了,底部弹窗的方式我还是推荐第三种,毕竟简单方便。

上一篇下一篇

猜你喜欢

热点阅读