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