Definir o foco inicial em um aplicativo Android


86

Em meu aplicativo Android, ele focaliza automaticamente o primeiro Buttonque tenho em meu layout, dando a ele um contorno laranja. Como posso definir o foco inicial, de preferência em XML, e isso pode ser definido como nada?

Respostas:


159

Você pode usar a requestFocustag:

<Button ...>
  <requestFocus />
</Button>

Embora eu ache estranho que ele focalize automaticamente um de seus botões, não observei esse comportamento em nenhuma das minhas visualizações.


Sim, já aconteceu com duas das minhas inscrições agora. Acho que poderia requestFocus em um elemento que não muda como um TextView ou isso não seria permitido?
stealthcopter

1
@stealthcopter: você pode me dizer qual versão do Android está usando. Estou usando 2.1 e 2.2, mas o requestFocus não funciona.
Anticafe

Bem, tenho usado em todas as versões, mas o problema que estava tendo parecia ter desaparecido por conta própria, então não investiguei muito.
stealthcopter

19
Eu tentei a abordagem XML, tentei a abordagem programática. Ainda assim, o EditText mantém o foco. MUITO IRRITANTE !
Alguém em algum lugar


64

@Someone Somewhere, eu tentei todas as opções acima sem sucesso. A correção que encontrei é de http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android . Basicamente, você precisa criar um layout invisível logo acima do botão problemático:

<LinearLayout android:focusable="true"
              android:focusableInTouchMode="true" 
              android:layout_width="0px"
              android:layout_height="0px" >
    <requestFocus />
</LinearLayout>

Consegui me concentrar em um AlertDialog e ativar o modo focusable em toque me ajudou a acertar. Essencialmente, veja como: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (true); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar

2
Obrigado! Essa foi a única solução que funcionou no meu caso. Embora eu tenha usado um pouco diferente; Eu coloquei o material de foco em um RelativeLayoutcontendo o EditText.
kaka,

1
Com o Android P, as seguintes mudanças estão chegando à plataforma: "Visualizações com área 0 (largura ou altura é 0) não são mais focalizáveis. Além disso, as atividades não atribuem mais o foco inicial implicitamente no modo de toque. Em vez disso, ele está ativo para você solicitar explicitamente o foco inicial, se desejar. "
AustrianDude

28

Defina :focusablee :focusableInTouchModecomo verdadeiro e chame requestFocus. Isso faz o truque.


Sim, esta é a verdadeira solução para consertá-lo. Obrigado Anders
gokhansari

23

Achei que funcionou melhor para mim.

Em AndroidManifest.xml, <activity> elementadicioneandroid:windowSoftInputMode="stateHidden"

Isso sempre oculta o teclado ao entrar na atividade.


Fácil e limpo!
SHADOW.NET

ótimo ... isso é muito impressionante!
gumuruh

11

Acabei de adicionar esta linha de código em onCreate():

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

Problema resolvido.


Funciona no Android 2.3.3.
Gaurav Agarwal

7

Use o código abaixo,

TableRow _tableRow =(TableRow)findViewById(R.id.tableRowMainBody);
tableRow.requestFocus();

isso deve funcionar.


3

@Someone Somewhere eu usei isso para clarear o foco:

editText.clearFocus();

e isso ajuda


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.