Как сделать подсказку исчезнуть при касании 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"/> 

Solutions Collecting From Web of "Как сделать подсказку исчезнуть при касании edittext?"

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

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

Вы также можете настроить свой 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" 

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

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

Это мое решение:

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

Пытаться

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

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

Предлагаемое селекторное решение от 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); } } 

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

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

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

Сначала создайте фиктивный фокус, чтобы скрыть 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; } });