Подтвердить что ты не робот

Как сделать подсказку исчезнуть при касании edittext?

В моем приложении в android есть много полей EditText. И я столкнулся с проблемой с намеком. Он не исчезает, когда EditText работает на tuch, но исчезает, когда я начинаю писать somathing. Как можно устранить эту проблему? Потому что мне нужно, чтобы подсказка исчезла при касании поля 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"/>
4b9b3361

Ответ 1

Подсказка исчезает только при вводе текста, а не в фокусе. Я не думаю, что есть какой-либо автоматический способ сделать это, возможно, я ошибаюсь. Однако в качестве обходного пути я использую следующий код для удаления намека на фокус в EditText

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

Ответ 2

Вы также можете настроить свой XML-код с помощью Selector. Вот пример кода.

Создайте селектор. В файле 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"

Ответ 3

Здесь мое решение, где подсказка исчезает, когда пользователь нажимает 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");
        }
    }
});

надеюсь, что это поможет кому-то

Ответ 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("");
        }
    }
});

Ответ 5

Предлагаемое селекторное решение от windyzboy не работает для EditTexts с центрированным текстом, потому что курсор остается за прозрачным текстом подсказки, а не перемещается в центр.

Хорошим способом без загрязнения вашего кода является создание специального 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);
    }

}

Ответ 6

Попробуйте

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

в вашей логике onTouch.
Однако ваш намек должен исчезать, когда вы нажимаете на редактирование текста.  Итак, перепроверьте логику вашего приложения.

Ответ 7

Здесь я использовал немного кода, чтобы скрыть и показать подсказку может быть, это будет полезно.

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

Ответ 8

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

Ответ 9

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

Ответ 10

Каждое решение может работать или нет, я не знаю, но следующие шаги определенно помогут.

Сначала создайте фиктивный фокус, чтобы скрыть редактирование текста от фокусировки на

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

    });