Gerenciar a visibilidade do método de entrada

Quando o foco de entrada entra ou sai de um campo de texto editável, o Android mostra ou oculta o método de entrada (como o teclado na tela), conforme apropriado. O sistema também toma decisões sobre como a IU e o campo de texto aparecem acima do método de entrada. Por exemplo, quando o espaço vertical na tela é restrito, o campo de texto pode preencher todo o espaço acima do método de entrada. Para a maioria dos apps, esses comportamentos padrão são suficientes para atender a todas as necessidades.

Em alguns casos, no entanto, você pode querer controlar mais diretamente a visibilidade do método de entrada e especificar como gostaria que seu layout aparecesse quando esse método ficasse visível. Esta lição explica como controlar e responder à visibilidade do método de entrada.

Mostrar o método de entrada no início da atividade

Embora o Android focalize o primeiro campo de texto no layout quando a atividade é iniciada, ele não mostra o método de entrada. Esse comportamento é apropriado porque a inserção de texto pode não ser a tarefa principal da atividade. No entanto, se a inserção de texto for realmente a tarefa principal (como em uma tela de login), provavelmente será necessário que o método de entrada apareça por padrão.

Para mostrar o método de entrada quando sua atividade começar, adicione o atributo android:windowSoftInputMode ao elemento <activity> com o valor "stateVisible". Exemplo:

    <application ... >
        <activity
            android:windowSoftInputMode="stateVisible" ... >
            ...
        </activity>
        ...
    </application>
    

Observação: se o dispositivo do usuário tiver um teclado físico conectado, o método de entrada simples não será exibido.

Mostrar o método de entrada sob demanda

Se houver um método no ciclo de vida da sua atividade em que você queira garantir que o método de entrada esteja visível, use o InputMethodManager para mostrá-lo.

Por exemplo, o método a seguir usa uma View na qual o usuário deve digitar algo, chama requestFocus() para focalizar e, em seguida, showSoftInput() para abrir o método de entrada:

Kotlin

    fun showSoftKeyboard(view: View) {
        if (view.requestFocus()) {
            val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
        }
    }
    

Java

    public void showSoftKeyboard(View view) {
        if (view.requestFocus()) {
            InputMethodManager imm = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
        }
    }
    

Observação: quando o método de entrada estiver visível, não o oculte programaticamente. O sistema oculta o método de entrada quando o usuário termina a tarefa no campo de texto ou o usuário pode ocultá-la com um controle do sistema (como o botão Voltar).

Especificar como sua IU deve responder

Quando o método de entrada aparece na tela, a quantidade de espaço disponível para a IU do seu app é reduzida. O sistema decide como ajustar a parte visível da sua IU, mas pode fazer isso incorretamente. Para garantir o melhor comportamento para o app, especifique como você quer que o sistema exiba sua IU no espaço restante.

Para declarar o tratamento preferencial em uma atividade, use o atributo android:windowSoftInputMode no elemento <activity> do manifesto com um dos valores de "ajuste".

Por exemplo, para se certificar de que o sistema redimensione seu layout para o espaço disponível, o que garante que todo o conteúdo do layout esteja acessível (mesmo que isso provavelmente exija rolagem), use "adjustResize":

    <application ... >
        <activity
            android:windowSoftInputMode="adjustResize" ... >
            ...
        </activity>
        ...
    </application>
    

Você pode combinar a especificação de ajuste com a especificação de visibilidade do método de entrada inicial acima:

        <activity
            android:windowSoftInputMode="stateVisible|adjustResize" ... >
            ...
        </activity>
    

É importante especificar "adjustResize" se sua IU inclui controles que o usuário pode ter que acessar imediatamente após ou durante a realização da entrada de texto. Por exemplo, se você usa um layout relativo para colocar uma barra de botões na parte inferior da tela, o uso do "adjustResize" redimensiona o layout de modo que a barra de botões apareça acima do método de entrada.