android remove focus - Interrompe EditText dalla messa a fuoco all'avvio dell'attività



15 Answers

Il vero problema è che non vuoi che si concentri? O non vuoi che mostri la tastiera virtuale come risultato della messa a fuoco di EditText ? Non vedo davvero un problema con EditText che si concentra sull'avvio, ma è sicuramente un problema avere la finestra softInput aperta quando l'utente non ha richiesto esplicitamente di focalizzarsi su EditText (e aprire la tastiera come risultato).

Se si tratta del problema della tastiera virtuale, consultare la documentazione dell'elemento <activity> di AndroidManifest.xml .

android:windowSoftInputMode="stateHidden" - nasconde sempre quando si accede all'attività.

o android:windowSoftInputMode="stateUnchanged" - non cambiarlo (es. non mostrarlo se non è già mostrato, ma se era aperto quando si entra nell'attività, lasciarlo aperto).

force lost disable

Ho un'attività in Android, con due elementi:

  1. EditText
  2. ListView

All'avvio della mia Activity , EditText ha immediatamente il focus di input (cursore lampeggiante). Non voglio che nessun controllo abbia il focus di input all'avvio. Provai:

EditText.setSelected(false);

Senza fortuna. Come posso convincere EditText a non selezionare se stesso all'avvio Activity ?




L'unica soluzione che ho trovato è:

  • Crea un LinearLayout (non so se funzioneranno altri tipi di layout)
  • Imposta gli attributi android:focusable="true" e android:focusableInTouchMode="true"

E EditText non si focalizzerà dopo l'avvio dell'attività




utilizzando le informazioni fornite da altri poster, ho utilizzato la seguente soluzione:

nel layout XML

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

in onCreate ()

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

e infine, in onResume ()

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}



Prova clearFocus() invece di setSelected(false) . Ogni vista in Android ha sia focusability e selettività, e penso che tu voglia semplicemente cancellare l'attenzione.




Nessuna di queste soluzioni ha funzionato per me. Il modo in cui ho sistemato la messa a fuoco automatica era:

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>



Puoi semplicemente impostare "focusable" e "focusable in touch mode" per il valore true sulla prima TextView del layout . In questo modo, quando l'attività inizia, TextView sarà focalizzato ma, per la sua natura, non vedrai nulla focalizzato sullo schermo e, ovviamente, non verrà visualizzata alcuna tastiera ...




Avevo bisogno di cancellare l'attenzione da tutti i campi a livello di programmazione. Ho appena aggiunto le seguenti due istruzioni alla mia definizione di layout principale.

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

Questo è tutto. Risolto il mio problema all'istante. Grazie, Silver, per avermi indicato nella giusta direzione.




La risposta più semplice, è sufficiente aggiungerla nel layout principale dell'XML.

android:focusable="true" 
android:focusableInTouchMode="true"



Prova questo prima del tuo primo campo modificabile:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();



In ritardo, ma forse utile. Crea un fittizio EditText nella parte superiore del tuo layout quindi chiama myDummyEditText.requestFocus() in onCreate()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

Sembra che si comporti come mi aspetto. Non è necessario gestire le modifiche alla configurazione, ecc. Avevo bisogno di questo per un'attività con una lunga TextView (istruzioni).




Sì, ho fatto la stessa cosa: creare un layout lineare "fittizio" che ottenga l'attenzione iniziale. Inoltre, ho impostato gli ID del focus "successivo" in modo che l'utente non possa più focalizzarlo dopo averlo fatto scorrere una volta:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

un sacco di lavoro solo per sbarazzarsi di messa a fuoco su una vista ..

Grazie




Per me, ciò che ha funzionato su tutti i dispositivi è questo:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

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

Basta mettere questo come vista prima della vista focalizzata problematica, e il gioco è fatto.




La cosa più semplice che ho fatto è focalizzare l'attenzione su un'altra vista su onCreate:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

Questo ha fermato la tastiera morbida in arrivo e non c'era nessun cursore lampeggiante in EditText.




<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>



È possibile ottenere ciò creando un fittizio EditText con larghezza e altezza del layout impostate su 0 0dp e richiedere l' 0dp a tale vista. Aggiungi il seguente snippet di codice nel tuo layout xml:

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>



Related