2016-08-16 2 views
0

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?

+0

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

+0

@VikingPingvin, versuchte ich 'bringToFront', Ergebnis sind gleich. – raidensan

Antwort

0

Sie könnten versuchen, android:focusable="false" für die Komponenten einzustellen, die nicht fokussiert werden sollten. Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe.

+0

Das habe ich schon gemacht, kein Glück – raidensan

Verwandte Themen