Ответ 1
Код для отклонения Softkeyboard находится ниже:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
Вы можете поместить его в класс Utility или если вы определяете его в рамках действия, избегаете параметра активности или вызываете hideSoftKeyboard (это).
Вы можете написать метод, который выполняет итерацию через каждый вид в вашей активности и проверяет, является ли это экземпляром 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))