Код для закрытия программной клавиатуры приведен ниже:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
Вы можете поместить его в служебный класс или, если вы определяете его в действии, избегайте параметра действия или вызывайте hideSoftKeyboard(this).
Вы можете написать метод, который перебирает каждое представление в вашей деятельности и проверяет, является ли он экземпляром EditText, если он не регистрирует setOnTouchListener для этого компонента, и все встанет на свои места. Если вам интересно, как это сделать, на самом деле это довольно просто. Вот что вы делаете, вы пишете рекурсивный метод, подобный следующему.
public void setupUI(View view) {
//Set up touch listener for non-text box views to hide keyboard.
if(!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard();
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
Вызовите этот метод после SetcontentView()
с параметром id
вашего представления, например:
RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
Затем позвоните setupUI(findViewById(R.id.parent))
person
Sharmilee
schedule
13.12.2013
InputMethodManager.HIDE_IMPLICIT_ONLY
в качестве второго параметра, чтобы убедиться, что вы скрываете клавиатуру только тогда, когда пользователь явно не заставлял ее появляться (удерживая меню). - person Linga   schedule 13.12.2013