web-dev-qa-db-fra.com

Thème AlertDialog: Comment changer la couleur du texte d'un article?

Lorsque j'essaie d'appliquer un thème standard à 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, ....

Résultat:

enter image description here

La remarque est que je n’ai aucun problème avec builder.setItems(...) puisque sa couleur de texte est Black tandis que le thème appliqué à builder.setSingleChoiceItems(...) a une couleur de texte blanche.

Une solution rapide? Ou tout autre moyen de créer un thème personnalisé basé sur AlertDialog.THEME_DEVICE_DEFAULT_LIGHT?

Mon style personnalisé ne fonctionne pas comme prévu:

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

Mettre à jour

@lopez answer est une solution complète, mais je trouve une solution en une seule ligne à mon problème, un thème personnalisé à appliquer à l'activité dans manifest:

<style name="MyTheme">
    <item name="Android:textColorAlertDialogListItem">@Android:color/black</item>
</style>
17
Mohsen Afshin

Si quelqu'un lit ceci et utilise les dialogues d'alerte de la bibliothèque d'assistance et souhaite modifier la couleur du texte des éléments de la liste, supprimez la partie Android:, comme suit:

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

Personnellement, j'utilise Android Dialog mais j'utilise une mise en page personnalisée qui correspond au design de mon application.

Voici un exemple:

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

Disposition:

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

Résultat en image:

enter image description here

Pour éviter de réécrire le code à chaque fois, voici une classe d’utilitaire:

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

}

Et un exemple d'utilisation:

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

J'espère que vous avez aidé!

6
lopez.mikhael

Ce qui fonctionne pour moi 

<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>
0
Suneet Srivastava