ventana studio personalizado emergente ejemplo custom android themes android-alertdialog

android - studio - Tema AlertDialog: ¿Cómo cambiar el color del texto del elemento?



dialogfragment android ejemplo (4)

Lo que funciona para mi

<style name="AlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:textColor">@color/text</item> <item name="android:background">@color/background</item> <item name="android:textColorPrimary">@color/text</item> <item name="textColorAlertDialogListItem">@color/text</item> </style>

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:

La nota es que no tengo problemas 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

La respuesta de @lopez es una solución completa, pero encuentro una solución de línea única 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>


Personalmente, uso el 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í hay 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!


Si alguien lee esto, y está utilizando los diálogos de alerta de la biblioteca de Suport y desea cambiar el color del texto de los elementos de la lista, suelte la parte de Android:

<item name="textColorAlertDialogListItem">@color/your_color</item>


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