Wie kann verhindert werden, dass EditText den Fokus erhält, wenn eine Aktivität in Android beginnt?

Lesezeit: 3 Minuten

Benutzer-Avatar
Markieren

ich habe ein Activity in Android, mit zwei Elementen:

  1. EditText
  2. ListView

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

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

Kein Glück. Wie kann ich das überzeugen EditText nicht selbst auswählen, wenn die Activity beginnt?

Benutzer-Avatar
Jo

Ist das eigentliche Problem, dass Sie überhaupt keinen Fokus haben möchten? Oder Sie möchten nicht, dass die virtuelle Tastatur angezeigt wird, wenn Sie sich auf konzentrieren EditText? Ich sehe da eigentlich kein Problem EditText einen Fokus auf den Start zu haben, aber es ist definitiv ein Problem, das softInput-Fenster geöffnet zu haben, wenn der Benutzer nicht explizit angefordert hat, sich auf das zu konzentrieren EditText (und als Ergebnis die Tastatur öffnen).

Wenn es das Problem der virtuellen Tastatur ist, siehe die AndroidManifest.xml -Element Dokumentation.

android:windowSoftInputMode="stateHidden" – Verstecke es immer, wenn du die Aktivität betrittst.

oder android:windowSoftInputMode="stateUnchanged" – Ändern Sie es nicht (z. B. don’t Show es, wenn es nicht bereits angezeigt wird, aber wenn es beim Betreten der Aktivität geöffnet war, lassen Sie es geöffnet).

  • dennoch steht der Cursor im ersten EditText im Layout – obwohl die Tastatur nicht angezeigt wird

    – martyglaubitz

    20. Mai 2014 um 8:17 Uhr

  • @Anderson: Nichts an der Antwort implizierte, dass es das verhindern würde EditText von der Fokussierung. Es heißt eigentlich ganz klar, dass man so das verhindert Software-Tastatur IME vom automatischen Öffnen im Fokus; weil es wahrscheinlicher ist, dass die größere Sorge darin besteht, dass die Soft-Tastatur unerwartet auftaucht, nicht der Fokus selbst. Wenn Ihr Problem mit der EditText überhaupt einen Fokus haben, dann verwenden Sie die Antwort eines anderen.

    – Jo

    8. Juli 2014 um 23:38 Uhr

Benutzer-Avatar
Luc

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

  • Ein … kreieren LinearLayout (Ich weiß nicht, ob andere Arten von Layouts funktionieren)
  • Legen Sie die Attribute fest android:focusable="true" und android:focusableInTouchMode="true"

Und der EditText wird den Fokus nach dem Start der Aktivität nicht erhalten

Benutzer-Avatar
floydaddict

Das Problem scheint von einer Eigenschaft zu stammen, die ich nur in der sehen kann XML form des Layouts.

Achten Sie darauf, diese Zeile am Ende der Deklaration innerhalb der zu entfernen EditText XML-Tags:

<requestFocus />

Das sollte so etwas geben:

<EditText
   android:id="@+id/emailField"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:inputType="textEmailAddress">

   //<requestFocus /> /* <-- without this line */
</EditText>

Benutzer-Avatar
Ziem

Unter Verwendung der Informationen anderer Poster habe ich die folgende Lösung verwendet:

im 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();
}

Benutzer-Avatar
Keet Sugathadasa

Versuchen klarFokus() anstatt setSelected(false). Jede Ansicht in Android hat sowohl Fokussierbarkeit als auch Auswahlmöglichkeit, und ich denke, dass Sie nur den Fokus löschen möchten.

  • Das klingt vielversprechend, aber an welchem ​​Punkt im Aktivitätslebenszyklus sollte es aufgerufen werden? Wenn ich es in onCreate() aufrufe, hat EditText immer noch den Fokus. Sollte es in onResume() oder an einem anderen Ort aufgerufen werden? Vielen Dank!

    – Markieren

    12. Oktober 2009 um 23:36 Uhr

  • Ich habe die akzeptierte Antwort mit dieser Antwort kombiniert. Ich rief myEditText.clearFocus(); myDummyLinearLayout.requestFocus(); in dem onResume der Aktivität. Dadurch wurde sichergestellt, dass der EditText den Fokus nicht beibehielt, wenn das Telefon gedreht wurde.

    – tedyay

    14. Oktober 2010 um 21:02 Uhr


1011340cookie-checkWie kann verhindert werden, dass EditText den Fokus erhält, wenn eine Aktivität in Android beginnt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy