webentwicklung-frage-antwort-db.com.de

Fehlende Schaltflächen in AlertDialog | Android 7.0 (Nexus 5x)

Ich versuche, eine AlertDialog zu erstellen, aber die Schaltflächen werden nicht angezeigt. Nur dieses Problem in Android 7.0 zu sehen:

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

In der Tat scheint es, dass das AlertDialog-Thema definiert werden muss. Ein alternativer Ansatz zu oben wäre das Definieren des AlertDialog-Themas im Anwendungsthema:

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

Dann genügt es, AlertDialog.Builder nur mit dem Parameter Context zu erstellen.

Hinweis: Das Obige scheint nur für Android.app.AlertDialog.Builder zu funktionieren und funktioniert nicht für den AppCompat-Builder (Android.support.v7.app.AlertDialog.Builder, zumindest ab Version 25.0.1). Bei AppCompat Builder musste ich die Design-ID als zweiten Parameter an den Builder-Konstruktor übergeben, damit die Schaltflächen sichtbar sind.

32
tpaczesny

Auf Android 7.0 stellt sich also heraus, dass Sie ein Thema angeben müssen. Zumindest musste ich das tun.

    <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

Was für mich funktioniert hat war 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>

und

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

und in deinem Programm:

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

Sie können ein benutzerdefiniertes Design für den Warnungsdialog erstellen und alertDialogTheme in Ihrem App-Design festlegen.

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

und schließlich legen Sie das benutzerdefinierte Motiv im Anwendungsdesign auf alertDialogTheme fest:

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

Getestet für Android.support.v7.app.AlertDialog

5
Ankush

Ich hatte ein ähnliches Problem und die Sache war, dass ich die Unterstützungsbibliothek für meine AppCompatActivity nicht verwendet habe. Daher habe ich Folgendes geändert:

import Android.app.AlertDialog;

zu

import Android.support.v7.app.AlertDialog;

und es hat funktioniert.

3
box

Sie können der Schaltfläche eine benutzerdefinierte Farbe hinzufügen Unter Ihrem Code 

builder.show();

Schreib Dies

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

Du brauchst ein Thema wie dieses:

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