36 votes

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

J'essaie de créer un AlertDialog mais les boutons ne s'affichent pas. Je ne rencontre ce problème que sous 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

0 votes

Essayez d'écrire ok sans ressource.

0 votes

J'ai essayé, ça ne marche pas

1 votes

Également, point annexe, utilisez ActivityCompat.requestPermissions() pour ne pas avoir à utiliser @TargetApi...

35voto

tpaczesny Points 396

Il semble en effet 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>

Alors il suffit de créer AlertDialog.Builder seulement avec Context paramètre.

Note : Ce qui précède semble fonctionner uniquement pour android.app.AlertDialog.Builder et ne fonctionne pas pour le constructeur d'AppCompat ( android.support.v7.app.AlertDialog.Builder au moins à partir de la version 25.0.1 ). Dans le cas du constructeur d'AppCompat, j'ai dû passer l'ID du thème comme deuxième paramètre au constructeur du constructeur pour que les boutons soient visibles.

11 votes

Il suffit d'utiliser <item name="alertDialogTheme">@style/AlertDialogTheme</item> (sans android: ) pour travailler pour android.support.v7.app.AlertDialog.Builder en utilisant uniquement le context paramètre

1 votes

J'ai posté une solution similaire qui fonctionne pour moi : stackoverflow.com/a/42950260/1568663

19voto

Sohail Points 472

Il s'avère donc que sous Android 7.0, vous devez fournir un thème. En tout cas, c'est ce que j'ai dû 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);

1 votes

Merci, ça me rendait fou !

11voto

Stefan Verhagen Points 128

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

5voto

Ankush Points 964

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 personnalisé créé à alertDialogTheme dans le thème des applications :

<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

4voto

box Points 1941

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

import android.app.AlertDialog;

à

import android.support.v7.app.AlertDialog;

et ça a marché.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X