直播间源码自定义dialog弹窗样式

系统自带的dialog并不能满足所有的项目需求,这时想要独一无二的弹窗就需要自定义自己的样式了。
1.创建类继承自dialog;

abstract class CustomDialog extends Dialog {
        private Button sure,cancel;
        private int layout;//需要加载的布局
        private boolean TouchOutside;//是否可以点击弹窗之外的区域关闭弹窗
        private double width, height;//弹窗的宽高
        public CustomDialog(@NonNull Context context,int layout,boolean TouchOutside,double width ,double height) {
            super(context,layout);
            this.layout = layout;
            this.TouchOutside = TouchOutside;
            this.width = width;
            this.height = height;
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            requestWindowFeature(Window.FEATURE_NO_TITLE);

            //去除局部背景
            Window window = getWindow();
            window.setBackgroundDrawableResource(R.color.transparent);//透明背景
            View decorView = window.getDecorView();      //隐藏虚拟按键全屏显示,此段为项目需要,大家可以删除
            decorView.setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
            setContentView(layout);

            sure = findViewById(R.id.sure);
            cancel = findViewById(R.id.cancel);

            //设置dialog大小
            WindowManager manager = getWindowManager();
            Display display = manager.getDefaultDisplay();
            WindowManager.LayoutParams params = getWindow().getAttributes();
            params.dimAmount = 0.42f;//设置背景有蒙版灰一点
            params.width = (int) (display.getWidth() * width);//设置长
            params.height = (int) (display.getHeight() * height);//设置宽
            getWindow().setAttributes(params);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);//此处为必须,否则蒙版不生效

            setCanceledOnTouchOutside(TouchOutside);//点击外部消失

            sure.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    do_sure();
                }
            });

            cancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    dismiss();
                }
            });

        }

        public abstract void do_sure();
    }

其中params.dimAmount = 0.42f;是为了设置背景有蒙版,灰一点,突出弹窗;必须加上getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);否则不会生效;
定义为抽象类的原因是:在需要创建的地方可以直接实现确定按钮的点击事件,这个类可以实现多种不同的布局,实现另一个弹窗不用再编写新的类;(但是要是你另一个弹窗没有确定按钮与取消按钮,那就当我没说)
2.创建dialog的布局;

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF">

    <TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提示"
        android:textColor="@color/red"
        android:textSize="36sp"
        android:textStyle="bold"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"/>

    <TextView
        android:layout_below="@id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="确认交班?"
        android:textSize="26sp"
        android:textColor="@color/text_color_smallblack"/>

    <Button
        android:id="@+id/sure"
        android:layout_width="120dp"
        android:layout_height="66dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="16dp"
        android:background="@drawable/button_bg_blue2"
        android:text="确定"
        android:textSize="26sp"
        android:textColor="#FFFFFF"/>

    <Button
        android:id="@+id/cancel"
        android:layout_width="120dp"
        android:layout_height="66dp"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@id/sure"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="16dp"
        android:background="@drawable/button_bg_black"
        android:text="取消"
        android:textSize="26sp"
        android:textColor="#FFFFFF"/>

</RelativeLayout>

3.在需要弹窗的地方创建该类即可;

  CustomDialog dialog = new CustomDialog(this, R.layout.logout_dialog,true,0.45,0.33) {
                    @Override
                    public void do_sure() {
                        Intent intent = new Intent(FragmentActivity.this,secondActivity.class);
                        startActivity(intent);
                    }
                };
                dialog.show();

其中0.45的意思为:弹窗的宽度 = 屏幕宽度*0.45;
0.33的意思为:弹窗的高度 = 屏幕的高度 * 0.33;
do_sure方法为确定按钮的点击事件,本处点击后进行Activity跳转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值