美文网首页学习学习之鸿蒙&Android
Android 三种对话框的实现

Android 三种对话框的实现

作者: W会痛的石头 | 来源:发表于2021-05-25 19:37 被阅读0次

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

    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>
      
    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>
    

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

    相关文章

      网友评论

        本文标题:Android 三种对话框的实现

        本文链接:https://www.haomeiwen.com/subject/woiqsltx.html