Ich verwende Appcompat v7, um ein einheitliches Erscheinungsbild für Android 5 und weniger zu erzielen. Es funktioniert ziemlich gut. Ich kann jedoch nicht herausfinden, wie ich die Grundfarbe und die Akzentfarbe für EditTexts ändern kann. Ist es möglich?
Ich habe versucht, eine benutzerdefinierte android:editTextStyle
Farbe zu definieren (siehe unten), aber es ist mir nur gelungen, die vollständige Hintergrund- oder Textfarbe zu ändern, nicht jedoch die untere Zeile oder die Akzentfarbe. Gibt es einen bestimmten zu verwendenden Eigenschaftswert? Muss ich ein benutzerdefiniertes Zeichenbild über die android:background
Eigenschaft verwenden? Ist es nicht möglich, eine Farbe in Hexa anzugeben?
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:editTextStyle">@style/Widget.App.EditText</item>
</style>
<style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
???
</style>
Laut Quellen der Android API 21 scheinen EditTexts mit Materialdesign colorControlActivated
und zu verwenden colorControlNormal
. Daher habe ich versucht, diese Eigenschaften in der vorherigen Stildefinition zu überschreiben, aber es hat keine Auswirkung. Wahrscheinlich verwendet Appcompat es nicht. Leider kann ich die Quellen für die letzte Version von appcompat mit Materialdesign nicht finden.
AppCompatEditText
anscheinend verlängern.Antworten:
Endlich habe ich eine Lösung gefunden. Es besteht lediglich aus Überschreiben der Wert für
colorControlActivated
,colorControlHighlight
undcolorControlNormal
in der App Thema Definition und nicht Ihre EditText Stil. Denken Sie dann daran, dieses Thema für jede gewünschte Aktivität zu verwenden. Unten ist ein Beispiel:quelle
android:theme="@style/Theme.App.Base
. Dadurch wird sichergestellt, dass der Stil nicht auch andere Ansichten in Ihren Layouts beeinflusst, die Sie nicht ändern möchten.AppCompatActivity
. Es wird nicht funktionieren, wenn es von erbtActivity
.Ich hatte das Gefühl, dass dies eine Antwort brauchte, falls jemand nur einen einzigen Edittext ändern wollte. So mach ich es:
quelle
Die Laurents-Lösung ist zwar korrekt, weist jedoch einige Nachteile auf, wie in den Kommentaren beschrieben, da nicht nur das Endergebnis des
EditText
getönt wird, sondern auch der Zurück-Button desToolbar
,CheckBoxes
usw. als auch.Zum Glück
v22.1
von einappcompat-v7
paar neue Möglichkeiten vorgestellt. Jetzt ist es möglich, ein bestimmtes Thema nur einer Ansicht zuzuweisen. Direkt aus dem Changelog :Anstatt die gewünschte Farbe in einem globalen Thema festzulegen, erstellen wir eine neue und weisen sie nur dem zu
EditText
.Beispiel:
quelle
colorControlNormal
Ohne das Android-Präfix werden Widgets mithilfe der Appcompat-Methode getönt, während mit dem Präfix auf die Systemmethode zurückgegriffen wird. Dies ist nur auf API 21+ -Geräten verfügbar.22.2.0
Version von AppCompat, aber dieser Trick funktioniert nicht :(Dies kann in XML geändert werden, indem Folgendes verwendet wird:
Verwenden Sie für die Referenz-API> = 21 Kompatibilität:
Verwenden Sie für die Abwärts-API <21-Kompatibilität Folgendes:
quelle
backgroundTint="@color/blue"
anstelleandroid:backgroundTint="@color/blue"
für abwärtskompatible Unterstützungandroid:backgroundTint="@color/blue"
,app:backgroundTint="@color/blue"
um Pre-Lollipop-Geräte zu unterstützen, danke für Ihren Kommentar!tools:ignore="MissingPrefix"
wenn eine rote Unterstreichung Pop unterapp:backgroundTint="<your color>"
Hier ist die Lösung für API <21 und höher
Hoffe es hilft
quelle
24.2.1
,25.1.1
,25.2.0
für Gerät <21 und> 21 und es noch funktioniert. Bitte überprüfen Sie diese einfache Demo drive.google.com/file/d/0B_poNaia6t8kSzU3bDFVazRSSDA/… . Ich weiß nicht, warum dieser Code für Sie nicht funktioniert. Bitte lassen Sie es mich wissen. Vielen DankDie akzeptierte Antwort ist etwas mehr pro Stilbasis , aber am effizientesten ist es, das colorAccent- Attribut wie folgt in Ihren AppTheme-Stil einzufügen:
Das colorAccent-Attribut wird für die Widget-Tönung in der gesamten App verwendet und sollte daher aus Gründen der Konsistenz verwendet werden
quelle
name="android:colorAccent"
fälschlicherweise verwendetWenn Sie verwenden
appcompat-v7:22.1.0+
, können Sie den DrawableCompat verwenden, um Ihre Widgets zu tönenquelle
Verwenden:
Dies unterstützt Pre-Lollipop-Geräte nicht nur +21
quelle
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
und es sollte funktionierenquelle
Eine schnelle Lösung für Ihr Problem besteht darin, in Ihrem Paket / build / intermediates / exploded-aar / com.android.support / appcompat-v7 / res / drawable / nach abc_edit_text_material.xml zu suchen und diese XML-Datei in Ihren Zeichenordner zu kopieren. Anschließend können Sie die Farbe der 9 Patch-Dateien in diesem Selektor ändern, um sie Ihren Einstellungen anzupassen.
quelle
Es ist sehr einfach, einfach ein
android:backgroundTint
Attribut in Ihr hinzuzufügenEditText
.quelle
app:backgroundTint="@color/blue"
funktioniert auf allen API-Ebenen .. obwohl es aus irgendeinem Grund immer noch eine andere FarbeHier ist ein Teil des Quellcodes der
TextInputLayout
Support Design Library ( AKTUALISIERT für Version 23.2.0 ), mit dem dieEditText
Grundfarbe auf einfachere Weise geändert wird :Es scheint, dass der gesamte obige Code in 23.2.0 derzeit unbrauchbar wird, wenn Sie die Farbe programmgesteuert ändern möchten.
Und wenn Sie alle Plattformen unterstützen möchten, ist hier meine Methode:
quelle
Auch ich war zu lange mit diesem Problem beschäftigt.
Ich benötigte eine Lösung, die für Versionen über und unter Version 21 funktioniert.
Endlich habe ich eine sehr einfache, vielleicht nicht ideale, aber effektive Lösung gefunden: Setzen Sie einfach die Hintergrundfarbe
transparent
in den EditText-Eigenschaften auf.Ich hoffe das spart jemandem etwas Zeit.
quelle
Für mich habe ich sowohl das AppTheme als auch einen Wert color.xml geändert. Sowohl colorControlNormal als auch colorAccent haben mir geholfen, die Rahmenfarbe von EditText zu ändern. Sowie der Cursor und das "|" in einem EditText.
Hier ist die colours.xml
Ich habe das Attribut android: textCursorDrawable für @null entfernt, das ich im editText-Stil platziert habe. Wenn ich dies versuchte, änderten sich die Farben nicht.
quelle
Sie können den Hintergrund von edittext auf ein Rechteck mit Minus-Auffüllung links, rechts und oben setzen, um dies zu erreichen. Hier ist das XML-Beispiel:
Ersetzen Sie die Form durch einen Selektor, wenn Sie für fokussierten Edittext eine andere Breite und Farbe bereitstellen möchten.
quelle
Fügen Sie in Activit.XML den Code hinzu
Wo
BackgroundTint=color
für Ihre gewünschte Farbequelle
Ich verwende diese Methode, um die Farbe der Linie mit PorterDuff zu ändern, ohne dass eine andere Zeichnung möglich ist.
quelle
Wenn Sie das Endergebnis ändern möchten, ohne App-Farben zu verwenden, verwenden Sie diese Zeilen in Ihrem Thema:
Ich kenne keine andere Lösung.
quelle
Ich habe nach 2 Tagen Kampf eine funktionierende Lösung für dieses Problem erarbeitet. Die folgende Lösung ist perfekt für diejenigen, die nur wenige Bearbeitungstexte ändern, die Farbe durch Java-Code ändern / umschalten und die Probleme unterschiedlichen Verhaltens bei Betriebssystemversionen überwinden möchten aufgrund der Verwendung der setColorFilter () -Methode.
Verwendet in XML
Fügen Sie stilvolle Linien hinzu
Java-Code zum Umschalten der Farbe
quelle
Ich war absolut verblüfft über dieses Problem. Ich hatte alles in diesem Thread und in anderen ausprobiert, aber egal was ich tat, ich konnte die Farbe der Unterstreichung nicht in etwas anderes als das Standardblau ändern.
Ich fand endlich heraus, was los war. Ich habe (fälschlicherweise)
android.widget.EditText
beim Erstellen einer neuen Instanz verwendet (aber der Rest meiner Komponenten stammte aus der Appcompat-Bibliothek). Ich hätte verwenden sollenandroid.support.v7.widget.AppCompatEditText
. Ich ersetztenew EditText(this)
mitnew AppCompatEditText(this)
und das Problem wurde sofort gelöst. Es stellt sich heraus, dass, wenn Sie tatsächlich verwendenAppCompatEditText
, nur dasaccentColor
von Ihrem Thema (wie in mehreren Kommentaren oben erwähnt) berücksichtigt wird und keine zusätzliche Konfiguration erforderlich ist.quelle
Dies ist die einfachste und effizienteste / wiederverwendbare / funktioniert auf allen APIs.
Erstellen Sie eine benutzerdefinierte EditText-Klasse wie folgt:
Dann benutze es so:
quelle
Um den EditText-Hintergrund dynamisch zu ändern, können Sie ColorStateList verwenden .
Credits: Diese SO-Antwort zu ColorStateList ist fantastisch .
quelle
Fügen Sie
app:backgroundTint
für unter api Ebene 21 Ansonsten verwendenandroid:backgroundTint
.Für unter API Level 21.
Für höher als API Level 21.
quelle
Bitte ändern Sie diese Methode nach Ihren Wünschen. Das hat bei mir funktioniert!
quelle