Wie kann ich die EditText-Leiste (die Prompt-Zeile mit den kleinen Serifen am Ende) ausblenden?
Möglicherweise gibt es eine bessere Möglichkeit, das zu tun, was ich möchte: Ich habe ein Layout mit einem EditText. Normalerweise wird dies gut angezeigt, wenn der Benutzer darauf tippen und mit der Eingabe oder Bearbeitung von Text beginnen kann.
Manchmal möchte ich jedoch dasselbe Layout verwenden (vereinfacht andere Logik), um dieselben Daten schreibgeschützt anzuzeigen. Ich möchte, dass die Präsentation ähnlich ist - sie sollte die gleiche Höhe und Schriftart haben, aber nicht die Unterleiste.
Als Stop-Gap-Maßnahme werde ich dies implementieren, indem ich den EditText entferne und eine TextView ersetze. Ich denke, das wird die gewünschten Ergebnisse bringen, aber es scheint ein Umweg zu sein, der eine teure Möglichkeit darstellt, etwas zu tun, das durch Ändern von Attributen einfach sein sollte.
Sie können EditText
so einstellen, dass eine benutzerdefinierte transparente Zeichnung erstellt wird, oder einfach verwenden
Android:background="@Android:color/transparent"
oder
Android:background="@null"
Hintergrund auf null setzen.
Android:background="@null"
Sie können den Wert von EditText
für backgroundTint
auf eine bestimmte Farbe festlegen. Wenn Sie die transparente Farbe einstellen, sollte die Unterleiste verschwunden sein.
Android:backgroundTint="@color/Transparent"
<color name="Transparent">#00000000</color>
Sie können dies jedoch in Api v21(Lollipop)
oder höher verwenden
Bitte stellen Sie Ihren edittext Hintergrund als ein
Android:background="#00000000"
Es wird klappen.
Sie können dies programmgesteuert mit setBackgroundResource
tun:
editText.setBackgroundResource(Android.R.color.transparent);
Verwenden einer der folgenden Eigenschaften:
Android:background="@null"
OR
Android:background="@Android:color/transparent"
arbeitete für mich, um die Unterstreichung des EditText zu verbergen.
Beachten Sie jedoch, dass es dann zu einem Abstandsproblem mit dem TextInputLayout kommt, das ich um das EditText
gelegt habe.
Hier ist eine Möglichkeit, es auszublenden, ohne die Standardauffüllung zu beschädigen:
fun View.setViewBackgroundWithoutResettingPadding(background: Drawable?) {
val paddingBottom = this.paddingBottom
val paddingStart = ViewCompat.getPaddingStart(this)
val paddingEnd = ViewCompat.getPaddingEnd(this)
val paddingTop = this.paddingTop
ViewCompat.setBackground(this, background)
ViewCompat.setPaddingRelative(this, paddingStart, paddingTop, paddingEnd, paddingBottom)
}
verwendungszweck:
editText.setViewBackgroundWithoutResettingPadding(null)
Was ich getan habe, war, eine Form zu erstellen, die gezeichnet werden kann, und diese als Hintergrund festzulegen:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<padding
Android:top="8dp"
Android:bottom="8dp"
Android:left="8dp"
Android:right="8dp" />
<solid Android:color="#fff" />
</shape>
Hinweis: Ich habe tatsächlich die Werte @dimen
und @color
für die Firelds verwendet, die Formdatei hier jedoch aus Gründen der Übersichtlichkeit vereinfacht.
Sie müssen auch eine minWidth einstellen, sonst verschwindet der Cursor, wenn der Text leer ist.
<EditText
Android:id="@+id/et_card_view_list_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:minWidth="30dp"
Android:layout_weight="1"
Android:inputType="text"
Android:text="Name"
Android:background="@Android:color/transparent"
/>
wenn Ihr Bearbeitungstext bereits einen Hintergrund hat, können Sie Folgendes verwenden.
Android:textCursorDrawable="@null"
Ich habe so etwas, was sehr, sehr nützlich ist:
generalEditText.getBackground().mutate().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);
dabei ist generalEditText mein EditText und die Farbe Weiß ist:
<color name="white">#ffffff</color>
Dadurch wird das Auffüllen nicht entfernt und Ihr EditText bleibt unverändert. Nur die unterste Zeile wird entfernt. Manchmal ist es sinnvoller, das so zu machen.
Wenn Sie Android:background="@null"
verwenden, verlieren Sie den Abstand und EditText wird kleiner. Zumindest war es mein Fall.
Eine kleine Randnotiz: Wenn Sie den Hintergrund auf null setzen und den oben angegebenen Java -Code ausprobieren, stürzt Ihre App direkt nach der Ausführung ab. (Weil es den Hintergrund erhält, aber null ist.) Es mag offensichtlich sein, aber ich denke, es ist wichtig, darauf hinzuweisen.
Einfach verwenden
editText.setBackgroundColor(Color.TRANSPARENT);
Wenn sich dies auf alle Instanzen von EditText und auf alle Klassen auswirken soll, die von EditText erben, sollten Sie in Ihrem Design den Wert für das Attribut editTextBackground festlegen.
<item name="Android:editTextBackground">@drawable/bg_no_underline</item>
Ein Beispiel für das Zeichenprogramm, das ich verwende, ist:
<inset xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
Android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
Android:insetTop="@dimen/abc_edit_text_inset_top_material"
Android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
<selector>
<item Android:drawable="@Android:color/transparent"/>
</selector>
</inset>
Dies ist eine leicht geänderte Version der Standardimplementierung für das Materialdesign.
Wenn es angewendet wird, entfernt Ihr gesamter EditText die Unterstreichung in der gesamten App, und Sie müssen den Stil nicht für jeden einzelnen manuell anwenden.
Ich habe das Neugierigste entdeckt! Wenn Sie die Datenbindung auf null
setzen: Android:background="@{null}"
Dann wird nicht nur der Hintergrund entfernt, sondern die Ansicht weist immer noch den Abstand auf, der aus dem Standardhintergrund berechnet wurde. Aus irgendeinem Grund löscht die verspätete Null-Einstellung die Polsterung nicht aus dem vorherigen Hintergrund. Die Auffüllung in der Ansicht ist links/oben/rechts 4dp, unten 13dp (ab Emulatorstufe 21).
Möglicherweise ist das Endergebnis nicht auf allen API-Ebenen gleich, seien Sie also vorsichtig! Jemand sagt mir, ob Sie dies testen und für zuverlässig halten. (Beachten Sie auch, dass das untere Auffüllen aufgrund der Unterstreichung im Original hervorsteht. Daher sollten Sie es wahrscheinlich im XML-Code ändern oder im Code zurücksetzen, nachdem es auf "Gleich oben" geladen wurde.).
Sie können auch einen STIL für Ihren editText definieren, um alle Eigenschaften gemeinsam zu gruppieren. Es ist sehr leistungsfähig, wenn Sie Text mehrfach bearbeiten müssen, um das Verhalten zu haben
Fügen Sie den Code in die Datei res/values / styles.xml ein
<style name="MyEditTextStyle" parent="@Android:style/TextAppearance.Widget.EditText"> <item name="Android:background">@color/transparence</item> //NO UNDERBAR <item name="Android:maxLines">1</item> <item name="Android:height">28dp</item> //COMMON HEIGHT </style>
Danach müssen Sie es nur noch in Ihrem editText aufrufen
<EditText
Android:id="@+id/edit1"
style="@style/MyEditTextStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
<EditText
Android:id="@+id/edit2"
style="@style/MyEditTextStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
Verwenden Sie programmgesteuert: editText.setBackground(null)
Aus xml
verwenden Sie: Android:background="@null"
Android:background="@Android:color/transparent"
Oder
Android:background="@null"
In meinem Fall ist editText.setBackgroundResource(R.color.transparent);
am besten.
Das Standardpolster wird nicht entfernt, nur unter dem Balken.
R.color.transparent = #00000000
Hintergrund auf null setzen
Android:background="@null" in your xml
wenn Sie Hintergrund verwenden, müssen Sie dieses Tag verwenden
Android:testCursorDrawable="@null"