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?

stealthcopter
fonte

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.

Matthias
fonte
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
4
<requestFocus /> está aqui: developer.android.com/guide/topics/resources/…
Erik B
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>
Vince Lasmarias
fonte
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.

Ruivo
fonte
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.

James
fonte
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.

Sam Tang
fonte
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.

jcw
fonte
3

@Someone Somewhere eu usei isso para clarear o foco:

editText.clearFocus();

e isso ajuda

Ruobin Wang
fonte
1
android:focusedByDefault="true"
TiyebM
fonte