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.