studio programacion herramientas fundamentos con avanzado aplicaciones android button android-alertdialog invisible android-7.0-nougat

programacion - manual de android en pdf



Faltan botones en AlertDialog | Android 7.0(Nexus 5x) (9)

AlertDialog crear un AlertDialog pero los botones no se muestran. Solo viendo este problema en 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();


Así que resulta que en Android 7.0 tienes que proporcionar un tema. Al menos, eso es lo que tenía que hacer.

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


De hecho, parece que el tema de AlertDialog debe definirse. Un enfoque alternativo a lo anterior sería definir el tema AlertDialog en el tema Aplicación:

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

Entonces es suficiente crear AlertDialog.Builder solo con el parámetro Context .

Nota: Lo anterior parece funcionar solo para android.app.AlertDialog.Builder y no funciona para el compilador AppCompat ( android.support.v7.app.AlertDialog.Builder , al menos a partir de la versión 25.0.1 ). En el caso del constructor de AppCompat, tuve que pasar el ID del tema como segundo parámetro al constructor de Builder para que tuviera botones visibles.


Lo que funcionó para mí fue en 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>

y

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

y en tu programa:

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


Necesitas usar un tema, como este:

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


Perdón por la respuesta tardía, se trata de un problema de importación. debe seleccionar v7.alertDialog, no usar app.alertDialog.

Cambie su código a v7.alertDialog y también mostrará el color del botón en Nexus.


Puede agregar color personalizado al botón. Debajo de tu código

builder.show();

Escribe esto

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


Puede crear un tema personalizado para Diálogo de alertas y establecer alertDialogTheme en el tema de su aplicación.

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

y finalmente, configure el tema creado personalizado para alertDialogTheme en el Tema de aplicación:

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

Probado para android.support.v7.app.AlertDialog


Quizás es demasiado tarde, pero espero que alguien use esta solución. puedes hacerlo de la siguiente manera: Debes establecer OnShowListenter en tu alertDialog, dentro de esta función debes obtenerButton () y luego setTextColor. Un ejemplo:

alertDialog = alertDialogBuilder.create(); alertDialog.setOnShowListener(new DialogInterface.OnShowListener(){ @Override public void onShow(DialogInterface dialogInterface){ alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(R.color.black); } });


Tuve un problema similar y la cuestión es que no estaba usando la biblioteca de soporte para mi AppCompatActivity, por lo tanto, cambié:

import android.app.AlertDialog;

a

import android.support.v7.app.AlertDialog;

Y funcionó.