自定义Dialog并设置圆角和宽高

效果图:

自定义圆角布局样式:

drawable/bg_dialog_transfer

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="@color/white" />
    <corners android:radius="10dp" />
</shape>

主布局的引用

R.layout.dialog_transfer
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginHorizontal="60dp"
    android:background="@drawable/bg_dialog_transfer"
    android:paddingBottom="20dp">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:paddingVertical="14dp"
        android:text="转移确认"
        android:textStyle="bold"
        android:textColor="@color/color_0B0B0B"
        android:textSize="14sp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/divide_line"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/divide_color"
        app:layout_constraintTop_toBottomOf="@id/tv_title" />

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingHorizontal="18dp"
        android:paddingTop="20dp"
        android:text="品牌卡余额转移目前只支持单向,转移成功后不可转回原品牌卡。"
        android:textColor="@color/color_0B0B0B"
        android:textSize="12sp"
        app:layout_constraintTop_toBottomOf="@id/divide_line" />

    <TextView
        android:id="@+id/tv_cancle"
        android:layout_width="80dp"
        android:layout_height="30dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/bg_cancel"
        android:gravity="center"
        android:paddingHorizontal="20dp"
        android:text="取消"
        android:textColor="#8E8E8E"
        android:textSize="@dimen/sp_12"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/tv_sure"
        app:layout_constraintTop_toBottomOf="@id/tv_content" />

    <TextView
        android:id="@+id/tv_sure"
        android:layout_width="80dp"
        android:layout_height="30dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/applyagent_selector"
        android:gravity="center"
        android:text="确认转移"
        android:textColor="@color/white"
        android:textSize="@dimen/sp_12"
        app:layout_constraintLeft_toRightOf="@id/tv_cancle"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/tv_content" />
</android.support.constraint.ConstraintLayout>

在代码中调用:

private void showDialog(){
        if(dialogTransfer == null){
            dialogTransfer = new Dialog(this);
        }
        View view = LayoutInflater.from(this).inflate(R.layout.dialog_transfer, null);
        TextView title = view.findViewById(R.id.tv_title);
        TextView content = view.findViewById(R.id.tv_content);
        TextView sure = view.findViewById(R.id.tv_sure);
        TextView cancle = view.findViewById(R.id.tv_cancle);
        title.setText("转移确认");
        content.setText("品牌卡余额转移目前只支持单向,转移成功后不可转回原品牌卡。");
        sure.setText("确认转移");
        sure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialogTransfer.dismiss();
            }
        });
        cancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialogTransfer.dismiss();
            }
        });

        dialogTransfer.setCanceledOnTouchOutside(false);//设置点击透明背景不取消
        dialogTransfer.setContentView(view);
        dialogTransfer.show();

        Window window = dialogTransfer.getWindow();
        WindowManager windowManager = getWindowManager();
        Display d = windowManager.getDefaultDisplay(); // 获取屏幕宽、高度
        WindowManager.LayoutParams attributes = window.getAttributes();

        Point point = new Point();
        d.getSize(point);// 获取屏幕宽、高度到point中
        attributes.width = (int) (point.x * 0.65);//设置宽度占屏幕宽度的0.65倍
        window.setAttributes(attributes);
        window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }

注意:必须在调用show()方法之后再设置Dialog的宽度、高度才有效!!!

          设置圆角时,必须设置window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

参考于:https://blog.csdn.net/ytfunnysite/article/details/79272055?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

https://www.jianshu.com/p/03d0f85b6f18

https://www.jianshu.com/p/25272f045d78

https://blog.csdn.net/u010904027/article/details/53535590?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

猜你喜欢

转载自blog.csdn.net/Snow_Ice_Yang/article/details/117553828