Android
Text bearbeiten
Suche…
Mit EditTexts arbeiten
Der EditText ist das Standard-Widget für Texteingabe in Android-Apps. Wenn der Benutzer Text in eine App eingeben muss, ist dies der primäre Weg, dies zu tun.
Text bearbeiten
Es gibt viele wichtige Eigenschaften, die festgelegt werden können, um das Verhalten eines EditText anzupassen. Einige davon sind unten aufgeführt. Weitere Informationen zum Eingabefeld finden Sie im offiziellen Textfeldleitfaden.
Verwendungszweck
Ein EditText wird einem Layout mit allen Standardverhalten mit dem folgenden XML hinzugefügt:
<EditText
android:id="@+id/et_simple"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</EditText>
Beachten Sie, dass ein EditText lediglich eine dünne Erweiterung der TextView ist und alle gleichen Eigenschaften erbt.
Den Wert abrufen
Den Wert des in einen EditText eingegebenen Textes lautet wie folgt:
EditText simpleEditText = (EditText) findViewById(R.id.et_simple);
String strValue = simpleEditText.getText().toString();
Weitere Anpassung des Eintrags
Möglicherweise möchten Sie den Eintrag auf eine einzeilige Textzeile beschränken (Zeilenumbrüche vermeiden):
<EditText
android:singleLine="true"
android:lines="1"
/>
Sie können die Zeichen, die in ein Feld eingegeben werden können, mithilfe des Ziffernattributs einschränken:
<EditText
android:inputType="number"
android:digits="01"
/>
Dies würde die eingegebenen Ziffern auf "0" und "1" beschränken. Vielleicht möchten Sie die Gesamtzahl der Zeichen mit:
<EditText
android:maxLength="5"
/>
Mit diesen Eigenschaften können wir das erwartete Eingabeverhalten für Textfelder definieren.
Farben einstellen
Sie können die Hintergrundfarbe für hervorgehobenen Text innerhalb eines EditText mit der Eigenschaft android:textColorHighlight
:
<EditText
android:textColorHighlight="#7cff88"
/>
Anzeigen von Platzhalterhinweisen
Möglicherweise möchten Sie den Hinweis für das EditText-Steuerelement festlegen, um einen Benutzer zur Eingabe bestimmter Eingaben aufzufordern:
<EditText
...
android:hint="@string/my_hint">
</EditText>
Hinweise
Ändern der Farbe der unteren Zeile
Wenn Sie die AppCompat-Bibliothek verwenden, können Sie die Stile colorControlNormal, colorControlActivated und colorControlHighlight überschreiben:
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorControlNormal">#d32f2f</item>
<item name="colorControlActivated">#ff5722</item>
<item name="colorControlHighlight">#f44336</item>
</style>
Wenn diese Stile nicht in einem DialogFragment angewendet werden, liegt ein bekannter Fehler vor, wenn der LayoutInflater an die onCreateView () - Methode übergeben wird.
Das Problem wurde bereits in der AppCompat v23-Bibliothek behoben. In dieser Anleitung erfahren Sie, wie Sie ein Upgrade durchführen. Eine weitere temporäre Problemumgehung besteht darin, den Layout-Inflator der Aktivität anstelle desjenigen zu verwenden, der an die onCreateView () -Methode übergeben wird:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment, container);
}
Auf EditText-Eingabe warten
In den Cliffnotes der grundlegenden Ereignis-Listener erfahren Sie, wie Sie Änderungen an einem EditText überwachen und eine Aktion ausführen, wenn diese Änderungen auftreten.
Anzeige des Floating Label Feedbacks
Traditionell verbirgt der EditText die Hinweisnachricht (oben erläutert), nachdem der Benutzer mit der Eingabe begonnen hat. Außerdem mussten eventuelle Überprüfungsfehlermeldungen vom Entwickler manuell verwaltet werden.
Mit dem TextInputLayout
Sie ein Floating-Label TextInputLayout
, um Hinweise und Fehlermeldungen anzuzeigen. Weitere Details finden Sie hier .
Anpassen des InputType
Textfelder können unterschiedliche Eingabetypen haben, z. B. Nummer, Datum, Kennwort oder E-Mail-Adresse. Der Typ bestimmt, welche Art von Zeichen innerhalb des Feldes zulässig sind, und fordert die virtuelle Tastatur möglicherweise auf, ihr Layout für häufig verwendete Zeichen zu optimieren.
Standardmäßig werden alle Textinhalte in einem EditText
Steuerelement als EditText
Text angezeigt. Durch das Setzen des inputType
Attributs können wir die Eingabe verschiedener Arten von Informationen wie Telefonnummern und Kennwörtern erleichtern:
<EditText
...
android:inputType="phone">
</EditText>
Zu den häufigsten Eingabetypen gehören:
Art | Beschreibung |
---|---|
textUri | Text, der als URI verwendet wird |
textEmailAddress | Text, der als E-Mail-Adresse verwendet wird |
textPersonName | Text, der der Name einer Person ist |
textPassword | Text, der ein Kennwort ist, das verdeckt werden soll |
Nummer | Nur ein numerisches Feld |
Telefon | Zur Eingabe einer Telefonnummer |
Datum | Zur Eingabe eines Datums |
Zeit | Zur Eingabe einer Zeit |
textMultiLine | Erlauben Sie mehrere Textzeilen im Feld |
Mit dem android:inputType
können Sie auch bestimmte Tastaturverhalten angeben, z. B. ob Sie alle neuen Wörter groß android:inputType
oder Funktionen wie die automatische Vervollständigung und Vorschläge zur Rechtschreibung verwenden möchten.
Hier sind einige der häufigsten Eingabetypwerte, die das Tastaturverhalten definieren:
Art | Beschreibung |
---|---|
textCapSentences | Normale Texttastatur, bei der der erste Buchstabe für jeden neuen Satz großgeschrieben wird |
textCapWords | Normale Texttastatur, die jedes Wort großschreibt. Gut für Titel oder Personennamen |
textAutoCorrect | Normale Texttastatur, die häufig falsch geschriebene Wörter korrigiert |
Sie können bei Bedarf mehrere inputType
Attribute inputType
(getrennt durch '|').
Beispiel:
<EditText
android:id="@+id/postal_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/postal_address_hint"
android:inputType="textPostalAddress|
textCapWords|
textNoSuggestions" />
Eine Liste aller verfügbaren Eingabetypen finden Sie hier .
Attribut "Eingabetyp"
inputype
Attribut in EditText
Widget: (getestet unter Android 4.4.3 und 2.3.3)
<EditText android:id="@+id/et_test" android:inputType="?????"/>
textLongMessage = Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: ja. Fall: Kleinbuchstaben Vorschlag: ja. Hinzufügen. verkohlt:, und. und alles
textFilter = Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: ja. Fall: Kleinbuchstaben Vorschlag: nein . Hinzufügen. verkohlt:, und. und alles
textCapWords = Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: ja. Fall: Kamel Fall . Vorschlag: ja. Hinzufügen. verkohlt:, und. und alles
textCapSentences = Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: ja. Fall: Satzfall . Vorschlag: ja. Hinzufügen. verkohlt:, und. und alles
Zeit = Tastatur: numerisch. Eingabetaste: Senden / Weiter. Emotion: nein. Fall: -. Vorschlag: nein . Hinzufügen. Zeichen::
textMultiLine = Tastatur: Alphabet / Standard. Eingabetaste: nächste Zeile . Emotion: ja. Fall: Kleinbuchstaben Vorschlag: ja. Hinzufügen. verkohlt:, und. und alles
number = Tastatur: numerisch . Eingabetaste: Senden / Weiter. Emotion: nein. Fall: -. Vorschlag: nein. Hinzufügen. Zeichen: nichts
textEmailAddress = Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: nein . Fall: Kleinbuchstaben Vorschlag: nein . Hinzufügen. Zeichen: @ und . und alles
(Kein Typ) = Tastatur: Alphabet / Standard. Eingabetaste: nächste Zeile . Emotion: ja. Fall: Kleinbuchstaben Vorschlag: ja. Hinzufügen. verkohlt:, und. und alles
textPassword = Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: nein. Fall: Kleinbuchstaben Vorschlag: nein . Hinzufügen. verkohlt:, und. und alles
Text = Tastatur: Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: ja. Fall: Kleinbuchstaben Vorschlag: ja. Hinzufügen. verkohlt:, und. und alles
textShortMessage = Tastatur: Alphabet / Standard. Eingabetaste: Emotion . Emotion: ja. Fall: Kleinbuchstaben Vorschlag: ja. Hinzufügen. verkohlt:, und. und alles
textUri = Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: nein. Fall: Kleinbuchstaben Vorschlag: nein . Hinzufügen. Zeichen: / und . und alles
textCapCharacters = Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: ja. Fall: GROSSBUCHSTABEN . Vorschlag: ja. Hinzufügen. verkohlt:, und. und alles
Telefon = Tastatur: numerisch . Eingabetaste: Senden / Weiter. Emotion: nein. Fall: -. Vorschlag: nein . Hinzufügen. Zeichen: *** #. - / () WPN, + **
textPersonName = Tastatur: Alphabet / Standard. Eingabetaste: Senden / Weiter. Emotion: ja. Fall: Kleinbuchstaben Vorschlag: ja. Hinzufügen. verkohlt:, und. und alles
Hinweis: Die Einstellung für die Auto-capitalization
ändert das Standardverhalten.
Hinweis 2: In der Numeric keyboard
sind ALLE Zahlen Englisch 1234567890.
Hinweis 3: Die Correction/Suggestion
ändert das Standardverhalten.
Softkeyboard ausblenden
Das Ausblenden des Softkeyboards ist normalerweise eine Grundvoraussetzung, wenn Sie mit EditText arbeiten. Das Softkeyboard kann standardmäßig nur durch Drücken der Zurück-Taste geschlossen werden. Daher verwenden die meisten Entwickler InputMethodManager , um Android dazu zu zwingen, die virtuelle Tastatur auszublenden, indem es hideSoftInputFromWindow aufruft und das Token des Fensters mit der fokussierten Ansicht übergibt. Der Code, um Folgendes zu tun:
public void hideSoftKeyboard()
{
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
Der Code ist direkt, aber ein weiteres großes Problem ist, dass die Hide-Funktion aufgerufen werden muss, wenn ein Ereignis auftritt. Was ist zu tun, wenn das Softkeyboard beim Drücken an einer anderen Stelle als Ihrem EditText ausgeblendet werden muss? Der folgende Code enthält eine übersichtliche Funktion, die in Ihrer onCreate () - Methode nur einmal aufgerufen werden muss.
public void setupUI(View view)
{
String s = "inside";
//Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard();
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
Symbol oder Schaltfläche in Custom Edit Text und dessen Aktion und klicken auf Listener.
In diesem Beispiel wird der Text bearbeiten mit dem Symbol auf der rechten Seite angezeigt.
Hinweis: In diesem Beispiel verwende ich setCompoundDrawablesWithIntrinsicBounds. Wenn Sie also die Symbolposition ändern möchten, können Sie dies mithilfe von setCompoundDrawablesWithIntrinsicBounds in setIcon erreichen.
public class MKEditText extends AppCompatEditText {
public interface IconClickListener {
public void onClick();
}
private IconClickListener mIconClickListener;
private static final String TAG = MKEditText.class.getSimpleName();
private final int EXTRA_TOUCH_AREA = 50;
private Drawable mDrawable;
private boolean touchDown;
public MKEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MKEditText(Context context) {
super(context);
}
public MKEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void showRightIcon() {
mDrawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_android_black_24dp);
setIcon();
}
public void setIconClickListener(IconClickListener iconClickListener) {
mIconClickListener = iconClickListener;
}
private void setIcon() {
Drawable[] drawables = getCompoundDrawables();
setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], mDrawable, drawables[3]);
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setSelection(getText().length());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
final int right = getRight();
final int drawableSize = getCompoundPaddingRight();
final int x = (int) event.getX();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA) {
touchDown = true;
return true;
}
break;
case MotionEvent.ACTION_UP:
if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA && touchDown) {
touchDown = false;
if (mIconClickListener != null) {
mIconClickListener.onClick();
}
return true;
}
touchDown = false;
break;
}
return super.onTouchEvent(event);
}
}
Wenn Sie den Touch-Bereich ändern möchten, können Sie den Standardwert für EXTRA_TOUCH_AREA ändern, den ich als 50 angegeben habe.
Und für Aktivieren Sie den Button und klicken Sie auf Listener, den Sie von Ihrer Aktivität oder Ihrem Fragment aus aufrufen können.
MKEditText mkEditText = (MKEditText) findViewById(R.id.password);
mkEditText.showRightIcon();
mkEditText.setIconClickListener(new MKEditText.IconClickListener() {
@Override
public void onClick() {
// You can do action here for the icon.
}
});