Ich habe eine Activity
in Android, mit zwei Elementen:
EditText
ListView
Wenn mein Activity
Start ist, hat der EditText
sofort Fokus (blinkender Cursor). Ich möchte nicht, dass ein Steuerelement beim Start einen Eingabefokus hat. Ich habe es versucht:
EditText.setSelected(false);
EditText.setFocusable(false);
Kein Glück. Wie kann ich die davon überzeugen EditText
, sich beim Activity
Start nicht selbst auszuwählen ?
android
listview
android-edittext
focus
Kennzeichen
quelle
quelle
android:focusableInTouchMode="true"
!android:focusableInTouchMode="true"
decktandroid:focusable="true"
+ noch etwas mehr ab, ist also in diesem Fallandroid:focusable="true"
unnötig und kann entfernt werden. Zusätzlich kann die Dummy-Ansicht eine Ansicht anstelle eines LinearLayout sein. Dies spart Rechenleistung und erspart Ihnen einige Warnungen. Daher ist meine Empfehlung, die Dummy-Ansicht durch<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
Ist das eigentliche Problem, dass Sie einfach nicht wollen, dass es überhaupt einen Fokus hat? Oder möchten Sie nicht, dass die virtuelle Tastatur als Ergebnis der Fokussierung angezeigt wird
EditText
? Ich sehe kein wirkliches Problem mit demEditText
Fokus auf den Start, aber es ist definitiv ein Problem, das softInput-Fenster geöffnet zu haben, wenn der Benutzer nicht explizit aufgefordert hat, sich auf das zu konzentrierenEditText
(und als Ergebnis die Tastatur zu öffnen).Wenn es sich um ein Problem der virtuellen Tastatur handelt, lesen Sie die Dokumentation zum
AndroidManifest.xml
Element <activity> .android:windowSoftInputMode="stateHidden"
- Verstecke es immer, wenn du die Aktivität betrittst.oder
android:windowSoftInputMode="stateUnchanged"
- nicht ändern (z. B. nicht anzeigen , wenn es nicht bereits angezeigt wird, aber wenn es beim Betreten der Aktivität geöffnet war, lassen Sie es geöffnet).quelle
EditText
Fokus daran hindern würde, den Fokus zu erhalten. Es wird tatsächlich klargestellt, dass Sie auf diese Weise verhindern, dass sich der IME der Softwaretastatur automatisch im Fokus öffnet. weil es wahrscheinlicher ist, dass das größere Problem darin besteht, dass die Softtastatur unerwartet auftaucht und nicht der Fokus selbst. Wenn Ihr Problem darin besteht, dass SieEditText
tatsächlich den Fokus haben, verwenden Sie die Antwort eines anderen.Es gibt eine einfachere Lösung. Legen Sie diese Attribute in Ihrem übergeordneten Layout fest:
Und jetzt, wenn die Aktivität beginnt, wird dieses Hauptlayout standardmäßig fokussiert.
Außerdem können wir den Fokus zur Laufzeit aus untergeordneten Ansichten entfernen (z. B. nach Abschluss der untergeordneten Bearbeitung), indem wir den Fokus erneut auf das Hauptlayout legen, wie folgt:
Guter Kommentar von Guillaume Perrot :
Wirklich können wir sehen, dass die
beforeDescendants
Einstellung in derViewGroup.initViewGroup()
Methode (Android 2.2.2) als Standard festgelegt ist . Aber nicht gleich 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;
Danke an Guillaume.
quelle
Die einzige Lösung, die ich gefunden habe, ist:
android:focusable="true"
und einandroid:focusableInTouchMode="true"
Und das
EditText
wird nicht den Fokus bekommen, nachdem die Aktivität gestartet wurdequelle
Das Problem scheint von einer Eigenschaft zu stammen, die ich nur im
XML form
Layout sehen kann.Stellen Sie sicher, dass diese Zeile am Ende der Deklaration innerhalb der
EditText
XML-Tags entfernt wird:Das sollte so etwas geben:
quelle
Unter Verwendung der Informationen anderer Poster habe ich die folgende Lösung verwendet:
im Layout XML
in onCreate ()
und schließlich in onResume ()
quelle
Versuchen Sie stattdessen clearFocus () statt
setSelected(false)
. Jede Ansicht in Android hat sowohl Fokussierbarkeit als auch Auswahlbarkeit, und ich denke, dass Sie nur den Fokus löschen möchten.quelle
myEditText.clearFocus(); myDummyLinearLayout.requestFocus();
in demonResume
von der Aktivität. Dadurch wurde sichergestellt, dass der EditText den Fokus beim Drehen des Telefons nicht beibehielt.Im Folgenden wird verhindert, dass edittext beim Erstellen den Fokus übernimmt. Wenn Sie sie berühren, greifen Sie jedoch darauf zu.
Sie setzen also fokussierbar in der XML auf false, aber der Schlüssel befindet sich in Java, wo Sie den folgenden Listener hinzufügen:
Da Sie false zurückgeben, dh das Ereignis nicht verbrauchen, wird das Fokussierungsverhalten wie gewohnt fortgesetzt.
quelle
Ich hatte mehrere Antworten einzeln ausprobiert, aber der Fokus liegt immer noch auf dem EditText. Ich habe es nur geschafft, indem ich zwei der folgenden Lösungen zusammen verwendet habe.
(Referenz von Silver https://stackoverflow.com/a/8639921/15695 )
und entfernen
bei EditText
(Referenz von floydaddict https://stackoverflow.com/a/9681809 )
quelle
Späte, aber einfachste Antwort, fügen Sie diese einfach im übergeordneten Layout des XML hinzu.
Upvote, wenn es dir geholfen hat! Viel Spaß beim Codieren :)
quelle
Keine dieser Lösungen hat bei mir funktioniert. Die Art und Weise, wie ich den Autofokus repariere, war:
quelle
Einfache Lösung: In
AndroidManifest
inActivity
Tag - Nutzungquelle
Sie können einfach "fokussierbar" und "fokussierbar im Berührungsmodus" so einstellen, dass sie beim ersten Mal
TextView
den Wert "true" habenlayout
. Auf diese Weise wird die Aktivität zu Beginn der AktivitätTextView
fokussiert, aber aufgrund ihrer Natur wird auf dem Bildschirm nichts fokussiert angezeigt, und natürlich wird keine Tastatur angezeigt ...quelle
Folgendes hat für mich in funktioniert
Manifest
. Schreiben ,quelle
Ich musste den Fokus programmgesteuert aus allen Bereichen entfernen. Ich habe gerade die folgenden zwei Anweisungen zu meiner Hauptlayoutdefinition hinzugefügt.
Das ist es. Mein Problem wurde sofort behoben. Danke, Silver, dass du mich in die richtige Richtung gelenkt hast.
quelle
Fügen Sie
android:windowSoftInputMode="stateAlwaysHidden"
das Aktivitäts-Tag derManifest.xml
Datei hinzu.Quelle
quelle
Wenn Sie eine andere Ansicht zu Ihrer Aktivität wie a haben
ListView
, können Sie auch Folgendes tun:in Ihrem
onResume()
Fokus von der zu ergreifeneditText
.Ich weiß, dass diese Frage beantwortet wurde, aber nur eine alternative Lösung bietet, die für mich funktioniert hat :)
quelle
Versuchen Sie dies vor Ihrem ersten bearbeitbaren Feld:
quelle
Fügen Sie in der
onCreate
Methode Folgendes hinzu :quelle
Da ich das XML nicht gerne mit Funktionen verschmutzen möchte, habe ich diese Methode erstellt, die den Fokus "transparent" aus der ersten fokussierbaren Ansicht stiehlt und sich dann bei Bedarf selbst entfernt!
quelle
Spät, aber vielleicht hilfreich. Erstellen Sie einen Dummy-EditText oben in Ihrem Layout und rufen Sie ihn
myDummyEditText.requestFocus()
aufonCreate()
Das scheint sich so zu verhalten, wie ich es erwartet habe. Konfigurationsänderungen usw. müssen nicht behandelt werden. Ich benötigte dies für eine Aktivität mit einer langen Textansicht (Anweisungen).
quelle
Schreiben Sie diese Zeile in Ihr Elternlayout ...
quelle
Ja, ich habe das Gleiche getan - ein 'Dummy'-Linearlayout erstellt, das den anfänglichen Fokus erhält. Außerdem habe ich die 'nächsten' Fokus-IDs so eingestellt, dass der Benutzer sie nach einmaligem Scrollen nicht mehr fokussieren kann:
viel Arbeit, nur um den Fokus auf eine Ansicht loszuwerden ..
Vielen Dank
quelle
Für mich hat auf allen Geräten Folgendes funktioniert:
Stellen Sie dies einfach als eine Ansicht vor die problematische fokussierte Ansicht, und das war's.
quelle
Das Einfachste, was ich getan habe, ist, mich auf eine andere Ansicht in onCreate zu konzentrieren:
Dadurch wurde das Hochfahren der Softtastatur gestoppt und im EditText blinkte kein Cursor.
quelle
Dies ist die perfekte und einfachste Lösung. Ich verwende diese immer in meiner App.
quelle
quelle
Schreiben Sie diesen Code in die
Manifest
Datei, in derActivity
Sie die Tastatur nicht öffnen möchten.Manifestdatei:
quelle
Bei
onCreate
Ihrer Aktivität, fügen Sie einfach die VerwendungclearFocus()
auf Ihrem EditText Elemente. Zum Beispiel,Und wenn Sie den Fokus auf ein anderes Element umleiten möchten, verwenden Sie
requestFocus()
dieses. Zum Beispiel,quelle
Ich verwende den folgenden Code, um zu verhindern, dass ein EditText den Fokus stiehlt, wenn meine Taste gedrückt wird.
Blenden Sie den Bearbeitungstext grundsätzlich aus und zeigen Sie ihn dann erneut an. Dies funktioniert bei mir so wie der EditText ist nicht es keine Rolle spielt, ob er .
Sie können versuchen, es nacheinander zu verstecken und anzuzeigen, um festzustellen, ob es dadurch den Fokus verliert.
quelle