AlertDialog Tema: ¿Cómo cambiar el color del texto del artículo?
Cuando intento aplicar un tema estándar a AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(MyClass.this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); builder.setTitle("Change"); String[] info= this.getResources().getStringArray(R.array.info); ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.select_dialog_singlechoice); arrayAdapter.addAll(info); builder.setSingleChoiceItems(arrayAdapter, ....
Resultado:
- ScrollView: Cambia el color del efecto de borde con Holo
- El ajuste textColor de un tema falla sólo en HTC Desire HD
- ¿Por qué mi aplicación de Android no muestra el icono y el texto en ActionBar?
- Icono de aplicación no aparece en Actionbar (Android Studio 1.0.1)
- Tema que no se aplica a DialogFragment en Android
La nota es que no tengo ningún problema con builder.setItems(...)
ya que su color de texto es Black
mientras que el tema aplicado con builder.setSingleChoiceItems(...)
tiene un color de texto blanco.
¿Alguna solución rápida? O cualquier forma de crear un tema personalizado basado en AlertDialog.THEME_DEVICE_DEFAULT_LIGHT
?
Mi estilo personalizado no funciona como se esperaba:
<style name="AlertDialogCustomTheme" android:parent="android:Theme.Dialog"> <item name="android:textColor">#7ABDFF</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item> <!--THE FOLLOWING ITEMS HAVE NOT EFFECT ... !! --> <item name="android:layout_centerHorizontal">true</item> <item name="android:layout_centerVertical">true</item> <item name="android:textColorAlertDialogListItem">#A844BD</item> <item name="android:itemBackground">#7ABDFF</item> </style>
Actualizar
@lopez respuesta es una solución completa, pero me parece una sola línea de solución para mi problema, un tema personalizado que se aplicará a la actividad en manifiesto:
<style name="MyTheme"> <item name="android:textColorAlertDialogListItem">@android:color/black</item> </style>
- Cambio de tema de aplicación a nivel de programación?
- Cómo establecer un tema diferente en un diseño
- Qué atributo de tema cambia el color de texto de un mensaje de error de EditText
- LinearLayout no establece el atributo layout_height requerido
- Color del selector de lista de Android 4.4 Kit Kat
- Cómo utilizar el tema del proveedor en la aplicación de Android
- No se establece el tema de Android
- La barra de acción se ve cortada mientras se utiliza Theme.AppCompat.Dialog
Si alguien lee esto, y está usando los cuadros de diálogo Alert de la biblioteca Suport y quiere cambiar el color del texto de los elementos de la lista, entonces suelte el android: part, así:
<item name="textColorAlertDialogListItem">@color/your_color</item>
Personalmente, uso el cuadro de Dialog
Android pero uso un diseño personalizado para que coincida con el diseño de mi aplicación.
Aquí hay un ejemplo:
new AlertDialog.Builder(context) .setView(inflater.inflate(R.layout.dialog_delete_contact, null)) .setPositiveButton(context.getResources().getString(android.R.string.ok).toUpperCase(), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // YOUR TREATMENT } }) .setNegativeButton(context.getResources().getString(android.R.string.cancel).toUpperCase(), null) .show();
Diseño:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/GrayLight" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:background="@color/Black" android:gravity="center" android:orientation="horizontal" tools:ignore="DisableBaselineAlignment" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:layout_weight="2" android:gravity="center" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/app_name" android:fitsSystemWindows="true" android:padding="10dip" android:src="@drawable/ic_launcher" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:layout_marginRight="20dp" android:layout_weight="0.5" android:gravity="center" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/remove_contact" android:textColor="@color/White" android:textSize="20sp" android:textStyle="bold" tools:ignore="HardcodedText" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:gravity="center" android:orientation="vertical" tools:ignore="DisableBaselineAlignment" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="10dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="20dp" android:text="@string/ask_remove_contact" android:textSize="15sp" tools:ignore="HardcodedText" /> </LinearLayout>
Resultado en la imagen:
Para evitar volver a escribir el código cada vez que aquí es una clase de utilidad:
public class MyDialog { public static Builder create(final Context context, final LayoutInflater layoutInflater, final String title, final String content) { View view = layoutInflater.inflate(R.layout.generic_dialog, null); ((TextView)view.findViewById(R.id.textViewTitleDialog)).setText(title); ((TextView)view.findViewById(R.id.textViewContentDialog)).setText(content); return new AlertDialog.Builder(context).setView(view); } }
Y un ejemplo de uso:
AlertDialog.Builder myDialog = MyDialog.create(this, getLayoutInflater(), "Quitter ECOLEMS", "Voulez-vous vraiment quitter l'application?"); myDialog.setPositiveButton("Oui", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // YOUR TREATMENT } }) .setNegativeButton("Non", null) .show();
¡Espero que hayas ayudado!
AlertDialog.Builder builder = new AlertDialog.Builder(MyClass.this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); builder.setTitle("Change"); String[] info= this.getResources().getStringArray(R.array.info); ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.select_dialog_singlechoice); arrayAdapter.addAll(info); builder.setSingleChoiceItems(arrayAdapter, ....**change this line to** builder.setSingleChoiceItems(info,0,null);
- ¿Por qué Android Eclipse constantemente actualiza las carpetas externas y toma forver?
- ¿Cómo obtener la fuerza de conexión de los puntos de acceso Wifi?