Missing buttons on AlertDialog | Android 7.0 (Nexus 5x)
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.
Sohail
Updated on July 15, 2022Comments
-
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();
-
André Mion over 7 yearsYou just need to use
<item name="alertDialogTheme">@style/AlertDialogTheme</item>
(withoutandroid:
) to work forandroid.support.v7.app.AlertDialog.Builder
using just thecontext
parameter -
tryp over 7 yearsI've posted a similar solution which is working for me : stackoverflow.com/a/42950260/1568663
-
Lucas P. over 5 yearsThank you, this was driving me crazy!