Missing buttons on AlertDialog | Android 7.0 (Nexus 5x)

13,669

Solution 1

Indeed it seems that AlertDialog theme needs to be defined. An alternative approach to above would be to define AlertDialog theme in Application theme:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- ... other AppTheme items ... -->
    <item name="android:alertDialogTheme">@style/AlertDialogTheme</item>
</style>

<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Then it is enough create AlertDialog.Builder only with Context parameter.

Note: The above seems to work only for android.app.AlertDialog.Builder and is not working for AppCompat builder (android.support.v7.app.AlertDialog.Builder, at least as of version 25.0.1). In case of AppCompat builder, I had to pass theme ID as second parameter to Builder constructor to have buttons visible.

Solution 2

So it turns out on Android 7.0 you have to provide a theme. At least, that's what I had to do.

    <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="borderlessButtonStyle">@style/Widget.AppCompat.Button.Borderless.Colored</item>
    </style>


    final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);

Solution 3

What worked for me was in styles.xml:

<style name="LightDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColor">@android:color/primary_text_light</item>
    <item name="colorAccent">#007fff</item>
    <item name="buttonBarButtonStyle">@style/DialogButtonStyle</item>   
</style>

and

<style name="DialogButtonStyle" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">#007fff</item>                   
</style>

and in your program:

final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity(), R.style.LightDialogTheme);

Solution 4

You can create a custom theme for Alert Dialog, and set alertDialogTheme in your app theme.

<!--Alert Dialog Theme -->
<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">

    <item name="android:textColor">@color/colorPrimary</item>
    <item name="buttonBarButtonStyle">@style/DialogButtonStyle</item>
    <item name="colorAccent">@color/colorAccent</item>

    <!--If minimum API level is greater than or equal to 23, you can define the color of Title text separately  -->
    <item name="android:titleTextColor">@SomeColor</item> 

</style>

<!--This is to style the buttons of alert dialog-->
<style name="DialogButtonStyle" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">@color/colorAccent</item>
</style>

and finally, set the custom created theme to alertDialogTheme in Application Theme:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!--To make the change global to application-->
    <item name="alertDialogTheme">@style/AlertDialogTheme</item>
</style>

Tested for android.support.v7.app.AlertDialog

Solution 5

I had a similar issue and the thing was that I wasn't using the support library for my AppCompatActivity, therefore I changed:

import android.app.AlertDialog;

to

import android.support.v7.app.AlertDialog;

and it worked.

Share:
13,669
Sohail
Author by

Sohail

Updated on July 15, 2022

Comments

  • Sohail
    Sohail almost 2 years

    I am trying to create an AlertDialog but the buttons are not showing. Only seeing this issue in Android 7.0:

    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("This app needs location access");
    builder.setMessage("Please grant location access so this app can detect beacons.");
    builder.setPositiveButton(android.R.string.ok, null);
    builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        @TargetApi(Build.VERSION_CODES.M)
        public void onDismiss(final DialogInterface dialog) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
        }
    });
    builder.show();
    

    AlertDialog

  • André Mion
    André Mion over 7 years
    You just need to use <item name="alertDialogTheme">@style/AlertDialogTheme</item> (without android:) to work for android.support.v7.app.AlertDialog.Builder using just the context parameter
  • tryp
    tryp over 7 years
    I've posted a similar solution which is working for me : stackoverflow.com/a/42950260/1568663
  • Lucas P.
    Lucas P. over 5 years
    Thank you, this was driving me crazy!