Android 自定义对话框角半径

Ash*_*ngh 1 java android android-layout android-dialogfragment

我正在我的 Android 应用程序中填充自定义对话框。对话框的布局是这样的:

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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:id="@+id/parent"
    app:cardBackgroundColor="@android:color/white"
    app:cardCornerRadius="15dp"
    app:cardElevation="3dp">
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:id="@+id/interior_layout"
        android:orientation="vertical">
        
        <ImageView
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:scaleType="centerCrop"
            android:adjustViewBounds="true"
            android:layout_gravity="center_horizontal"
            android:visibility="gone"
            android:id="@+id/imageView"/>
        
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/message"
            android:textSize="14sp"
            android:textColor="@android:color/black"
            android:visibility="gone"
            android:layout_marginTop="10dp"
            android:text="Hello"
            android:layout_gravity="center_horizontal"/>
        
    </LinearLayout>

</androidx.cardview.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

这是我用来膨胀对话框的代码:

        Dialog alertDialog  = new Dialog(activity);
        alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialogView = LayoutInflater.from(activity).inflate(R.layout.layout_progress_dialog, null);
        alertDialog.setContentView(dialogView);
        Objects.requireNonNull(alertDialog.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Run Code Online (Sandbox Code Playgroud)

但是,未设置拐角半径。边角依然很锋利。我尝试使用警报对话框,但我遇到了它覆盖整个宽度的问题(就像进度对话框一样)。使用 Dialog,我可以根据需要获得宽度。

Gab*_*tti 7

您不需要 aCardView来获取角半径。

只需使用以下getTheme方法:

class RoundedDialog: DialogFragment() {

    override fun getTheme() = R.style.RoundedCornersDialog
    
    override fun onCreateView(...): View? {
       val v: View = inflater.inflate(R.layout...., container, false)
       return v
    }

    //...
}
Run Code Online (Sandbox Code Playgroud)

和:

<style name="RoundedCornersDialog" parent="@style/Theme.MaterialComponents.Dialog">
        <item name="dialogCornerRadius">16dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果您想使用 a,AlertDialog您可以在onCreateDialog. 检查此答案以获取更多详细信息