HintergrundWie behebt man das Thema "Fokus-Snatching" in Activity?
Development Tool: Android Studio 2.1.3
Gerät: Android OS Ver. 4.4.2
Ich habe eine Aktivität mit mehreren Ansichten. Ich wollte eine bestimmte Ansicht (editText1
in diesem Fall) programmatisch basierend auf vorherigen Aktionen des Benutzers fokussieren. Also habe ich View.requestFocus()
dafür eingesetzt. Vor diesem habe ich focusable
und focusableInThouchMode
von editText1
zu true
XML-Design-Datei festgelegt:
<EditText
android:id="@+id/editText1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight=".15"
android:inputType="numberDecimal"
android:maxLength="3"
android:text="1"
android:focusableInTouchMode="true"
android:focusable="true"
android:enabled="true" />
ideales Szenario wäre: Wenn Benutzer eine bestimmte myCheckBox
vor aktuelle Aktion geprüft hat, den Fokus auf dditText1
bewegen, wenn andere, Rückkehr .
if(myCheckBox.isChecked()){
editText1.selectAll();
if(adet.requestFocusFromTouch()) {
Log.i(General.LOG_TAG, "editText1 has focus");
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText1, InputMethodManager.SHOW_IMPLICIT);
}
return;
}
Aber in Wirklichkeit konzentrieren einige andere Ansicht Snatches sofort aus editText1
. Ich kann sogar sehen, dass editText1
Fokus bekam und einen Text darin für einen Augenblick ausgewählt hat. Außerdem kann ich im Protokoll sehen, dass editText1 den Fokus bekommen hat.
Meine Aktivität enthält ein LinearLayout und alle anderen Ansichten (CheckBox, EditText, ListView usw.) sind darin enthalten. Ich habe auch focusable
und focusableInThouchMode
-false
für andere Ansichten eingestellt als editText1
Frage
Wie kann ich andere Ansichten als meine editText
vermeiden, dass/schnappend Fokus in meinem Szenario?
Gibt es einen alternativen Ansatz für das, was ich hier versuche?
Versuchen Sie BringToFront auf der Ansicht programmatisch. Sehen Sie, ob es hilft. Es funktionierte für mich in meinem benutzerdefinierten Array-Adapter-Layout, das mehrere Textansichten und Schaltflächen hatte. – VikingPingvin
@VikingPingvin, versuchte ich 'bringToFront', Ergebnis sind gleich. – raidensan