#java #android
Вопрос:
В настоящее время у меня возникла проблема со скрытием клавиатуры при переключении между редактируемым текстом. Я спрятал клавиатуру со следующим исходным кодом:
edittext1.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { edittext1.requestfocus(); InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); return true; } }); edittext2.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { edittext1.requestfocus(); InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); return true; } })
Но вышеприведенный код не увенчался успехом. Каждый раз, когда я прикасаюсь к нему, появляется клавиатура. При удерживании нажатой кнопки edittext и перемещении за пределы области edittext по-прежнему отображается клавиатура.
Я не знаю, как скрыть клавиатуру, когда:
- пользователь нажимает editext2 и editext2.requestfocus() из фокуса-это edittext1
- удерживайте нажатой клавишу edittext и переместитесь за пределы edittext, когда она будет отпущена, клавиатура покажет
Можете ли вы помочь мне в этом деле? Спасибо.
Ответ №1:
public class CompositeOnChangeFocusListener implements OnFocusChangeListener{ private View currentFocusedView = null; public void onFocusChange(View v, boolean hasFocus) { //on a focus change. if(currentFocusedView != v){ InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } //case a view in this composite has focus. if(hasFocus) { currentFocusedView = v; } //case no view using this composite is focused. if(v == currentFocusedView amp;amp; !hasFocus){ currentFocusedView = null; InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } } }
Эта реализация OnFocusChangeListener
будет отслеживать текущую фокусировку View
, если фокус изменился, она удалит клавиатуру. Он также обновит, какое представление ориентировано на основе hasFocused
boolean
.
OnFocusChangeListener listner = new CompositeOnFocusChangeListener(); //Attach the same exact listener to both. edittext1.setOnFocusChangeListener(listner); edittext2.setOnFocusChangeListener(listner);
Также попробуйте настроить вид верхнего уровня в XML-файле макета на фокусируемый, таким образом, когда вы соскользнете EditText
, фокус должен перейти на вид верхнего уровня, а не прилипать к EditText
нему .