Android edittext удаляет фокус после нажатия кнопки

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

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

EDIT:

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

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

Ответы

Ответ 1

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

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

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

EDIT

Решение, описанное выше, сломает ваше приложение, если не сосредоточено 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.

Ответ 2

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

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

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

Ответ 3

Одним из обходных путей является создание фальшивого представления для переноса фокуса при 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);
}

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Назовите следующий фрагмент нажатием кнопки.

Ответ 8

Как я это решил.

// xml file
<LinearLayout
...
android:id="@+id/linear_layout"
android:focusableInTouchMode="true"> // 1. make this focusableInTouchMode...
</LinearLayout>

// Activity file
private LinearLayout mLinearLayout; // 2. parent layout element
private Button mButton;

mLinearLayout = findViewById(R.id.linear_layout);
mButton = findViewById(R.id.button);

  mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mLinearLayout.requestFocus(); // 3. request focus

            }
        });

Я надеюсь, что это поможет вам :)

Ответ 9

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

edt_SearchDest.setEnabled(ложь);