O foco é para selecionar os componentes da IU quando você está usando algo além do toque (ou seja, um d-pad, um teclado, etc.). Qualquer visualização pode receber foco, embora alguns não sejam focalizáveis por padrão. (Você pode tornar uma visualização focalizável setFocusable(true)
e forçá-la a ser focalizada requestFocus()
.)
No entanto, é importante observar que, quando você está no modo de toque, o foco é desativado . Portanto, se você estiver usando os dedos, alterar o foco programaticamente não fará nada. A exceção é para visualizações que recebem entrada de um editor de entrada. Um EditText
é um exemplo. Para esta situação especial, setFocusableInTouchMode(true)
é usado para permitir que o teclado virtual saiba para onde enviar a entrada. Um EditText
tem essa configuração por padrão. O teclado virtual aparecerá automaticamente.
Se você não quiser que o teclado virtual apareça automaticamente, pode suprimi-lo temporariamente, conforme observou @abeljus:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Quando um usuário clica no EditText
, ele ainda deve mostrar o teclado.
Leitura adicional: