Android 触摸edittext时如何使提示消失?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21264359/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 04:15:05  来源:igfitidea点击:

how to make hint disappear when edittext is touched?

androidandroid-edittexthint

提问by ToRaRo

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.

在我的 android 应用程序中,有许多 EditText 字段。我遇到了提示问题。当 EditText 聚焦时它不会消失,但当我开始写东西时它会消失。如何解决这个问题?因为我需要在触摸 EditText 字段时提示消失。

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

回答by windyzboy

You can also custom your XML code by using Selector. Here is an example code.

您还可以使用 Selector 自定义 XML 代码。这是一个示例代码。

Create a selector. In file selector.xml

创建一个选择器。在文件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>

In your view

在你看来

android:textColorHint="@drawable/selector"

回答by Rohan Kandwal

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

提示只会在您输入任何文本时消失,而不是在焦点上。我不认为有任何自动的方法可以做到这一点,可能是我错了。但是,作为一种解决方法,我使用以下代码删除 EditText 中的焦点提示

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

回答by Hugo

Here's my solution, where the hint disappear when user focus editText and appears again when focus changes to other place if the edittext is still empty:

这是我的解决方案,当用户聚焦 editText 时提示消失,如果 edittext 仍然为空,则当焦点更改到其他位置时提示再次出现:

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

hope this helps someone

希望这有助于某人

回答by Pascal Klein

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

回答by Ish

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.

windyzboy 提出的选择器解决方案不适用于具有居中文本的 EditTexts,因为光标停留在透明提示文本后面而不是移动到中心。

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.

一个不污染代码的好方法是制作自定义 EditText,因为您可能需要在整个应用程序中使用相同的样式。这样您就可以避免分别为每个 EditText 添加检查。

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

}

回答by Sergey Shustikov

Try

尝试

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

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

在你的onTouch逻辑中。
但是,当您单击编辑文本时,您的提示必须消失。所以重新检查你的应用程序逻辑。

回答by user3116317

Here i have used the little bit of code to hide and show hint may be it'll be helpful.

在这里,我使用了一点代码来隐藏和显示提示可能会有所帮助。

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

回答by Nishesh Jain

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

回答by Tona Dinh

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

回答by Bibaswann Bandyopadhyay

My solution is like this. It shows hint when empty and not focused and hides if there is text or if it is touched

我的解决方案是这样的。它在为空且未聚焦时显示提示,并在有文本或触摸时隐藏

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