Cómo utilizar y estilo nuevo AlertDialog de appCompat 22.1 y superior
Estoy tratando de migrar de android predeterminado AlertDialog
a la nueva incluida en appCompat-22.1 Hasta ahora entiendo que sólo tiene que importar android.support.v7.app.AlertDialog
paquete con el fin de utilizarlo.
¿Pero cómo puedo estilo? Por ejemplo, cambie los colores de los botones positivos / negativos, el color del título, el color del mensaje y el color de fondo?
- No puedo añadir android.support.v7 a mi ruta de construcción de proyecto
- Problema con ActionBarActivityDelegate class ... app no se ejecuta
- ¿Cuándo se encuentra la barra de progreso indeterminada en Android Support Library
- UnsupportedOperationException en Android 3.2 al seleccionar texto (AppCompat 21.0.3)
- Diseño de material que no diseña diálogos de alerta
- Cómo implementar la elevación Material-design para Pre-lollipop
- Radio de la esquina de CardView
- ¿Qué es SortedList <T> trabajando con RecyclerView.Adapter?
- Tema de diálogo de AppCompat con la barra de título de Mis-color - ¿Bug?
- Barra de herramientas flotante con Appcompat
- ¿Cómo puedo configurar un tema diferente para el menú desplegable de un Spinner?
- Edittext el color es blanco en appcompat 22.2
- Ciclo de vida del fragmento AppCompat cambiado
Al crear el AlertDialog
usted puede fijar un tema a utilizar.
Ejemplo – Creación del diálogo
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle); builder.setTitle("AppCompatDialog"); builder.setMessage("Lorem ipsum dolor..."); builder.setPositiveButton("OK", null); builder.setNegativeButton("Cancel", null); builder.show();
Styles.xml – Estilo personalizado
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> <!-- Used for the buttons --> <item name="colorAccent">#FFC107</item> <!-- Used for the title and text --> <item name="android:textColorPrimary">#FFFFFF</item> <!-- Used for the background --> <item name="android:background">#4CAF50</item> </style>
Resultado
Editar
Para cambiar la apariencia del título, puede hacer lo siguiente. Primero agregue un nuevo estilo:
<style name="MyTitleTextStyle"> <item name="android:textColor">#FFEB3B</item> <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item> </style>
Después simplemente haga referencia a este estilo en su MyAlertDialogStyle
:
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> ... <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item> </style>
De esta manera puede definir un textColor
diferente para el mensaje a través de android:textColorPrimary
y otro para el título a través del estilo.
Para utilizar un tema para toda la aplicación y no utilice el segundo parámetro para diseñar su Diálogo
<style name="MyTheme" parent="Base.Theme.AppCompat.Light"> <item name="alertDialogTheme">@style/dialog</item> <item name="colorAccent">@color/accent</item> </style> <style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert"> <item name="colorAccent">@color/accent</item> </style>
En mi aplicación con un acento de color en el tema no muestran los botones alertDialog con el tema colorAccent tengo que añadir un estilo de diálogo en el tema.
Si desea utilizar el nuevo android.support.v7.app.AlertDialog y tener diferentes colores para los botones y también tienen un diseño personalizado, a continuación, echar un vistazo a mi https://gist.github.com/JoachimR/6bfbc175d5c8116d411e
@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { View v = inflater.inflate(R.layout.custom_layout, null); initDialogUi(v); final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle) .setTitle(getString(R.string.some_dialog_title)) .setCancelable(true) .setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { doSomething(); dismiss(); } }) .setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dismiss(); } }) .setView(v) .create(); // change color of positive button d.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { Button b = d.getButton(DialogInterface.BUTTON_POSITIVE); b.setTextColor(getResources().getColor(R.color.colorPrimary)); } }); return d; }
Seguir respuesta @reVerse pero en mi caso, ya tenía alguna propiedad en mi AppTheme
como
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ... <item name="android:textColor">#111</item> <item name="android:textSize">13sp</item> </style>
Así que mi cuadro de diálogo se verá como
Lo resolví por
1) Cambie la importación de android.app.AlertDialog
a android.support.v7.app.AlertDialog
2) Anular 2 propiedad en AppTheme
con valor nulo
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> <!-- Used for the buttons --> <item name="colorAccent">#FFC107</item> <!-- Used for the title and text --> <item name="android:textColorPrimary">#FFFFFF</item> <!-- Used for the background --> <item name="android:background">#4CAF50</item> <item name="android:textColor">@null</item> <item name="android:textSize">@null</item> </style>
.
AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);
Espero que ayude a otra gente
<item name="editTextColor">@color/white</item> <item name="android:textColor">@color/white</item> <item name="android:textColorHint">@color/gray</item> <item name="android:textColorPrimary">@color/gray</item> <item name="colorControlNormal">@color/gray</item> <item name="colorControlActivated">@color/white</item> <item name="colorControlHighlight">#30FFFFFF</item>
- ¿Cómo lograr una animación de ripple usando la biblioteca de soporte?
- ¿Cómo puedo obtener un contenido de recursos desde un contexto estático?