2017-08-23 88 views
0

我在我的佈局中得到了一個Recyclerview和一個EditText。重點/點擊recyclerview

當我點擊EditText之外(即點擊Recyclerview)時,我想讓Recyclerview獲得焦點,並讓EditText視圖鬆散焦點。我無法得到這個工作。如果我把一個空的FrameLayout放在Recyclerview上面,一切都按預期工作,但我不能滾動Recyclerview。爲什麼不能將Recyclerview設置爲可點擊和可聚焦的?

我設置在我的佈局XML

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

我Recyclerview/FrameLayout裏這些屬性。

+0

集中焦點:該框架將響應用戶輸入來處理移動焦點。要強制重點到一個特定的視圖,請調用requestFocus() – phpdroid

+0

嘗試android:focusable =「true」也 – phpdroid

+0

試試這個線程 - https://stackoverflow.com/questions/1555109/stop-edittext-from-gaining-focus-at -activity-啓動RQ = 1 –

回答

2

你的xml標籤沒有效果的原因是Android處理點擊的方式。每個事件都通過佈局的視圖層次結構。首先,佈局的頂級父級接收事件。如果頂級佈局不處理事件,則它將傳遞給它下面的孩子等等。

在你的情況下,觸摸事件首先發送到FrameLayout,並且由於它被處理,事件沒有達到RecyclerView,因此你不能滾動。

處理觸摸的正確方法是在RecyclerView和子視圖上設置onTouchListener。 RecyclerView上的onTouch首先被調用。你可以在那裏處理所有的分析(你可以檢查x和y,也可以看看觸摸是否落入子視圖中,也可以動態改變每個視圖的焦點)。

如果你不想讓孩子也處理觸摸return true;。否則,return false;和觸摸事件將觸發子視圖的onTouchListener。

+0

我這樣做:recyclerview.setOnTouchListener(新View.OnTouchListener(){ @覆蓋 公共布爾onTouch(查看視圖,MotionEvent motionEvent){ hideKeyboard(EditText上); edittext.clearFocus( ); return false; } }); – Goran

+0

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