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?

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

Estilo de alerta

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

Introduzca aquí la descripción de la imagen

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
Introduzca aquí la descripción de la imagen

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

Introduzca aquí la descripción de la imagen

  <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> 
  • Android Studio / Gradle no encuentra recursos de AppCompat para pruebas
  • Icono ActionBarDrawerToggle que falta cuando se utiliza AppCompat v22
  • Problema emergente del menú Hardware con Appcompat
  • AppCompat V7 falla al usar shrinkResources
  • Error en startActionMode, appcompat
  • Elementos en Fragmento no funcionan después de volver a agregar el mismo fragmento
  • Lollipop optimizó la compilación de aplicaciones en Kitkat - LayoutInflaterCompatHC NoClassDefFoundError
  • Cómo agregar un botón de acción flotante, sin AppCompat?
  • SwipeRefreshLayout está oculto en vacío RecyclerView
  • Animación ActionBarDrawerToggle
  • RecyclerView: ¿Cómo simular el selector de dibujo de ListView en la parte superior?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.