安卓EditText提示文本

55

我已经为一个EditText设置了提示,但是当前提示的可见性已经消失了。当用户开始输入时,我想删除提示文本,当光标出现在EditText中时,而不是在用户开始输入时。我该如何做?

<EditText 
android:paddingLeft="10dp"
android:background="@drawable/edittextbg"
android:layout_marginLeft="4dp"
android:layout_marginTop="7dp"
android:gravity="left"
android:id="@+id/Photo_Comments" 
android:layout_width="150dip" 
android:maxLines="1"
android:hint="Write Caption"
android:maxLength="50"
android:singleLine="true"
android:maxWidth="100dip"
android:layout_height="wrap_content"/>
4个回答

61
您可以使用选择器的概念。onFocus会移除提示信息。
android:hint="Email"

所以当TextView获取焦点或有用户输入(即不为空时),提示文本将不会显示。


1
这看起来比我的选项更合适! - Aman Alam
3
很遗憾,这是不正确的。 <selector> 元素只能用于绘制和颜色,而不能用于字符串。 - devunwired
但是必须从XML或资源ID中设置。 - Mike6679
3
你能否详细说明一下?我找不到适当的选择器标签文档以及如何操作的方式。 - Jackie

32

我不确定是否可以直接完成这个任务,但你可以通过代码实现一个解决方案:监听 EditText 的 onFocus 事件,一旦它获得焦点,使用类似于 editText.setHint("") 的方法将提示设置为空:

这可能不完全是你需要做的,但类似这样的方法可能适用。

myEditText.setOnFocusListener(new OnFocusListener(){
  public void onFocus(){
    myEditText.setHint("");
  }
});

5
当EditText获得焦点且不为空时,Hint默认行为将消失,因此这并非必要。 - w-ll
2
这不是最好的方法,你可以只使用应用于textColorHint的选择器。请查看下面的答案。 - aglour

22
为了补充Sunit的回答,您可以使用选择器,不是针对文本字符串,而是针对textColorHint。 您必须在editText上添加此属性:

为了完成Sunit的回答,您可以使用选择器来选取textColorHint,而不是文本字符串。 您必须在editText上添加此属性:

android:textColorHint="@color/text_hint_selector"

您的text_hint_selector应为:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:color="@android:color/transparent" />
    <item android:color="@color/hint_color" />
</selector>

为什么是@color/xxx而不是@drawable/xxx? - behelit
2
@behelit textColorHint 接收的是颜色,而不是 drawable,因此选择器必须在 color 文件夹中,而不是 drawable 中。 - aglour

2
et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {

            et.setHint(temp +" Characters");
        }
    });

4
提示:一份好的回答不仅仅是代码的转储。如果您打算 A) 对他人有所帮助 B) 获得回答声望,您至少应该提供一些解释。 - GhostCat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接