Следующий фрагмент просто скрывает клавиатуру:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
Вы можете поместить это в служебный класс или, если вы определяете его в действии, избежать параметра действия или вызвать hideSoftKeyboard(this)
.
Самая хитрая часть - это когда звонить. Вы можете написать метод, который повторяет все View
в вашей активности, и проверить, является ли это instanceof 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(MyActivity.this);
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
родительского контейнера. Назначьте id
вашему родительскому контейнеру, например
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
и звоните setupUI(findViewById(R.id.parent))
, вот и все.
Если вы хотите использовать это эффективно, вы можете создать расширенный Activity
и включить этот метод, а также заставить все остальные действия в вашем приложении расширять это действие и вызывать его setupUI()
в методе onCreate()
.
Надеюсь, это поможет.
Если вы используете более 1 действия, определите общий идентификатор для родительского макета, например
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Затем расширьте класс с Activity
и определите setupUI(findViewById(R.id.main_parent))
в его OnResume()
и расширьте этот класс вместо `` Activity in your program