Скрыть клавиатуру в Android, касаясь за пределами области редактирования текста
Я знаю, что код отклонения клавиатуры в Android
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
Может кто-нибудь предложить мне способ скрыть клавиатуру, если мы коснемся области за пределами текстовой области, кроме клавиатуры на экране.
3 ответа
Код для отклонения Softkeyboard ниже:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
Вы можете поместить его в Utility Class или, если вы определяете его в действии, избежать параметра активности или вызвать 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))
Лучший способ использовать кнопку DONE, кроме EditText, сделать так, чтобы ваш onClickListener делал так,
done.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
}
});
Это может быть старым, но я получил это путем реализации пользовательского класса
public class DismissKeyboardListener implements OnClickListener {
Activity mAct;
public DismissKeyboardListener(Activity act) {
this.mAct = act;
}
@Override
public void onClick(View v) {
if ( v instanceof ViewGroup ) {
hideSoftKeyboard( this.mAct );
}
}
}
public void hideSoftKeyboard(Activity activity) {
InputMethodManager imm = (InputMethodManager)
getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}
Лучшей практикой здесь является создание класса Helper, и каждый контейнер Relative / Linear Layouts должен реализовывать это.
**** Обратите внимание, что только основной Контейнер должен реализовывать этот класс (Для оптимизации) ****
и реализовать это так:
Parent.setOnClickListener( new DismissKeyboardListener(this) );
Ключевое слово это для деятельности. поэтому, если вы находитесь на фрагменте, вы используете его как getActivity ();
--- недурно, если это поможет тебе... --- ура Ральф ---