how to make hint disappear when edittext is touche

2019-01-22 06:07发布

In my application in android are many EditText fields. And I ran into a problem with hint. It is not disappearing when EditText is focused, but it disappears when I start to write something. How can this problem be fixed? Because I need the hint to disappear when the EditText field is touched.

It is for example:

<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"/>

11条回答
Deceive 欺骗
2楼-- · 2019-01-22 06:33

This is my 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("");
        }
    }
});
查看更多
在下西门庆
3楼-- · 2019-01-22 06:36

The proposed selector solution by windyzboy doesn't work for EditTexts with centered text, because the cursor stays behind the transparent hint text instead of moving to the center.

A good way without polluting your code is to make a custom EditText, since you probably need the same style in the whole application. That way you can avoid adding checks for each EditText separately.

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

}
查看更多
相关推荐>>
4楼-- · 2019-01-22 06:36

Every Given Solution may work or not I don't know but the Following steps would definitely help.

First Create a dummy focus to restrain the EditText from gaining focus by

    <LinearLayout
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

Then Normally set hint in your EditText as example:

    <EditText

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:inputType="text"
    android:ems="10"
    android:id="@+id/editText"
    android:hint="Your Hint"
    android:focusableInTouchMode="true"
   />

Finally add the following code in your activity or fragment where you intend

    editText.setOnTouchListener(new View.OnTouchListener() {

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

    });
查看更多
对你真心纯属浪费
5楼-- · 2019-01-22 06:42

Hint only disappears when you type in any text, not on focus. I don't think that there is any automatic way to do it, may be I am wrong. However, as a workaround I use the following code to remove hint on focus in EditText

myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus)
            myEditText.setHint("");
        else
            myEditText.setHint("Your hint");
    }
});
查看更多
地球回转人心会变
6楼-- · 2019-01-22 06:42
android:hint="User Name"

This code line can be done that easily way!

<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" />
查看更多
beautiful°
7楼-- · 2019-01-22 06:45

Try

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

in your onTouch logic.
However your hint must be dissapearing when you clicked on edit text. So re-check your app logic.

查看更多
登录 后发表回答