Como remover o foco automático / pop-up do teclado de um campo quando a tela é exibida?


105

Eu tenho uma tela onde o primeiro campo é um EditText, e ele ganha o foco na inicialização, também exibe o tipo de entrada numérica, o que é muito chato

Como posso ter certeza de que, quando a atividade for iniciada, o foco não será obtido e / ou o painel de entrada não será aumentado?

Respostas:


157
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

ou

defina a propriedade da atividade no arquivo de manifesto conforme abaixo na tag do aplicativo

android:windowSoftInputMode="stateHidden"

Configurando o android: windowSoftInputMode no arquivo AndroidManifest.xml pode ser ORed com outros valores. O modo normalmente implica valores únicos, mas, neste caso, o valor é uma coleção de sinalizadores. Descrição dos valores:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
Jeff Muir

145

vá para o arquivo de manifesto do seu aplicativo e escreva esta linha para a atividade que você deseja desabilitar o pop-up automático do teclado.

android:windowSoftInputMode="stateHidden"

Não funcionou para mim. Eu coloquei em activity_main.xml. Funcionou perfeitamente quando o coloquei em onCreate (). getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
glez

20

Para programaticamente não ter o teclado exibido, mas o widget padrão ainda receber a chamada de foco:

getWindow().setSoftInputMode(WindowManager.
                             LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

no onResume()


11
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

chame o método acima dentro de onCreate () . Impede que o softKeyboard seja exibido, a menos que o usuário selecione Editar Texto portapping or clicking.

ou simplesmente adicione a android:windowSoftInputMode="stateHidden"tag Activity emManifest.xml


10

Isso geralmente é uma bagunça. A primeira coisa que tento é tentar roubar o foco com outra visualização via. Você também precisa ter o focusable e focusableInTouchMode.

<TextView
  ...
  android:focusable="true"
  android:focusableInTouchMode="true">

    <requestFocus/>
</TextView>

Isso funciona. Acho que é uma abordagem mais limpa, mas também depende de como estão suas condições. Eu estou aceitando este.
JaydeepW

5

Faça outra visão agarrar o foco. Por padrão, a primeira Visualização focalizável obterá foco quando um layout for inflado. Você pode solicitar o foco em uma visualização diferente via XML:

<TextView
    android:layout_width="wrap_parent"
    android:layout_height="wrap_content"
    android:text="Some other view">

    <requestFocus />
</TextView>

Isso funciona para qualquer visualização.

Se quiser fazer isso programaticamente, você pode usar view.requestFocus().


0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

3
Bem-vindo ao StackOverflow! Não é como em outros fóruns, se você quiser alterar sua resposta, basta clicar no editlink e fazer as alterações. E tente formatar seu código selecionando-o e usando o botão Amostra de código {}ou pressionando Ctrl+K.
Peter Lang

0

Adicionar android:windowSoftInputMode="stateHidden"à sua atividade no manifesto apenas oculta o teclado quando você está iniciando a atividade, ou como o Google diz

Quando o usuário navega afirmativamente para a frente para a atividade, em vez de voltar para ela por ter saído de outra atividade

Para ocultar o teclado também quando o usuário pressiona o botão Voltar e volta para sua atividade de alguma outra atividade, use android:windowSoftInputMode="stateAlwaysHidden"


-1

não tentei fazer isso nem estou perto do meu computador de programação, mas suspeito que enviar o foco programaticamente para a visualização pai ou algo dessa natureza pode resolver o problema - isso é mais provavelmente uma solução alternativa do que uma solução, mas, novamente, não é possível testá-lo apenas um pensamento


1
Eu tentei isso, mas não funcionou. Eu chamei .requestFocus();um botão, e ainda o teclado aparece.
Pentium10

pensamentos podem ser adicionados como comentários
Alberto M
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.