Wählen Sie den gesamten Text in EditText aus, wenn er fokussiert wird

230

Ich habe einen EditText mit einem Dummy-Text. Wenn der Benutzer darauf klickt, möchte ich, dass es ausgewählt wird, damit der Dummy-Text gelöscht wird, wenn der Benutzer mit der Eingabe beginnt.

Wie kann ich das erreichen?

Galip
quelle

Antworten:

517

Sie können in Ihrer main.xmlDatei versuchen :

android:selectAllOnFocus="true"

Oder verwenden Sie in Java

editText.setSelectAllOnFocus(true);
TheCottonSilk
quelle
17
Ich habe gerade erfahren, dass dies nicht funktioniert, wenn in der EditText-XML ein </ requestFocus> -Tag vom UI-Builder eingefügt ist.
machtnix
@machtnix Fokus zu einer anderen Komponente hinzufügen
Liebe
160
editText.setSelectAllOnFocus(true);

Dies funktioniert, wenn Sie es programmgesteuert ausführen möchten.

Creftos
quelle
2
Auch für mich .. die obige Lösung hat irgendwie nicht funktioniert .. die programmatisch funktioniert
Martin Christmann
3
Für diejenigen, die immer noch Probleme mit der oben akzeptierten Antwort haben: Versuchen Sie stattdessen diese. Bestätigt zu funktionieren (auch getestet für Fragments).
MrHadiSatrio
Aus irgendeinem seltsamen Grund funktionierte xml way nicht richtig und dies auch. Sieht aus wie ein Fehler im SDK.
Ar-g
Und wenn Sie programmgesteuert fokussieren ( editText.requestFocus()Problem im editText.clearFocus()Voraus, um sicherzustellen, dass die gewünschte Aktion in dem Fall erfolgt, in dem die Ansicht bereits fokussiert ist
Bad Loser
33
EditText dummy = ... 

// android.view.View.OnFocusChangeListener
dummy.setOnFocusChangeListener(new OnFocusChangeListener(){
    public void onFocusChange(View v, boolean hasFocus){
        if (hasFocus) && (isDummyText())
            ((EditText)v).selectAll();
    }
});
xandy
quelle
Vielen Dank für Ihre Hilfe, aber ich bevorzuge die Lösung von TheCottonSilk, da ich 12 EditText-Dateien habe und meinen Code so sauber wie möglich halten möchte :) Trotzdem danke!
Galip
Die Lösung von @ TheCottonSilk eignet sich am besten für Widgets zur Entwurfszeit und die Antwort von Craftos am besten für dyamic editTexts.
Bishnu Paudel
2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener... etc ... dann editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)und so weiter ...
SparK
25

Ich weiß, dass Sie eine Lösung gefunden haben, aber der richtige Weg, um das zu tun, was Sie verlangen, besteht darin, einfach das android:hintAttribut in Ihrem EditText zu verwenden. Dieser Text wird angezeigt, wenn das Feld leer und nicht fokussiert ist, verschwindet jedoch bei Auswahl des Felds EditText.

Kevin Coppock
quelle
4
In meiner App werden diese Felder mit persönlichen Daten gefüllt, die gespeichert werden können. Wenn ich diese Details lade, wird der 'Dummy'-Text ersetzt. Mit meiner aktuellen Methode kann ich auch Text auswählen lassen, nachdem der Benutzer Details eingegeben hat. Vielen Dank für Ihre Bedenken!
Galip
12

Verwaltet durch Aufrufen von Fokus und Auswahl des Programms

{
editabletext.requestFocus();
editabletext.selectAll();
}
AMD
quelle
11

Warum versuchst du nicht android: tip = "Hinweis" , um dem Benutzer den Hinweis zu geben?

Der "Hinweis" verschwindet automatisch, wenn der Benutzer auf die Edittextbox klickt. Es ist die richtige und beste Lösung.

Vaibhav Vajani
quelle
4
Gute Antwort. Es kann jedoch Situationen geben, in denen Sie den EditText mit Werten füllen, die Sie aus Einstellungen usw. gelesen haben, und Sie möchten es so einfach wie möglich machen, diese Werte zu ändern :)
nuala
5

Sie können dem editText danach auch eine OnClick-Methode hinzufügen

_editText.setSelectAllOnFocus(true);

und darin:

_editText.clearFocus();
_editText.requestFocus();

Sobald Sie auf den editText klicken, wird der gesamte Text ausgewählt.

user4596287
quelle
4

SelectAllOnFocus funktioniert beim ersten Fokussieren des EditText. Wenn Sie den Text jedoch jedes Mal auswählen möchten, wenn der Benutzer darauf klickt, müssen Sie editText.clearFocus()zwischenzeitlich aufrufen .

Wenn Ihre App beispielsweise über einen EditText und eine Schaltfläche verfügt, bleibt der Fokus im EditText, wenn Sie nach dem Ändern des EditText auf die Schaltfläche klicken. Dann muss der Benutzer den Cursorgriff und die Rücktaste verwenden, um die Inhalte im EditText zu löschen, bevor er einen neuen Wert eingeben kann. Rufen Sie also editText.clearFocus()die Button- onClickMethode auf.

Noumenon
quelle
2

Ich habe eine obige Antwort versucht und habe nicht funktioniert, bis ich die Anweisungen geändert habe. Das hat bei mir funktioniert:

    myEditText.setSelectAllOnFocus(true);
    myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onClickMyEditText();
        }
    });

   private void onClickMyEditText() {
       if(myEditText.isFocused()){
        myEditText.clearFocus();
        myEditText.requestFocus();
       }else{
           myEditText.requestFocus();
           myEditText.clearFocus();
       }
   }

Ich musste fragen, ob der Fokus auf dem EditText liegt, und wenn nicht, zuerst den Fokus anfordern und ihn dann löschen. Andernfalls würde die virtuelle Tastatur beim nächsten Klicken auf den EditText nie angezeigt

RipperJugo
quelle
1

Fügen Sie dies einfach Ihrem editText in der XML-Datei hinzu

android: selectAllOnFocus = "true"

Julio Cesar Reis
quelle
0

Das funktioniert bei mir:

myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(myEditText.isFocused()){
                myEditText.requestFocus();
                myEditText.clearFocus();
                myEditText.setSelection(myEditText.getText().length(), 0);
            }else{
                myEditText.requestFocus();
                myEditText.clearFocus();
            }

        }
    });
senior_russia
quelle