web-dev-qa-db-fra.com

Boutons manquants sur AlertDialog | Android 7.0 (Nexus 5x)

J'essaie de créer un AlertDialog mais les boutons ne sont pas visibles. Ne voyant que ce problème dans 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

32
Sohail

En effet, il semble que le thème AlertDialog doive être défini. Une autre approche serait de définir le thème AlertDialog dans le thème Application:

<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>

Ensuite, il suffit de créer AlertDialog.Builder uniquement avec le paramètre Context.

Remarque: Ce qui précède semble ne fonctionner que pour Android.app.AlertDialog.Builder et ne fonctionne pas pour le générateur AppCompat (Android.support.v7.app.AlertDialog.Builder, au moins à partir de la version 25.0.1). Dans le cas du générateur AppCompat, je devais passer l'ID du thème en tant que second paramètre du constructeur Builder pour que les boutons soient visibles.

32
tpaczesny

Donc, il s'avère que sur Android 7.0, vous devez fournir un thème. Au moins, c'est ce que je devais faire.

    <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);
14
Sohail

Ce qui a fonctionné pour moi était dans 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>

et

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

et dans votre programme:

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

Vous pouvez créer un thème personnalisé pour le dialogue d’alerte et définir alertDialogTheme dans le thème de votre application.

<!--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>

et enfin, définissez le thème créé sur alertDialogTheme dans le thème d'application:

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

Testé pour Android.support.v7.app.AlertDialog

5
Ankush

J'avais un problème similaire et le fait était que je n'utilisais pas la bibliothèque de support pour mon AppCompatActivity, j'ai donc changé:

import Android.app.AlertDialog;

à

import Android.support.v7.app.AlertDialog;

et cela a fonctionné.

3
box

Vous pouvez ajouter une couleur personnalisée au bouton . En dessous de votre code 

builder.show();

Écrire cela

Button bg = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
bg.setTextColor(Color.BLUE);
0
Ajith Ramesh

Vous devez utiliser un thème, comme ceci:

Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder (Activité, Android.Resource.Style.ThemeMaterialDialogAlert);
0
Bruno A. Klein