Лучший способ скрыть клавиатуру в Android

Я хотел бы знать, как лучше всего скрыть клавиатуру после ввода текста в EditText.

1) setonfocuschangelistener : этот прослушиватель срабатывает только при нажатии кнопки «Готово» или при изменении фокуса с одного EditText на другой? Когда я использовал этот метод, я не мог скрыть клавиатуру.

2) setOnTouchListener : когда я использовал это, я мог скрыть клавиатуру, но я сомневаюсь, что с этим может быть проблема. В этом случае я добавляю прослушиватель касаний в корень LinearLayout. Я использовал следующий код:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);

    txtUserName = (EditText)findViewById(R.id.txtUserName);
    btnLogin = (Button)findViewById(R.id.btnLogin);
    layoutView = (LinearLayout)findViewById(R.id.li);

    layoutView.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(txtUserName
                    .getWindowToken(), 0);
            return true;
        }
    });
}

Внутри основного LinearLayout я использую два других LinearLayout. Проблема, с которой я столкнулся с приведенным выше кодом, заключается в том, что в некоторых моментах, когда я нажимал, клавиатура не скрывалась. Я сомневаюсь, что я добавляю сенсорный прослушиватель только с корневым макетом, не предоставляя сенсорный прослушиватель с другими внутренними макетами или другими элементами управления (TextView). Когда я касаюсь других элементов управления или некоторых точек вокруг TextView (например, внутренних макетов), клавиатура не скрывается.

Это означает, что мне нужно добавить touchListener ко всем макетам или элементам управления внутри корневого макета? Как лучше поступить в этой ситуации?

5
задан sree_iphonedev 11 May 2012 в 11:16
поделиться