android edittext удалить Фокус после нажатия кнопки

У меня есть действие с EditText и кнопкой. Когда пользователь нажимает на EditText, отображается клавиатура, и он может ввести текст - отлично. Но когда пользователь нажимает на кнопку, Я хочу, чтобы EditText больше не был в фокусе, т. е. клавиатура скрывается, пока пользователь снова не нажмет на EditText.

что я могу сделать, чтобы "скрыть фокус" EditText после нажатия кнопки. Некоторый код я могу добавить в метод OnClick кнопки, чтобы сделать это?

изменить:

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <EditText 
        android:id="@+id/edt_SearchDest"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.8"
        android:textSize="18sp"
        android:hint="Enter your look-up here.." />

    <Button
        android:id="@+id/btn_SearchDest"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.2"
        android:text="Search" />

</LinearLayout>

С Наилучшими Пожеланиями

8 ответов


поместите это в прослушиватель кнопок:

InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);

редактировать

решение выше сломает ваше приложение, если нет EditText ориентирован на. Измените свой код следующим образом:

добавить этот метод в класс:

public static void hideSoftKeyboard (Activity activity, View view) 
{
    InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0);
}

затем в прослушивателе кнопок вызовите метод следующим образом:

hideSoftKeyboard(MainActivity.this, v); // MainActivity is the name of the class and v is the View parameter used in the button listener method onClick.

создать поддельный вид, чтобы получить фокус, когда вы пытаетесь clearFocus в своем edittext:

<EditText
        android:id="@+id/edt_thief"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:focusable="true"
        android:focusableInTouchMode="true"

обратите внимание, что этот вид не требует места в макете, поэтому он не имеет значения с вашим макетом.

в классе управления, называют это:

public void clearFocus(){
        yourEdittext.clearFocus();
        edtThief.requestFocus();
    }

о клавиатуре, скрыть клавиатуру после edtThief имеет фокус.

 public static void hideKeyboard(final View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext()
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

Я успешно использовал следующее в коде кнопки onClick:

editText.setEnabled(false);
editText.setEnabled(true);

несколько менее сложные, чем другие методы...


самое элегантное решение, которое я мог найти, это:

вы можете сохранить этот метод в служебный класс:

public static void hideSoftKeyboard(Activity activity) {
   if (activity == null) return;
   if (activity.getCurrentFocus() == null) return;

   InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
   inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}

просто вызвав метод hideSoftKeyboad (), он скроет клавиатуру, но, как вы можете видеть, фокус все равно будет присутствовать.

для того, чтобы удалить фокус мы будем использовать простой трюк. Прямо над элементами управления вводом добавьте фиктивный вид, например:

<View
    android:id="@+id/dummy"
    android:layout_width="1dp"
    android:layout_height="1dp"
    android:focusable="true"
    android:focusableInTouchMode="true" />

затем написать эту строку кода в том месте, где вы называете метод скрытия фокуса:

 theTextView.clearFocus();

поскольку приложение должно передать фокус на следующий элемент управления, он будет передан нашему невидимому виду.


private void hideDefaultKeyboard() {
    activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);//u have got lot of methods here
}

EDIT:

LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN

mTextView.setEnabled(!mTextView.isEnabled());
mTextView.setEnabled(!mTextView.isEnabled());

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

try {
InputMethodManager imm = (InputMethodManager) context
                    .getSystemService(Context.INPUT_METHOD_SERVICE);
if (v != null) {
imm.hideSoftInputFromWindow(v.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
}
} catch (Exception ignored) {
}
mEditText.setSelected(false);
mEditText.setFocusable(false);
mEditText.setFocusableInTouchMode(true);

напишите следующий фрагмент на кнопке click.


Почему бы просто не отключить EditText в коде кнопки? Это должно избавиться от клавиатуры и фокуса.

edt_SearchDest.setEnabled (false);