Imposta lo stato attivo iniziale in un'applicazione Android


86

Nella mia applicazione Android si concentra automaticamente il primo Buttonche ho nel mio layout, dandogli un contorno arancione. Come posso impostare il focus iniziale preferibilmente in XML e questo può essere impostato su nulla?

Risposte:


159

Potresti usare il requestFocustag:

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

Trovo strano anche se mette a fuoco automaticamente uno dei tuoi pulsanti, non ho osservato quel comportamento in nessuna delle mie visualizzazioni.


Sì, ora è successo con due delle mie applicazioni. Immagino di poter requestFocus su un elemento che non cambia come un TextView o non sarebbe consentito?
stealthcopter

1
@stealthcopter: puoi dirmi quale versione di Android stai utilizzando. Sto usando 2.1 e 2.2, ma requestFocus non funziona.
anticafe

Beh, l'ho usato in tutte le versioni, ma il problema che stavo avendo sembrava scomparire da solo, quindi non ho indagato molto.
Stealthcopter

19
Ho provato l'approccio XML, ho provato l'approccio programmatico. Tuttavia l'EditText mantiene il focus. MOLTO NOIOSO !
Someone Somewhere


63

@ Qualcuno da qualche parte, ho provato tutto quanto sopra senza alcun risultato. La correzione che ho trovato è da http://www.helloandroid.com/tutorials/remove-autofocus-edittext-android . Fondamentalmente, devi creare un layout invisibile appena sopra il pulsante problematico:

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

Sono stato in grado di concentrarmi su un AlertDialog e l'abilitazione di focusableintouchmode mi ha aiutato a farlo bene. Essenzialmente, ecco come: alert.show (); alert.getButton (AlertDialog.BUTTON_POSITIVE) .setFocusableInTouchMode (true); alert.getButton (AlertDialog.BUTTON_NEGATIVE) .requestFocus ();
Sagar Hatekar

2
Grazie! Questa era l' unica soluzione che ha funzionato nel mio caso. Anche se l'ho usato leggermente diverso; Ho messo la roba del focus in un RelativeLayoutcontenente il file EditText.
kaka,

1
Con Android P sono in arrivo le seguenti modifiche alla piattaforma: "Le visualizzazioni con area 0 (una larghezza o un'altezza è 0) non sono più attivabili. Inoltre, le attività non assegnano più implicitamente il focus iniziale in modalità touch. a te per richiedere esplicitamente il focus iniziale, se lo desideri. "
AustrianDude

28

Imposta entrambi :focusablee :focusableInTouchModesu true e chiama requestFocus. Fa il trucco.


Sì, questa è la vera soluzione per risolverlo. Grazie Anders
gokhansari

23

Ho trovato che funzionava meglio per me.

In AndroidManifest.xml <activity> elementaggiungiandroid:windowSoftInputMode="stateHidden"

Nasconde sempre la tastiera quando si accede all'attività.


Facile e pulito!
SHADOW.NET

fantastico ... questo è davvero impressionante!
gumuruh

11

Aggiungo solo questa riga di codice in onCreate():

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

Problema risolto.


Funziona su Android 2.3.3.
Gaurav Agarwal

7

Usa il codice qui sotto,

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

dovrebbe funzionare.


3

@ Qualcuno da qualche parte ho usato questo per mettere a fuoco:

editText.clearFocus();

e aiuta


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.