webentwicklung-frage-antwort-db.com.de

wie lässt sich der Hinweis verschwinden lassen, wenn edittext berührt wird?

In meiner Anwendung in Android befinden sich viele EditText-Felder. Und ich hatte ein Problem mit Hinweis . Es verschwindet nicht, wenn EditText fokussiert ist, aber es verschwindet, wenn ich etwas schreibe . Wie kann dieses Problem behoben werden? Weil ich den Hinweis brauche, um zu verschwinden, wenn das EditText-Feld berührt wird.

Es ist zum Beispiel:

<EditText
    Android:layout_width="260dp"
    Android:layout_height="30dp"
    Android:ems="10"
    Android:inputType="text"
    Android:id="@+id/driv_lic_num_reg"
    Android:hint="@string/driver_license_numb"
    Android:textColor="@color/black"
    Android:textColorHint="@color/grey_hint"
    Android:background="@drawable/input_field_background"
    Android:layout_alignParentTop="true"
    Android:layout_centerHorizontal="true"
    Android:layout_margin="2dp"
    Android:textCursorDrawable="@color/black"
    Android:textSize="15dp"
    Android:paddingLeft="10dp"
    Android:nextFocusDown="@+id/pass_reg"
    Android:imeOptions="actionNext"
    Android:maxLines="1"
    Android:maxLength="50"
    Android:focusableInTouchMode="true"/>
33
ToRaRo

Hinweis verschwindet nur, wenn Sie Text eingeben, nicht im Fokus. Ich glaube nicht, dass es einen automatischen Weg gibt, vielleicht ist ich falsch. Zur Problemumgehung verwende ich jedoch den folgenden Code, um Hinweise zum Fokus in EditText zu entfernen

myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus)
            myEditText.setHint("");
        else
            myEditText.setHint("Your hint");
    }
});
36
Rohan Kandwal

Sie können Ihren XML-Code auch mithilfe von Selector anpassen. Hier ist ein Beispielcode.

Erstellen Sie einen Selektor. In der Datei selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_focused="true" Android:color="@Android:color/transparent" />
    <item Android:color="@color/gray" />
</selector>

Ihrer Ansicht nach

Android:textColorHint="@drawable/selector"
60
windyzboy

Hier ist meine Lösung, bei der der Hinweis verschwindet, wenn der Benutzer den Fokus auf editText fokussiert, und wieder angezeigt wird, wenn sich der Fokus auf einen anderen Ort ändert, wenn der Editor noch leer ist:

editText.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        editText.setHint("");
        return false;
    }
});

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            editText.setHint("Hint");
        }
    }
});

hoffe das hilft jemandem

9
Hugo

Das ist meine Lösung:

final EditText editText = (EditText) findViewById(R.id.activity_edittext);
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            editText .setHint("my little hint");
        } else {
            editText .setHint("");
        }
    }
});
4
Pascal Klein

Die vorgeschlagene Auswahllösung von windyzboy funktioniert nicht für EditTexts mit zentriertem Text, da der Cursor hinter dem transparenten Hinweistext bleibt und nicht in die Mitte bewegt wird.

Eine gute Möglichkeit, den Code nicht zu verschmutzen, besteht darin, einen benutzerdefinierten EditText zu erstellen, da Sie wahrscheinlich in der gesamten Anwendung denselben Stil benötigen. Auf diese Weise können Sie das Hinzufügen von Prüfungen für jeden EditText separat vermeiden.

public class HideHintEditText extends EditText {

    CharSequence hint;

    public HideHintEditText(Context context) {
        super(context);
        hint = this.getHint();
    }

    public HideHintEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        hint = this.getHint();
    }

    public HideHintEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        hint = this.getHint();
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);

        this.setHint(focused ? "" : hint);
    }

}
3
Ish

Versuchen

EditText editText = (EditText) findViewById(...);
editText.setHint("");

in Ihrer onTouch Logik.
Ihr Hinweis muss jedoch verschwinden, wenn Sie auf Text bearbeiten geklickt haben. Also erneut prüfen Ihre App-Logik.

1

Meine Lösung ist so. Es zeigt einen Hinweis an, wenn es leer und nicht fokussiert ist. Es wird ausgeblendet, wenn Text vorhanden ist oder wenn er berührt wird

fun hideHint() {
        tilFloating.isHintAnimationEnabled = false
        etFloating.onFocusChangeListener = OnFocusChangeListener { v, hasFocus ->
            if ((etFloating.text != null && etFloating.text.toString() != "") || hasFocus)
                tilFloating.hint = ""
            else
                tilFloating.hint = mHint
        }
    }
Android:hint="User Name"

Diese Codezeile kann so einfach gemacht werden!

<EditText
  Android:id="@+id/edtUserName"
  Android:layout_width="match_parent"
  Android:layout_height="50dp"
  Android:layout_weight="1"
  Android:ems="10"
  Android:inputType="textPersonName"
  Android:hint="User Name" />
0
Tona Dinh

Hier habe ich den kleinen Code benutzt, um den Hinweis zu verbergen und anzuzeigen. Vielleicht ist es hilfreich.

txt_username.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(txt_username.getText().toString().isEmpty()){
                    if(hasFocus){
                        txt_username.setHint("");
                    }else{
                        txt_username.setHint(R.string.username);
                    }
                }
            }
        });
0
user3116317
findViewById(R.id.mainLayout).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                hideKeyboard();
                editText.clearFocus();
                if (TextUtils.isEmpty(editText.getText().toString())) {
                    editText.setHint("your hint");
                }
            }
        });

        editText.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                editText.setHint("");
                return false;
            }
        });


        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus)
                    editText.setHint("");
                else
                    editText.setHint("your hint");
            }
        });
0
Nishesh Jain