109 votes

Comment puis-je changer la couleur de AlertDialog titre et la couleur de la ligne en dessous

J'ai changé la couleur de AlertDialog titre à l'aide de cette commande

alert.setTitle( Html.fromHtml("<font color='#FF7F27'>Set IP Address</font>"));

mettre je veux changer la couleur de la ligne qui apparaît dans le titre , comment puis-je le faire ?

Remarque : je ne veux pas utiliser une mise en page personnalisée

enter image description here

135voto

Daniel Smith Points 2746

Malheureusement, ce n'est pas un simple particulier de la tâche à accomplir. Dans ma réponse ici, je détaille la façon de régler la couleur d'un ListSeparator par la simple vérification du style parent utilisé par Android, la création d'une nouvelle image, et la création d'un nouveau style basé sur l'original. Malheureusement, contrairement à l' ListSeparator's style, AlertDialog thèmes sont à l'intérieur, et ne peut donc pas être référencé en tant que parent styles. Il n'est pas facile à changer que peu de bleu en ligne! Ainsi, vous avez besoin de recourir à la personnalisation des boîtes de dialogue.

Si ce n'est pas votre tasse de thé... n'abandonnez pas! J'ai été très perturbé qu'il n'y a pas de moyen facile de le faire alors je l'ai mis en place un petit projet sur github pour faire rapidement adaptés holo-style dialogues (en supposant que le téléphone prend en charge le style Holo). Vous pouvez trouver le projet ici: https://github.com/danoz73/QustomDialog

Il devrait facilement permettre d'aller ennuyer bleu de passionnant à l'orange!

enter image description here

Le projet est fondamentalement un exemple d'utilisation d'un dialogue personnalisé constructeur, et dans l'exemple j'ai créé une vue personnalisée qui semblait répondre à l'Adresse IP de l'exemple que vous donnez dans votre question initiale.

Avec QustomDialog, afin de créer une base de dialogue (titre, message) avec une couleur différente pour le titre ou le diviseur, vous utilisez le code suivant:

private String HALLOWEEN_ORANGE = "#FF7F27";

QustomDialogBuilder qustomDialogBuilder = new QustomDialogBuilder(v.getContext()).
    setTitle("Set IP Address").
    setTitleColor(HALLOWEEN_ORANGE).
    setDividerColor(HALLOWEEN_ORANGE).
    setMessage("You are now entering the 10th dimension.");

qustomDialogBuilder.show();

Et pour ajouter une mise en page personnalisée (par exemple, pour l'adresse IP EditText), vous ajoutez

setCustomView(R.layout.example_ip_address_layout, v.getContext())

pour le constructeur, avec une mise en page que vous avez créée (l'IP exemple peut être trouvé dans le github). J'espère que cette aide. Un grand merci à Joseph Comte et sa réponse ici.

76voto

mmrmartin Points 311

Diviseur de couleur:

Il s'agit d'une bidouille un peu, mais il fonctionne très bien pour moi et il fonctionne sans aucune bibliothèque externe (au moins sur Android 4.4).

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.dialog)
       .setIcon(R.drawable.ic)
       .setMessage(R.string.dialog_msg);
//The tricky part
Dialog d = builder.show();
int dividerId = d.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
View divider = d.findViewById(dividerId);
divider.setBackgroundColor(getResources().getColor(R.color.my_color));

Vous pouvez trouver plus de dialogue à l'ids dans alert_dialog.xml fichier. Par exemple. android:id/alertTitle pour changer la couleur du titre de la...

Mise à JOUR: la couleur du Titre

Hack pour changer la couleur du titre:

int textViewId = d.getContext().getResources().getIdentifier("android:id/alertTitle", null, null);
TextView tv = (TextView) d.findViewById(textViewId);
tv.setTextColor(getResources().getColor(R.color.my_color));

21voto

Mr.Sandy Points 1365

vérifier ceci est utile pour vous...

public void setCustomTitle (View customTitleView)

vous obtenez les détails en suivant le lien.

http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setCustomTitle%28android.view.View%29

CustomDialog.java

Dialog alert = new Dialog(this);
    alert.requestWindowFeature(Window.FEATURE_NO_TITLE);
    alert.setContentView(R.layout.title);
    TextView msg = (TextView)alert.findViewById(R.id.textView1);
    msg.setText("Hello Friends.\nIP address : 111.111.1.111");
    alert.show();

title.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Set IP address"
    android:textColor="#ff0000"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<ImageView 
    android:layout_width="fill_parent"
    android:layout_height="2dp"
    android:layout_marginTop="5dp"
    android:background="#00ff00"
    />
<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#775500"
    android:textAppearance="?android:attr/textAppearanceLarge" />

enter image description here

10voto

Jared Rummler Points 661

Cela permettra de définir la couleur du titre, icône, et diviseur. Liés à changer avec la toute nouvelle version d'Android. Mieux pour créer votre propre boîte de dialogue de l'OMI. Mais ici, vous allez:

public static void colorAlertDialogTitle(AlertDialog dialog, int color) {
    int dividerId = dialog.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
    if (dividerId != 0) {
        View divider = dialog.findViewById(dividerId);
        divider.setBackgroundColor(color);
    }

    int textViewId = dialog.getContext().getResources().getIdentifier("android:id/alertTitle", null, null);
    if (textViewId != 0) {
        TextView tv = (TextView) dialog.findViewById(textViewId);
        tv.setTextColor(color);
    }

    int iconId = dialog.getContext().getResources().getIdentifier("android:id/icon", null, null);
    if (iconId != 0) {
        ImageView icon = (ImageView) dialog.findViewById(iconId);
        icon.setColorFilter(color);
    }
}

N'oubliez pas d'appeler la boîte de dialogue.show() avant d'appeler cette méthode.

8voto

Destil Points 3673

Toutes les réponses sont trop complexes -, nous avons publié une bibliothèque qui s'occupe de votre problème d'élégance. Check it out:

https://github.com/inmite/android-styled-dialogs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X