web-dev-qa-db-fra.com

comment faire disparaître l'indication quand on touche edittext?

Dans mon application sous Android, il existe de nombreux champs EditText. Et j’ai rencontré un problème avec indice . Il ne disparaît pas lorsque EditText est activé, mais il disparaît lorsque je commence à écrire quelque chose . Comment résoudre ce problème? Parce que j'ai besoin que l'indication disparaisse lorsque le champ EditText est touché.

C'est par exemple:

<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

Le conseil ne disparaît que lorsque vous tapez du texte, pas le focus. Je ne pense pas qu'il existe un moyen automatique de le faire, peut-être que je me trompe. Cependant, comme solution de contournement, j'utilise le code suivant pour supprimer un indice sur le focus dans EditText

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

Vous pouvez également personnaliser votre code XML à l'aide de Selector. Voici un exemple de code.

Créez un sélecteur. Dans le fichier 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>

À votre avis

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

Voici ma solution, où l'indice disparaît lorsque l'utilisateur focus editText et réapparaît lorsque l'attention se modifie à un autre endroit si l'edittext est toujours vide:

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

espérons que cela aide quelqu'un

9
Hugo

Ceci est ma solution:

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

La solution de sélecteur proposée par windyzboy ne fonctionne pas pour les EditTexts avec un texte centré, car le curseur reste derrière le texte transparent au lieu de se déplacer au centre.

Un bon moyen de ne pas polluer votre code est de créer un EditText personnalisé, car vous avez probablement besoin du même style dans toute l'application. De cette façon, vous pouvez éviter d'ajouter des contrôles pour chaque EditText séparément.

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

Ma solution est comme ça. Il montre un indice lorsqu'il est vide et non focalisé et cache s'il y a du texte ou s'il est touché

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"

Cette ligne de code peut être faite aussi facilement!

<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

Ici, j'ai utilisé le peu de code pour cacher et montrer un indice Peut-être que ça va être utile.

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