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?

Pentium10
fonte

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"
Mitul Nakum
fonte
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"
sm.euro
fonte
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()

danmux
fonte
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

Xar-e-ahmer Khan
fonte
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>
urSus
fonte
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().

Jason Robinson
fonte
0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
paul Liang
fonte
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"

Devansh Maurya
fonte
-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

Ben
fonte
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