How to make custom dialog with rounded corners in android

前端 未结 16 730
半阙折子戏
半阙折子戏 2020-11-28 02:15

What I am trying to do: I am trying to make a custom dialog in android With rounded corners.

What is happening: I am able to make c

相关标签:
16条回答
  • 2020-11-28 02:23

    For anyone who like do things in XML, specially in case where you are using Navigation architecture component actions in order to navigate to dialogs

    You can use:

    <style name="DialogStyle" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
    
        <!-- dialog_background is drawable shape with corner radius -->
        <item name="android:background">@drawable/dialog_background</item>
    
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>
    
    0 讨论(0)
  • 2020-11-28 02:24

    You can simply use MaterialAlertDialogBuilder to create custom dialog with rounded corners.

    First create a style for the material dialog like this :

    <style name="MyRounded.MaterialComponents.MaterialAlertDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
        <item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.App.CustomDialog.Rounded
        </item>
        <item name="colorSurface">@color/YOUR_COLOR</item>
    </style>
    
    <style name="ShapeAppearanceOverlay.App.CustomDialog.Rounded" parent="">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSize">10dp</item>
    </style>
    

    then create a Alert Dialog object in Java class like this :

    AlertDialog alertDialog =  new MaterialAlertDialogBuilder(this,R.style.MyRounded_MaterialComponents_MaterialAlertDialog)  // for fragment you can use getActivity() instead of this 
                        .setView(R.layout.custom_layout) // custom layout is here 
                        .show();
    
                final EditText editText = alertDialog.findViewById(R.id.custom_layout_text);   // access to text view of custom layout         
                Button btn = alertDialog.findViewById(R.id.custom_layout_btn);
    
                btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    
                        Log.d(TAG, "onClick: " + editText.getText().toString());
                    }
                });
    

    That's all you need to do.

    0 讨论(0)
  • 2020-11-28 02:26

    Setting

    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    

    will prevent dialog to cast a shadow.

    Solution is to use

    dialog.getWindow().setBackgroundDrawableResource(R.drawable.dialog_rounded_background);
    

    where is R.drawable.dialog_rounded_background

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item>
            <shape android:shape="rectangle" android:padding="10dp">
                <solid
                    android:color="@color/dialog_bg_color"/>
                <corners
                    android:radius="30dp" />
            </shape>
        </item>
    
    </layer-list>
    
    0 讨论(0)
  • 2020-11-28 02:29

    For API level >= 28 available attribute android:dialogCornerRadius . To support previous API versions need use

    <style name="RoundedDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
            <item name="android:windowBackground">@drawable/dialog_bg</item>
        </style>
    

    where dialog_bg.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item >
            <shape >
                <solid android:color="@android:color/transparent" />
            </shape>
        </item>
        <item
            android:left="16dp"
            android:right="16dp">
            <shape>
                <solid
                    android:color="@color/white"/>
                <corners
                    android:radius="8dp" />
    
                <padding
                    android:left="16dp"
                    android:right="16dp" />
            </shape>
        </item>
    </layer-list>
    
    0 讨论(0)
  • 2020-11-28 02:31

    I made a new way without having a background drawable is that make it have CardView as parent and give it a app:cardCornerRadius="20dp" and then add this in the java class dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    It's another way to make it .

    0 讨论(0)
  • 2020-11-28 02:33

    You can use the shape for the background as-

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/transparent"/>
    <corners android:radius="10dp" />
    <padding android:left="10dp" android:right="10dp"/>
    </shape>
    

    Have a look on this for the details.

    0 讨论(0)
提交回复
热议问题