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
how to make hint disappear when edittext is touched?
提问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 onTouch
logic.
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
}
}