EditText unterstreicht unter der Texteigenschaft

108

Ich möchte die blaue Farbe unter dem Bearbeitungstext ändern, ich weiß nicht, um welche Eigenschaft es sich handelt.

Ich habe versucht, eine andere Hintergrundfarbe dafür zu verwenden, aber es hat nicht funktioniert.

Ich habe unten ein Bild angehängt:

Geben Sie hier die Bildbeschreibung ein

AndroidEnthusiast
quelle
Dies ist ein Hintergrund für den EditText, der auf bestimmten API-Ebenen / Telefonen verfügbar ist. Mit anderen Worten, wenn Ihre App auf einem anderen Telefon ausgeführt wird, wird möglicherweise ein anderer Hintergrund angezeigt.
Sherif elKhatib
Erstellen Sie Ihren benutzerdefinierten Edittext-Hintergrund
Vijju
1
Mögliche Vervielfältigung des vorherigen Threads. Bitte überprüfen Sie dies auf stackoverflow.com/a/4585750/1129468
gokhanakkurt
Verwenden Sie den folgenden Code und lassen Sie mich wissen, ob er funktioniert oder nicht.
InnocentKiller
android-holo-colors.com
Pratik Butani

Antworten:

90

Es ist eigentlich ziemlich einfach, die Unterstreichungsfarbe eines EditText programmgesteuert festzulegen (nur eine Codezeile).

So stellen Sie die Farbe ein:

editText.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);

So entfernen Sie die Farbe:

editText.getBackground().clearColorFilter();

Hinweis: Wenn der EditText fokussiert ist , wird die von Ihnen festgelegte Farbe nicht wirksam, sondern hat eine Fokusfarbe .

API-Referenz:

Drawable # setColorFilter

Drawable # clearColorFilter

Jing Li
quelle
4
Funktioniert auch auf Xamarin für Android, in Ihrem benutzerdefinierten Renderer OnElementChanged können Sie tunControl.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk
@ DavidConlisk welche Rendererüberschreibst du? Ich versuche herauszufinden, wie dies für eine Suchleiste funktioniert.
Nick N.
@ NickN. Ich habe dies für einen Picker verwendet, also habe ich den PickerRenderer überschrieben. Es sollte mit jedem Renderer funktionieren, der am besten zu Ihnen passt (theoretisch!)
David Conlisk
1
Ich denke, es sollte, aber das Problem kann sein, dass das SearchBarRenderernicht vom Typ ist EditText. Kann es nicht zum Laufen bringen.
Nick N.
85

Verwenden Sie android:backgroundTint=""in Ihrem EditTextXML-Layout.

Für API <21 können Sie dann AppCompatEditTextaus der Support-Bibliothek verwendenapp:backgroundTint=""

Soheil Setayeshi
quelle
14
Dies funktioniert derzeit nur in API 21 und höher. Keine Rückwärtsunterstützung.
John Shelley
2
Dies ist bei weitem die einfachste und prägnanteste Lösung.
IgorGanapolsky
@ JohnShelley siehe meine Antwort unten , es funktioniert für Pre-Lollipop und höher .
Sufian
3
android:background="@null"für Geräte mit API <21.
Hammad Nasir
4
Damit dieses Attribut in APIs unter 21 funktioniert, sollten Sie anstelle von Android den Namespace app (xmlns: app = " schemas.android.com/apk/res-auto" ) verwenden.
Andrei K.
38

Sie müssen für jeden Status des EditText(Fokus, aktiviert, aktiviert) ein anderes Hintergrundbild verwenden, keine Farbe .

http://android-holo-colors.com/

Auf der obigen Site können Sie Bilder von vielen Komponenten des Holo-Themas erhalten. Wählen Sie einfach "EditText" und die gewünschte Farbe. Sie können eine Vorschau am unteren Rand der Seite sehen.

Laden Sie die ZIP-Datei herunter und kopieren Sie die Ressourcen in Ihr Projekt (Bilder und XML).

Wenn Ihr XML heißt: apptheme_edit_text_holo_light.xml (oder ähnliches):

  1. Gehen Sie zu Ihrer XML "styles.xml" und fügen Sie den benutzerdefinierten EditTextStil hinzu:

    <style name="EditTextCustomHolo" parent="android:Widget.EditText">
       <item name="android:background">@drawable/apptheme_edit_text_holo_light</item>
       <item name="android:textColor">#ffffff</item>
    </style>
    
  2. Tun Sie dies einfach in Ihrem EditText:

    <EditText
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       style="@style/EditTextCustomHolo"/>
    

Und das war's, ich hoffe es hilft dir.

Akariuz
quelle
24

Dies funktioniert gut für alte und neue Versionen von Android (funktioniert auch unter API 10!).

Definieren Sie diesen Stil in styles.xml:

<style name="EditText.Login" parent="Widget.AppCompat.EditText">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textColorHint">@android:color/darker_gray</item>
    <item name="colorAccent">@color/blue</item>
    <item name="colorControlNormal">@color/blue</item>
    <item name="colorControlActivated">@color/blue</item>
</style>

Und jetzt legen Sie dies in Ihrem XML als Thema und Stil fest ( Stil zum Festlegen textColorund Thema zum Festlegen aller anderen Dinge):

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    style="@style/EditText.Login"
    android:theme="@style/EditText.Login"/>

Bearbeiten

Diese Lösung verursacht bei neueren Android-Versionen (ab Lollipop oder Marshmallow) einen winzigen UI-Fehler, bei dem die Auswahlgriffe unterstrichen sind.

Dieses Problem wird in diesem Thread behandelt . (Ich habe diese Lösung nicht persönlich ausprobiert.)

Sufian
quelle
Tolle Antwort, danke. Die Verwendung von parent = "Widget.AppCompat.EditText" anstelle von parent = "android: Widget.EditText" löste mein Hauptproblem.
cfl
1
Ich denke du meinst, das funktioniert Lollipop (21) und höher, weil ich Warnungen bekomme, dass dies nicht niedriger als 21 ist
Mark O'Sullivan
@ MarkO'Sullivan nein, das funktioniert für Pre-Lollipop und ganz nach oben. Ich habe es auf API 10 getestet und es funktioniert gut. Bitte fügen Sie den vollständigen Fehler und die Stelle ein, an der er angezeigt wird.
Sufian
Fokussierter Bearbeitungstext hatte für mich immer noch die Grundfarbe Farbe, daher musste ich diesen Ansatz verwenden: stackoverflow.com/a/36543554/2413303
EpicPandaForce
18

Sie können die Unterstreichung der EditText- Farbe ändern, indem Sie sie in styles.xml angeben . Fügen Sie in Ihrer App theme styles.xml Folgendes hinzu.

<item name="android:textColorSecondary">@color/primary_text_color</item> 

Wie von ana im Kommentarbereich hervorgehoben

  <item name="android:colorControlActivated">@color/black</item>

Das Einstellen dieses Themas eignet sich gut zum Ändern der Farbe einer Edittext-Unterstreichung.

Dharani Kumar
quelle
3
Beachten Sie, dass android:textColorSecondarydamit auch die Farbe des hinteren Pfeils und des DrawerLayoutHamburger-Symbols in der ActionBar bestimmt wird.
Bianca Daniciuc
7
<item name="colorControlNormal">@color/edittext_underline_color</item>Aufgrund des Farbproblems in der Navigationsleiste habe ich letztendlich anstelle von textColorSecondary verwendet.
Bianca Daniciuc
14

Sie müssen also eine neue XML-Datei in Ihrem Zeichenordner erstellen.

Fügen Sie in diese Datei diesen Code ein:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item
    android:bottom="8dp"
    android:left="-3dp"
    android:right="-3dp"
    android:top="-3dp">
    <shape android:shape="rectangle">
     <stroke
       android:width="1dp"
       android:color="@color/white"/>
     </shape>
   </item>
</layer-list>

Und in Ihrem EditText festlegen

android:background="@drawable/your_drawable"

Sie können mit Ihrer zeichnbaren XML spielen, Ecken, Polsterungen usw. festlegen.

Vulovic Vukasin
quelle
1
Dies ist wahrscheinlich die bessere Lösung, da es die vollständige Anpassung des EditText ermöglicht, ohne andere Komponenten in einem Stil oder Layout zu beeinflussen
mutable2112
Soweit ich weiß, können Sie einfach den Hintergrund des Edittext auf Weiß setzen
Rmanalo
Ich habe alle Lösungen durchgesehen, die ich finden konnte. Dies war die einzige, die für mich mit Android Material-Komponenten arbeitete.
Barney.balazs
9

Definieren Sie in Ihrem App-Stil die Eigenschaft colorAccent . Hier finden Sie ein Beispiel

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/action_bar</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/action_bar</item>
</style>
Roberto
quelle
5

Sie können die Farbe von EditText programmgesteuert ändern, indem Sie einfach diese Codezeile verwenden:

edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));

Matin Ashtiani
quelle
1
Funktioniert wie ein Zauber: D
Taslim Oseni
1

Verwenden Sie den folgenden Code, um die Hintergrundfarbe des Rahmens des Bearbeitungstextes zu ändern.

Erstellen Sie eine neue XML-Datei unter drawable.

abc.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#00000000" />
    <stroke android:width="1dip" android:color="#ffffff" />
</shape>

und füge es als Hintergrund deines Bearbeitungstextes hinzu

android:background="@drawable/abc"
InnocentKiller
quelle
Ich erwähnte, dass ich oben versucht hatte, eine Hintergrundfarbe einzustellen. es hat nicht funktioniert.
AndroidEnthusiast
1

Um die Farbe des Endergebnisses zu ändern, können Sie dies in Ihrem App-Thema verwenden:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">#ffe100</item>
    <item name="colorControlHighlight">#ffe100</item>
</style>

Um die Farbe des schwebenden Etiketts zu ändern, schreiben Sie folgendes Thema:

<style name="TextAppearence.App.TextInputLayout" parent="@android:style/TextAppearance">
<item name="android:textColor">#4ffd04[![enter image description here][1]][1]</item>
</style>

und verwenden Sie dieses Thema in Ihrem Layout:

 <android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp"
    app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout">

    <EditText
        android:id="@+id/edtTxtFirstName_CompleteProfileOneActivity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:capitalize="characters"
        android:hint="User Name"
        android:imeOptions="actionNext"
        android:inputType="text"
        android:singleLine="true"
        android:textColor="@android:color/white" />

</android.support.design.widget.TextInputLayout>

Geben Sie hier die Bildbeschreibung ein

SAndroidD
quelle
Fokussierter Bearbeitungstext hatte für mich immer noch die Grundfarbe Farbe, daher musste ich diesen Ansatz verwenden: stackoverflow.com/a/36543554/2413303
EpicPandaForce
1

Sie können dies mit AppCompatEditText und Farbauswahl tun:

            <androidx.appcompat.widget.AppCompatEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:backgroundTint="@color/selector_edittext_underline" />

selector_edittext_underline.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/focused_color" 
          android:state_focused="true" />
    <item android:color="@color/hint_color" />
</selector>
Gogi Bobina
quelle
0

Wenn Sie keine Geräte mit API <21 unterstützen müssen, verwenden Sie backgroundHint in XML, zum Beispiel:

 <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="Task Name"
            android:ems="10"
            android:id="@+id/task_name"
            android:layout_marginBottom="15dp"
            android:textAlignment="center"
            android:textColor="@android:color/white"

            android:textColorLink="@color/blue"
            android:textColorHint="@color/blue"
            android:backgroundTint="@color/lighter_blue" />

Verwenden Sie für besseren Support und Fallbacks die @ Akariuz-Lösung. backgroundHint ist die schmerzloseste Lösung, aber nicht abwärtskompatibel. Je nach Ihren Anforderungen können Sie einen Anruf tätigen.

MoMo
quelle
0

Ändern Sie colorAccentdie Farbe, für die diese Farbe eingestellt sein soll, colorAccentund führen Sie die Ausgabe aus

MD Khali
quelle
0

Ändern Sie einfach android: backgroundTint im XML-Code in Ihre Farbe

Marcus Runge
quelle