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