Wie kann ich die Farbe des AlertDialog-Titels und die Farbe der darunter liegenden Zeile ändern

Ich habe die Farbe eines AlertDialog-Titels mit diesem Befehl geändert

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

Aber ich möchte die Farbe der Linie ändern, die unter dem Titel erscheint. wie kann ich das machen ?

  • Android HttpsUrlConnection eofexception
  • Wie kann man ein benutzerdefiniertes Dialogfeld in Android erstellen?
  • Ist es möglich, GCM ohne Google-Konto und Google Play Services auf dem Gerät zu verwenden?
  • Wie bekomme ich gmail Mails programmgesteuert in Android
  • App stirbt mit "Sendesignal", aber keine Ausnahme oder andere Infos
  • StartActivityForResult von einem Service
  • Hinweis: Ich möchte kein benutzerdefiniertes Layout verwenden

    Screenshot der gewünschten Wirkung

  • Screen Capture in Android
  • Status bar android ausblenden
  • Helligkeit Bildschirmfilter
  • Wie kann ich die Größe der Ratingbar verringern?
  • Android - Notizblock Beispiel - Warum in onCreate bevölkern?
  • Gradle Build Error: Maven Meta-Daten können nicht von https://repo1.maven.org/maven2/io/fabric/tools/gradle/maven-metadata.xml geladen werden
  • 12 Solutions collect form web for “Wie kann ich die Farbe des AlertDialog-Titels und die Farbe der darunter liegenden Zeile ändern”

    Leider ist dies keine besonders einfache Aufgabe zu erreichen. In meiner Antwort hier , ich Detail, wie man die Farbe eines ListSeparator indem Sie einfach den übergeordneten Stil, der von Android verwendet wird, ein neues Bild erstellen und einen neuen Stil erstellen, der auf dem Original basiert. Leider sind die ListSeparator -Themen im Gegensatz zum ListSeparator des ListSeparator intern und können daher nicht als übergeordnete Styles referenziert werden. Es gibt keinen einfachen Weg, um diese kleine blaue Linie zu ändern! So müssen Sie auf benutzerdefinierte Dialoge zurückgreifen.

    Wenn das nur nicht deine Tasse Tee ist … gib nicht auf! Ich war sehr beunruhigt, dass es keinen leichten Weg, dies zu tun, so dass ich ein kleines Projekt auf github für die Herstellung schnell angepasst Holo-Stil Dialoge (vorausgesetzt, dass das Telefon unterstützt Holo-Stil). Hier finden Sie das Projekt: https://github.com/danoz73/QustomDialog

    Es sollte leicht losgehen von langweilig blau bis aufregende orange!

    Bildbeschreibung hier eingeben

    Das Projekt ist grundsätzlich ein Beispiel für die Verwendung eines benutzerdefinierten Dialog Builder, und im Beispiel habe ich eine benutzerdefinierte Ansicht, die schien, um die IP-Adresse Beispiel, das Sie geben in Ihrer ursprünglichen Frage zu schaffen schien.

    Mit QustomDialog , um einen grundlegenden Dialog (Titel, Nachricht) mit einer gewünschten Farbe für den Titel oder Teiler zu erstellen, verwenden Sie den folgenden Code:

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

    Und um ein benutzerdefiniertes Layout hinzuzufügen (sagen wir, um die kleine IP-Adresse EditText hinzuzufügen), fügen Sie hinzu

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

    An den Erbauer mit einem Layout, das du entworfen hast (das IP-Beispiel befindet sich im Github). Ich hoffe das hilft. Vielen Dank an Joseph Earl und seine Antwort hier .

    Divider Farbe:

    Es ist ein Hack ein bisschen, aber es funktioniert super für mich und es funktioniert ohne jede externe Bibliothek (zumindest auf 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)); 

    In der Datei alert_dialog.xml finden Sie weitere Dialoge. Z.B. android:id/alertTitle zum Ändern der android:id/alertTitle

    UPDATE: Titelfarbe

    Hack zum Ändern der Titelfarbe:

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

    Überprüfen Sie das ist für Sie nützlich

     public void setCustomTitle (View customTitleView) 

    Sie erhalten Detail aus folgendem Link.

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

    Bildbeschreibung hier eingeben

    Dies wird die Farbe für den Titel, das Symbol und den Teiler einstellen. Gebunden, um mit jeder neuen Android-Version zu ändern.

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

    Denken Sie daran, dialog.show () aufzurufen, bevor Sie diese Methode aufrufen.

    Indem ich dem Dialog-Quellcode MidWindow , fand ich, dass Titel in Class MidWindow generiert wird, indem das dialog_title_holo.xml Layout aufgelöst wird. So ist die mTitleView von mTitleView title und die Id von titleDivider ist titleDivider .

    Wir können auf id des android.R.id.title einfach durch android.R.id.title .

    Und Zugriff auf Id von titleDivider von Resources.getSystem().getIdentifier("titleDivider","id", "android");

    Der letzte Code, den ich verwendet habe, um die Richtung des Titels zu ändern und die Farbe zu ändern, ist:

     TextView mTitle = (TextView)findViewById(android.R.id.title); mTitle.setGravity(Gravity.RIGHT|Gravity.CENTER_VERTICAL); int x = Resources.getSystem().getIdentifier("titleDivider","id", "android"); View titleDivider = findViewById(x); titleDivider.setBackgroundColor(getContext().getResources().getColor(R.color.some_color)); 

    Wenn du keine "Bibliothek" dafür willst, kannst du diesen Hacken verwenden:

     ((ViewGroup)((ViewGroup)getDialog().getWindow().getDecorView()).getChildAt(0)) //ie LinearLayout containing all the dialog (title, titleDivider, content) .getChildAt(1) // ie the view titleDivider .setBackgroundColor(getResources().getColor(R.color.yourBeautifulColor)); 

    Dies wurde getestet und arbeitet an 4.x; Nicht getestet unter, aber wenn mein Gedächtnis gut ist, sollte es für 2.x und 3.x arbeiten

    Wenn Sie benutzerdefiniertes Layout für Alert-Dialog erstellen

    Dann können Sie so hinzufügen wie leicht, um die Farbe zu ändern

     <LinearLayout android:id="@+id/DialogTitleBorder" android:layout_width="fill_parent" android:layout_height="1dip" android:layout_below="@id/mExitDialogDesc" android:background="#4BBAE3" <!--change color easily --> > </LinearLayout> 

    Wenn Sie mit benutzerdefinierten Titel-Layout dann können Sie es wie alertDialog.setCustomTitle (customTitle);

    Beispielsweise

     on UI thread used dialog like LayoutInflater inflater=LayoutInflater.from(getApplicationContext()); View customTitle=inflater.inflate(R.layout.customtitlebar, null); AlertDialog.Builder d=new AlertDialog.Builder(this); d.setCustomTitle(customTitle); d.setMessage("Message"); d.setNeutralButton("OK", null); d.show(); customtitlebar.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="#525f67"> <ImageView android:id="@+id/icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/ic_launcher" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" > </ImageView> <TextView android:id="@+id/customtitlebar" android:layout_width="match_parent" android:layout_height="40dp" android:textColor="#ffffff" android:text="Title Name" android:padding="3px" android:textStyle="bold" android:layout_toRightOf="@id/icon" android:layout_alignParentTop="true" android:gravity="center_vertical"/> <ImageView android:layout_width="match_parent" android:layout_height="2dp" android:background="#ff0000" android:layout_below="@id/icon"><!-- This is line below the title --> </ImageView> </RelativeLayout> 

    Falls Sie den Dialog verlängern möchten, verwenden Sie:

    RequestWindowFeature (Window.FEATURE_NO_TITLE);

    Weiter von dieser Antwort: https://stackoverflow.com/a/15285514/1865860 , habe ich den schönen github repo von @ daniel-smith gegabelt und machte einige Verbesserungen:

    • Verbessertes Beispiel Aktivität
    • Verbesserte Layouts
    • Feste setItems Methode
    • Hinzugefügt items_list in items_list
    • Deinstallieren von Klicks auf Klick
    • Unterstützung für deaktivierte Elemente in setItems Methoden
    • listItem berühren Rückmeldung
    • Scrollbare Dialognachricht

    Link: https://github.com/dentex/QustomDialog

    Ich kam mit einer anderen Lösung, die das Styling deiner Dialoge an einem Ort verarbeitet und du musst dir keine Sorgen machen, wenn du es anwende – Dialog anzeigen / nicht gezeigt, was einen Fehler verursachen kann (sollte requestFocus oder so etwas anrufen; P).

    Anwendungsbeispiel:

     AlertDialog.Builder builder = new AlertDialog.Builder(context); AlertDialog dialog = builder.create(); //or builder.show() DialogViewDecorator.decorate(dialog, android.R.color.holo_red_light); //can also set the defaut color in the class 

    Implementierung:

     public class DialogViewDecorator { private static final @ColorRes int DEFAULT_TITLE_DIVIDER_COLOR = android.R.color.holo_orange_light; public static void decorate(Dialog dialog) { decorate(dialog, DEFAULT_TITLE_DIVIDER_COLOR); } /** * Sets the title divider color when the view is shown by setting DialogInterface.OnShowListener on the dialog. * <p/> * If you want to do other things onShow be sure to extend OnDecoratedDialogShownListener(call super.show(...)!) * and call {@link #decorate(Dialog, int, OnDecoratedDialogShownListener)}. * * @param dialog * @param titleDividerColor */ public static void decorate(Dialog dialog, final int titleDividerColor) { decorate(dialog, titleDividerColor, new OnDecoratedDialogShownListener(titleDividerColor)); } /** * Method for setting a extended implementation of OnDecoratedDialogShownListener. Don't forget to call super * or the titleDividerColor wont be applied! * * @param dialog * @param titleDividerColor * @param OnShowListener * @param <T> */ public static <T extends OnDecoratedDialogShownListener> void decorate(Dialog dialog, int titleDividerColor, T OnShowListener) { if (dialog == null || titleDividerColor <= 0) { return; } if (dialog.isShowing()) { setTitleDividerColor(dialog, titleDividerColor); } else { dialog.setOnShowListener(OnShowListener); } } private static void setTitleDividerColor(DialogInterface dialogInterface, int titleDividerColor) { try { Dialog dialog = (Dialog) dialogInterface; int dividerId = dialog.getContext().getResources().getIdentifier("android:id/titleDivider", null, null); View divider = dialog.findViewById(dividerId); if (divider != null) { divider.setBackgroundColor(dialog.getContext().getResources().getColor(titleDividerColor)); } } catch (Exception e) { e.printStackTrace(); } } public static class OnDecoratedDialogShownListener implements DialogInterface.OnShowListener { private int titleDividerColor; public OnDecoratedDialogShownListener() { this.titleDividerColor = DEFAULT_TITLE_DIVIDER_COLOR; } public OnDecoratedDialogShownListener(int titleDividerColor) { this.titleDividerColor = titleDividerColor; } @Override public void onShow(DialogInterface dialogInterface) { setTitleDividerColor(dialogInterface, titleDividerColor); } }} 

    In der Klasse onCreateView stelle ich das:

     Dialog d = getDialog(); d.setTitle(Html.fromHtml("<font color='#EC407A'>About</font>")); int dividerId = d.getContext().getResources().getIdentifier("android:id/titleDivider", null, null); View divider = d.findViewById(dividerId); divider.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 

    ColorPrimary Links zu unserer colors.xml Datei, die alle Farben speichert. Auch d.setTitle bietet eine hacky Möglichkeit, die Titelfarbe zu setzen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.