2017-08-23 2 views
0

Ich habe eine Recyclerview und einen EditText in meinem Layout.Fokus/Klick auf Recyclerview

Wenn ich außerhalb des EditText klicke (d. H. Auf die Recycler-Ansicht klicke), möchte ich, dass die Recycleransicht den Fokus erhält und die EditText-Ansicht den Fokus verliert. Ich kann das nicht zur Arbeit bringen. Wenn ich ein leeres FrameLayout über den RecyclerView lege, funktioniert alles wie erwartet, aber ich kann den Recyclerview nicht scrollen. Warum kann ich Recyclerview nicht anklickbar und fokussierbar machen?

stelle ich diese Attribute in meinem Layout xml

android:clickable="true" 
android:focusable="auto" 
android:focusableInTouchMode="true" 
android:focusedByDefault="true" 

auf meinem Recyclerview/FrameLayout.

+0

Fokus festlegen: Das Framework behandelt den Fokus als Reaktion auf Benutzereingaben. Um den Fokus auf eine bestimmte Ansicht zu erzwingen, rufen Sie requestFocus() – phpdroid

+0

versuchen Android: focusable = "True" auch – phpdroid

+0

Versuchen Sie diesen Thread - https://stackoverflow.com/questions/1555109/stop-edittext-from-gaining-focus-at -Aktivität-Start rq = 1 –

Antwort

2

Der Grund, warum Ihre XML-Tags keine Wirkung haben, ist, wie Android Klicks verarbeitet. Jedes Ereignis durchläuft die Ansichtshierarchie des Layouts. Zuerst empfängt das oberste übergeordnete Element des Layouts das Ereignis. Wenn das Layout auf oberster Ebene das Ereignis nicht behandelt, wird es an das untergeordnete Element weitergegeben und so weiter.

In Ihrem Fall wird das Berührungsereignis zuerst an das FrameLayout gesendet und da es behandelt wird, erreicht das Ereignis nicht die RecyclerView und daher können Sie nicht scrollen.

Der richtige Umgang mit Berührungen besteht darin, onTouchListener sowohl in der RecyclerView-Ansicht als auch in der untergeordneten Ansicht festzulegen. Die onTouch auf dem RecyclerView wird zuerst genannt. Sie bearbeiten dort alle Ihre Analysen (Sie können x und y überprüfen und sehen, ob die Berührung in eine untergeordnete Ansicht fällt. Sie können auch den Fokus jeder Ansicht dynamisch ändern).

Wenn Sie nicht möchten, dass das Kind auch die Berührung behandelt return true;. Andernfalls return false; und das Berührungsereignis löst den onTouchListener der untergeordneten Ansicht aus.

+0

ich tat dies: recyclerview.setOnTouchListener (neu View.OnTouchListener() { @Override public boolean OnTouch (Blick Ansicht, Motionmotion) { hideKeyboard (EditText); edittext.clearFocus (); return false; } }); – Goran

+0

public void hideKeyboard (Ansicht anzeigen) { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService (Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow (view.getWindowToken(), 0); } – Goran

Verwandte Themen