How to use and style new AlertDialog from appCompat 22.1 and above

前端 未结 6 1448
北荒
北荒 2020-11-27 08:59

I am trying to migrate from default android AlertDialog to the new one included in appCompat-22.1 So far I understand you only have to import android.sup

相关标签:
6条回答
  • 2020-11-27 09:33

    If you want to use the new android.support.v7.app.AlertDialog and have different colors for the buttons and also have a custom layout then have a look at my https://gist.github.com/JoachimR/6bfbc175d5c8116d411e

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
    
        View v = inflater.inflate(R.layout.custom_layout, null);
    
        initDialogUi(v);
    
        final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
                .setTitle(getString(R.string.some_dialog_title))
                .setCancelable(true)
                .setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                doSomething();
                                dismiss();
                            }
                        })
                .setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dismiss();
                            }
                        })
                .setView(v)
                .create();
    
        // change color of positive button         
        d.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
                b.setTextColor(getResources().getColor(R.color.colorPrimary));
            }
        });
    
        return d;
    }
    

    0 讨论(0)
  • 2020-11-27 09:34

    To use a theme for all the application, and don't use the second parameter to style your Dialog

    <style name="MyTheme" parent="Base.Theme.AppCompat.Light">
        <item name="alertDialogTheme">@style/dialog</item>
        <item name="colorAccent">@color/accent</item>
    </style>
    
    <style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">@color/accent</item>
    </style>
    

    On my app using a color accent in theme don't show the alertDialog's buttons with the theme colorAccent I have to add a dialog style in the theme.

    0 讨论(0)
  • 2020-11-27 09:36

    Follow @reVerse answer but in my case, I already had some property in my AppTheme like

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:textColor">#111</item>
        <item name="android:textSize">13sp</item>
    </style>
    

    So my dialog will look like

    I solved it by

    1) Change the import from android.app.AlertDialog to android.support.v7.app.AlertDialog
    2) I override 2 property in AppTheme with null value

    <style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <!-- Used for the buttons -->
        <item name="colorAccent">#FFC107</item>
        <!-- Used for the title and text -->
        <item name="android:textColorPrimary">#FFFFFF</item>
        <!-- Used for the background -->
        <item name="android:background">#4CAF50</item>
    
    
        <item name="android:textColor">@null</item>
        <item name="android:textSize">@null</item>
    </style>
    

    .

    AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);
    

    Hope it help another people

    0 讨论(0)
  • 2020-11-27 09:41
        <item name="editTextColor">@color/white</item>
        <item name="android:textColor">@color/white</item>
        <item name="android:textColorHint">@color/gray</item>
        <item name="android:textColorPrimary">@color/gray</item>
        <item name="colorControlNormal">@color/gray</item>
        <item name="colorControlActivated">@color/white</item>
        <item name="colorControlHighlight">#30FFFFFF</item>
    
    0 讨论(0)
  • 2020-11-27 09:46

    When creating the AlertDialog you can set a theme to use.

    Example - Creating the Dialog

    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
    builder.setTitle("AppCompatDialog");
    builder.setMessage("Lorem ipsum dolor...");
    builder.setPositiveButton("OK", null);
    builder.setNegativeButton("Cancel", null);
    builder.show();
    

    styles.xml - Custom style

    <style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <!-- Used for the buttons -->
        <item name="colorAccent">#FFC107</item>
        <!-- Used for the title and text -->
        <item name="android:textColorPrimary">#FFFFFF</item>
        <!-- Used for the background -->
        <item name="android:background">#4CAF50</item>
    </style>
    

    Result

    styled alertdialog

    Edit

    In order to change the Appearance of the Title, you can do the following. First add a new style:

    <style name="MyTitleTextStyle">
        <item name="android:textColor">#FFEB3B</item>
        <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
    </style>
    

    afterwards simply reference this style in your MyAlertDialogStyle:

    <style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        ...
        <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
    </style>
    

    This way you can define a different textColor for the message via android:textColorPrimary and a different for the title via the style.

    0 讨论(0)
  • 2020-11-27 09:51

    If you're like me you just want to modify some of the colors in AppCompat, and the only color you need to uniquely change in the dialog is the background. Then all you need to do is set a color for colorBackgroundFloating.

    Here's my basic theme that simply modifies some colors with no nested themes:

        <style name="AppTheme" parent="Theme.AppCompat">
            <item name="colorPrimary">@color/theme_colorPrimary</item>
            <item name="colorPrimaryDark">@color/theme_colorPrimaryDark</item>
            <item name="colorAccent">@color/theme_colorAccent</item>
            <item name="colorControlActivated">@color/theme_colorControlActivated</item>
            <item name="android:windowBackground">@color/theme_bg</item>
            <item name="colorBackgroundFloating">@color/theme_dialog_bg</item><!-- Dialog background color -->
            <item name="colorButtonNormal">@color/theme_colorPrimary</item>
            <item name="colorControlHighlight">@color/theme_colorAccent</item>
        </style>
    
    0 讨论(0)
提交回复
热议问题