3168 Stimmen

Wie kann man verhindern, dass EditText den Fokus erhält, wenn eine Aktivität in Android startet?

Ich habe eine Activity in Android, mit zwei Elementen:

  1. EditText
  2. ListView

Wenn mein Activity beginnt, wird die EditText hat sofort den Eingabefokus (blinkender Cursor). Ich möchte nicht, dass ein Steuerelement beim Starten den Eingabefokus hat. Ich habe es versucht:

EditText.setSelected(false);
EditText.setFocusable(false);

Ohne Erfolg. Wie kann ich die EditText nicht selbst zu wählen, wenn die Activity beginnt?

2850voto

Morgan Christiansson Punkte 28762

Hinzufügen der Tags android:focusableInTouchMode="true" y android:focusable="true" zum übergeordneten Layout (z. B. LinearLayout o ConstraintLayout ), wie im folgenden Beispiel, wird das Problem behoben.

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

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext" 
    android:nextFocusLeft="@id/autotext"/>

1741voto

Joe Punkte 41698

Liegt das eigentliche Problem darin, dass Sie nicht wollen, dass er überhaupt scharf gestellt wird? Oder wollen Sie nicht, dass die virtuelle Tastatur angezeigt wird, wenn Sie den Fokus auf die EditText ? Ich sehe nicht wirklich ein Problem mit dem EditText einen Fokus auf dem Start zu haben, aber es ist definitiv ein Problem, das softInput-Fenster offen zu haben, wenn der Benutzer nicht explizit verlangt hat, den Fokus auf das EditText (und damit die Tastatur öffnen).

Wenn es sich um ein Problem mit der virtuellen Tastatur handelt, lesen Sie den AndroidManifest.xml <Aktivität>-Element Dokumentation.

android:windowSoftInputMode="stateHidden" - blenden Sie es immer aus, wenn Sie die Aktivität beginnen.

ou android:windowSoftInputMode="stateUnchanged" - nicht ändern (z. B. nicht anzeigen wenn es nicht bereits angezeigt wird, aber wenn es bei der Eingabe der Aktivität geöffnet war, lassen Sie es geöffnet).

457voto

Luc Punkte 4499

Die einzige Lösung, die ich gefunden habe, ist:

  • Erstellen einer LinearLayout (Ich weiß nicht, ob andere Arten von Layouts funktionieren)
  • Setzen Sie die Attribute android:focusable="true" y android:focusableInTouchMode="true"

Und die EditText nach dem Start der Aktivität nicht den Fokus erhält

91voto

Someone Somewhere Punkte 22958

Anhand der von anderen Postern bereitgestellten Informationen habe ich die folgende Lösung verwendet:

in der 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);
}

und schließlich, in onResume()

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

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

87voto

Eric Mill Punkte 3425

Versuchen Sie clearFocus() anstelle von setSelected(false) . Jede Ansicht in Android ist sowohl fokussierbar als auch auswählbar, und ich denke, dass Sie nur den Fokus löschen möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X