2014-01-21 2 views
27

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

Можете ли вы разместить XML своего Edittext? –

+2

Это работает именно так. Подсказка исчезает, как только вводится любой текст. –

ответ

31

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

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

Но тогда, в следующий раз, у него больше не будет намека ... –

+0

@Tobor, с которым можно легко управлять с помощью некоторой логики. Я просто хочу дать решение, чтобы скрыть намек на фокус. –

+0

@ user3132940 Если мой ответ решил вашу проблему, то, пожалуйста, примите его и отметьте вопрос решен. –

1

Попробуйте

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

в вашей onTouch логике.
Однако ваш намек должен исчезать при нажатии на редактирование текста. So re-check ваша логика приложения.

+0

Что вы меняете «перепроверьте свою логику приложения»? Потому что я на самом деле не понимаю, почему он работает так – ToRaRo

8

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

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

Это самый элегантный ответ, не задействованный код, 100% XML. Более многоразовое и ремонтопригодное. +1 – voghDev

+1

Отличный ответ, очень сжатый и не загрязняющий код. – FtheBuilder

+0

Это идеальный мальчик;) –

2

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

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

    }); 
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"); 
      } 
     }); 
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" /> 
Смежные вопросы