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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow