Wie lösche ich einen EditText beim Klicken?

Lesezeit: 6 Minuten

Benutzer-Avatar
Entropie1024

Wie kann ich in Android eine EditText klar, wenn es geklickt wird?

Wenn ich zB eine habe EditText mit einigen Zeichen, wie z 'Enter Name'wenn der Benutzer darauf klickt, verschwinden diese Zeichen.

  • Schritt 1: Fügen Sie dem EditText einen onClick-Listener hinzu. Schritt 2: Setzen Sie im Listener den EditText-Inhalt auf einen leeren String. Schritt 3: Profitieren Sie

    – Markus B

    14. November 2010 um 0:10 Uhr

  • Leute, sparen Sie sich etwas Zeit und lesen Sie die Antwort von Specur, die die akzeptierte Antwort hier sein sollte stackoverflow.com/a/4175442/360211

    – Westen

    2. Juni 2013 um 10:31 Uhr

Ich bin mir nicht sicher, ob Sie danach suchen, aber versuchen Sie es mit diesem XML:

android:hint="Enter Name"

Dieser Text wird angezeigt, wenn das Eingabefeld leer, ausgewählt oder nicht ausgewählt ist.

Oder wenn Sie möchten, dass es genau so funktioniert, wie Sie es beschrieben haben, weisen Sie dem editText einen onClickListener zu und setzen Sie ihn mit setText() leer.

Benutzer-Avatar
Elia

Suchen Sie nach einem ähnlichen Verhalten wie das x, das auf der rechten Seite von Textfeldern auf einem iPhone angezeigt wird, das den Text löscht, wenn es angetippt wird? Dort heißt es clearButtonMode. So erstellen Sie dieselbe Funktionalität in einer Android-EditText-Ansicht:

String value = "";//any text you are pre-filling in the EditText

final EditText et = new EditText(this);
et.setText(value);
final Drawable x = getResources().getDrawable(R.drawable.presence_offline);//your x image, this one from standard android images looks pretty good actually
x.setBounds(0, 0, x.getIntrinsicWidth(), x.getIntrinsicHeight());
et.setCompoundDrawables(null, null, value.equals("") ? null : x, null);
et.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (et.getCompoundDrawables()[2] == null) {
            return false;
        }
        if (event.getAction() != MotionEvent.ACTION_UP) {
            return false;
        }
        if (event.getX() > et.getWidth() - et.getPaddingRight() - x.getIntrinsicWidth()) {
            et.setText("");
            et.setCompoundDrawables(null, null, null, null);
        }
        return false;
    }
});
et.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        et.setCompoundDrawables(null, null, et.getText().toString().equals("") ? null : x, null);
    }

    @Override
    public void afterTextChanged(Editable arg0) {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }
});

  • Und für meine Version dieses Codes, der alle verschiedenen Textfeld-Clearbutton-Optionen implementiert, siehe hier stackoverflow.com/questions/6274021/…

    – Elia

    12. Juli 2011 um 20:49 Uhr


  • Das ist absolut großartig. Wenn Sie wie ich bereits ein zusammengesetztes Drawable verwenden (ein Suchsymbol links neben dem Bearbeitungstext), ist zur Unterstützung ein wenig Bearbeitung erforderlich. Ich habe unten eine Version davon als Unterklasse von EditText gepostet.

    – Carlo P

    6. Januar 2012 um 10:53 Uhr

  • Hinweis: Wenn Ihr Symbol größer als EditText ist und Sie nicht möchten, dass die Größe von EditText beim Löschen oder Hinzufügen von Text ständig geändert wird, setzen Sie den Zeichensatz Alpha auf 0 oder 255, je nach Fall

    – Daiwik Daarun

    8. Juli 2014 um 18:15 Uhr


  • Weitere Hinweise: 1.) Die Lösung von Harris kann mit einem OnFocusChangeListener kombiniert werden, sodass das Symbol nur angezeigt wird, wenn der EditText gerade bearbeitet wird. 2.) Die Bedingungen des onTouchListeners können zu einer Bedingung zusammengefasst werden (etwas einfacher zu lesen). 3.) habe ich auch hinzugefügt v.playSoundEffect(SoundEffectConstants.CLICK) an den onTouchListener für ein akustisches Feedback, wenn der Text entfernt wird.

    – AustrianDude

    21. November 2014 um 14:24 Uhr


  • In OnTouchListener.onTouch() sollten Sie höchstwahrscheinlich “true” zurückgeben, wenn Sie das Feld löschen.

    – Nordmann

    2. Januar 2016 um 22:22 Uhr


Benutzer-Avatar
Rahul Baradia

Führen Sie nach dem Klicken auf eine beliebige Aktion den folgenden Schritt aus

((EditText) findViewById(R.id.yoursXmlId)).setText("");

oder

Schreiben Sie dies in eine XML-Datei

<EditText
---------- other stuffs ------ 
android:hint="Enter Name" /> 

es funktioniert gut für mich. Hoffe auf euch alle.

  • Die einfachste und genauere Antwort. Vielen Dank!

    – Luigi Siri

    13. Juli 2012 um 19:18 Uhr

das nennt sich hint in android use android:hint=”Enter Name”

Die Antwort von @Harris ist großartig, ich habe sie als separate Unterklasse von EditText implementiert, was die Verwendung vereinfachen kann, wenn Ihr Code bereits TextChangedListeners hinzufügt.

Außerdem habe ich es so optimiert, dass, wenn Sie bereits Compound Drawables verwenden, diese intakt bleiben.

Code ist hier, für alle, die ihn brauchen:

package com.companyname.your

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;

public class ClearableEditText extends EditText {

    public String defaultValue = "";
    final Drawable imgX = getResources().getDrawable(android.R.drawable.presence_offline ); // X image


    public ClearableEditText(Context context) {
        super(context);

        init();
    }

    public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        init();
    }

    public ClearableEditText(Context context, AttributeSet attrs) {
        super(context, attrs);

        init();
    }


    void init()  {

        // Set bounds of our X button
        imgX.setBounds(0, 0, imgX.getIntrinsicWidth(), imgX.getIntrinsicHeight());      

        // There may be initial text in the field, so we may need to display the button
        manageClearButton();

        this.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                ClearableEditText et = ClearableEditText.this;

                // Is there an X showing?
                if (et.getCompoundDrawables()[2] == null) return false;
                // Only do this for up touches
                if (event.getAction() != MotionEvent.ACTION_UP) return false;
                // Is touch on our clear button?
                if (event.getX() > et.getWidth() - et.getPaddingRight() - imgX.getIntrinsicWidth()) {
                    et.setText("");
                    ClearableEditText.this.removeClearButton();
                }
                return false;
            }
        });

        this.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                ClearableEditText.this.manageClearButton();
            }

            @Override
            public void afterTextChanged(Editable arg0) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
        });
    }

    void manageClearButton() {
        if (this.getText().toString().equals("") )
            removeClearButton();
        else
            addClearButton();
    }
    void addClearButton() {
        this.setCompoundDrawables(this.getCompoundDrawables()[0], 
                this.getCompoundDrawables()[1],
                imgX,
                this.getCompoundDrawables()[3]);
    }
    void removeClearButton() {
        this.setCompoundDrawables(this.getCompoundDrawables()[0], 
                this.getCompoundDrawables()[1],
                null,
                this.getCompoundDrawables()[3]);
    }

}

  • In OnTouchListener.onTouch() sollten Sie “true” zurückgeben, wenn Sie das Feld löschen. Dies zeigt an, dass Sie das Ereignis gemäß der OnTouchListener-Spezifikation verbraucht haben.

    – Nordmann

    2. Januar 2016 um 22:27 Uhr

Benutzer-Avatar
Scooter

Wenn Sie Text im Bearbeitungstext haben und ihn wie gesagt entfernen möchten, versuchen Sie Folgendes:

    final EditText text_box = (EditText) findViewById(R.id.input_box);
    text_box.setOnFocusChangeListener(new OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View v, boolean hasFocus) 
        {
            if (hasFocus==true)
            {
                if (text_box.getText().toString().compareTo("Enter Text")==0)
                {
                    text_box.setText("");
                }
            }
        }
    });

  • In OnTouchListener.onTouch() sollten Sie “true” zurückgeben, wenn Sie das Feld löschen. Dies zeigt an, dass Sie das Ereignis gemäß der OnTouchListener-Spezifikation verbraucht haben.

    – Nordmann

    2. Januar 2016 um 22:27 Uhr

Benutzer-Avatar
andymal

Seien Sie vorsichtig, wenn Sie Text mit einem onClick-Listener in dem Feld festlegen, in dem Sie den Text festlegen. Ich tat dies und setzte den Text auf eine leere Zeichenfolge. Dies führte dazu, dass der Zeiger auftauchte, um anzuzeigen, wo sich mein Cursor befand, was normalerweise nach einigen Sekunden verschwindet. Wenn ich nicht darauf gewartet habe, dass es verschwindet, bevor ich meine Seite verlasse, was zum Aufruf von finish() führt, führt dies zu einem Speicherleck und zum Absturz meiner App. Es hat eine Weile gedauert, bis ich herausgefunden habe, was den Absturz verursacht hat.

Wie auch immer, ich würde empfehlen, selectAll() in Ihrem On-Click-Listener zu verwenden, anstatt setText(), wenn Sie können. Auf diese Weise kann der Benutzer, sobald der Text ausgewählt ist, mit der Eingabe beginnen, und der gesamte vorherige Text wird gelöscht.

Bild des verdächtigen Zeigers: http://i.stack.imgur.com/juJnt.png

1245000cookie-checkWie lösche ich einen EditText beim Klicken?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy