2010-11-20 3 views
17

У меня есть элемент управления EditText. Если я нажму на него, появится всплывающее меню, когда я нажимаю «enter/ok/return», а затем элемент управления EditText имеет фокусировку и клавиатуру вверх.
Как закрыть панель инструментов и удалить фокус?Как очистить фокус и удалить клавиатуру на Android?

ответ

1

Вы можете попробовать сделать SetFocus() на другом элементе вашего макета.

Если вы говорите о кнопке «ENTER/OK/возврата» на самой клавиатуре вы, возможно, придется настроить KeyListener по контролю EditText для того, чтобы знать, когда SetFocus() на другом элементе.

+0

Я понимаю, что это решение дается многими людьми, но Мне это не нравится, потому что вместо input.clearFocus() просто работает (т.е. очищая фокус от этого ввода), теперь вам нужно установить фокус на что-то еще !? Это просто кажется противоречащим интуиции. – marienke

11

В файле макета XML, указать imeOption на вашем EditText:

android:imeOptions="actionGo" 

Далее, добавить слушатель действия для вашего EditText в Java-файле Activity в

mYourEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_GO) { 
       // hide virtual keyboard 
       InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(mYourEditText.getWindowToken(), 0); 
       return true; 
      } 
      return false; 
     } 
    }); 

Где mYourEditText является EditText объект

+0

Хм спасибо. но им суждено написать imeOpt в макете или редакторе? и я получил ошибку на EditorInfo, любая идея? – carefacerz

+0

Можете ли вы объяснить редактор? – carefacerz

+0

Это отклонит клавиатуру, но во всех случаях не будет удалять фокус. IE android запросит сосредоточиться на первом доступном представлении, которое может сфокусироваться. – lostintranslation

12
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0); 
+1

Это только скроет клавиатуру. Он не удалит фокус. – lostintranslation

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

Убедитесь, что EditText XML имеет:

android:id="@+id/myEditText"  
android:imeOptions="actionDone" 

Затем установите слушатель в EditText (с Котлин, и из фрагмента):

myEditText.setOnEditorActionListener({ v, actionId, event -> 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       myEditText.clearFocus() 
       val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
       imm.hideSoftInputFromWindow(view!!.windowToken, 0)  
      } 
      false 
     }) 
Смежные вопросы