【Android】怎么把一个自定义Dialog弄成一个圆形的

需求

自定义一个Dialog,做成圆形

实现

在这里插入图片描述

实现步骤:

创建XML布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#00E2E3E5"
    android:orientation="vertical">

   //右上角的 X 
    <TextView
        android:layout_width="@dimen/dp_40"
        android:layout_height="@dimen/dp_40"
        android:layout_gravity="end"
        android:background="@drawable/baseline_close_24" />

    //使用CardView实现一个圆形,或者使用 shape 也可以实现圆形
    <androidx.cardview.widget.CardView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:layout_marginTop="-30dp"
        app:cardBackgroundColor="#FFFFFF"
        app:cardCornerRadius="100dp"
        app:cardElevation="0dp"
        app:cardMaxElevation="0dp">

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:layout_marginBottom="@dimen/dp_20"
            android:background="@drawable/baseline_rate_24" />

    </androidx.cardview.widget.CardView>

</LinearLayout>

使用自定义的布局文件创建 Dialog

public class RateMeasureDialog extends Dialog {
    
    

    public RateMeasureDialog(@NonNull Context context) {
    
    
        super(context);
    }

    @SuppressLint({
    
    "MissingInflatedId", "ResourceType"})
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_rate_measure);

        //设置周边区域不能点击
        setCancelable(false);

        //设置Dialog页面背景为透明(默认是白色的)
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        //自定义Dialog
        WindowManager m = getWindow().getWindowManager();
        Display d = m.getDefaultDisplay();
        WindowManager.LayoutParams p = getWindow().getAttributes();
        Point size = new Point();
        d.getSize(size);
        p.width = WindowManager.LayoutParams.WRAP_CONTENT;
        p.height = WindowManager.LayoutParams.WRAP_CONTENT;
        p.alpha = 1.0f;
        p.gravity = Gravity.CENTER;
        getWindow().setAttributes(p);

    }
}

猜你喜欢

转载自blog.csdn.net/qq_43358469/article/details/131308811