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

时间:2014-01-21 16:55:36

标签: android android-edittext hint

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

例如:

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

12 个答案:

答案 0 :(得分:64)

您还可以使用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>

在你看来

android:textColorHint="@drawable/selector"

答案 1 :(得分:41)

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

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

答案 2 :(得分:9)

这是我的解决方案,当用户关注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");
        }
    }
});

希望这有助于某人

答案 3 :(得分:4)

这是我的解决方案:

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 :(得分:3)

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

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

conditionalPanel(
                 condition = " input.<action_button_name> %% 2 == 0 ",
                 plotOutput("plot_id")),
conditionalPanel(
                 condition = " input.<action_button_name> %% 2 != 0 ",
                 dataTableOutput("datatable_id"))

答案 5 :(得分:1)

尝试

EditText editText = (EditText) findViewById(...);
editText.setHint("");
在您的onTouch逻辑中


但是,当您单击编辑文本时,您的提示必须消失。  因此重新检查您的应用逻辑。

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

android:hint="User Name"

这个代码行可以轻松完成!

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

答案 9 :(得分:0)

我的解决方案是这样的。当显示为空且未聚焦时会显示提示,如果有文字或被触摸则隐藏

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

答案 10 :(得分:0)

我喜欢这样做(现在在Kotlin中)的方式是,如果用户单击其他位置,则提示会重新出现。初始化类之外的提示字符串,也将合成布局导入其中:

import kotlinx.android.synthetic.main.activity_layout.*
private const val MY_HINT= "The Hint Shown"

然后使用OnFocusChange侦听器:

    myEditText.setOnFocusChangeListener() { v, event ->
        myEditText.hint = if(myEditText.hasFocus()) "" else MY_HINT
        false
    }

这样,提示不会在用户单击时丢失。或者,如果您不在乎,只需将其设置为空字符串即可!

答案 11 :(得分:-1)

每个给定的解决方案可能起作用或不起作用我不知道,但以下步骤肯定有帮助。

首先创建一个虚拟焦点以限制EditText通过

获得焦点
    <LinearLayout
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

然后通常在EditText中设置提示,例如:

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

最后在您想要的活动或片段中添加以下代码

    editText.setOnTouchListener(new View.OnTouchListener() {

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

    });