Android 焦點適配注意事項

  1. 有TabLayout時,在旋轉屏幕後需要設置當前所在的位置,使其顯示正常

  2. 使用了AppBarLayout 需注意需在xml中添加:

    android:focusable="false"
    android:touchscreenBlocksFocus="false"
    

    否則會導致底部的View的焦點獲取不正常。

  3. 由於需要適配阿拉伯語,引入了ViewPager2,但由於焦點事件的問題,在多個Fragment頁面中,如item的左右沒有其它佈局,但其它頁面在它左邊或者右邊,焦點會跳轉其它頁面中去(但是顯示的頁面還是在當前頁面),導致用戶以為失去了焦點,無法正常進行操作,需要替換為FrameLayout。
    替換後,在旋轉屏幕後需要注意fragmentManager里是否還有fragments,如有需判斷是否可以複用,不能複用則需要remove,否則會出現重複Fragment實例化的問題。

  4. 當前頁面如有view需要獲取焦點,會對焦點事件由所影響,如文字的跑馬燈,會使焦點事件位置不在起始位置,只能適配是從焦點點擊過來的事件,通過view.isInTouchMode() ,來自助獲取焦點。

    if (!view.isInTouchMode()) {
        needFocusView.requestFocus(); 
    }
    
  5. 使用PopupWindow 需注意設置 setFocusable(true); , 否則會導致PopupWindow無法獲取到焦點。

  6. 如是需要加載更多的地方,需要重寫view滾動監聽回調,使其加載更多正常工作。

  7. 有些位置需要監聽onkey事件,如是Fragment則需從Activity中把key事件傳遞過去。

  8. 有些view非常的長,但是沒有點擊事件,頁面顯示不了下一個需要獲取到焦點的view,就會出現失去焦點或滾動不正常的問題,如能設置能獲取焦點則最好設置可以獲取焦點(android:focusable="true")。

  9. 使用了AppBarLayout 後,有些位置需要滾動後隱藏起來,需要注意適配滾動處。

  10. 自定義的View需要注意,如不顯示的View需隱藏起來(設置view.visibility = View.GONE),否則會出現不顯示的view獲取到了焦點,導致用戶無法正常使用。

  11. UI的間隔最好是上下左右都有,這樣對後續的添加焦點事件的邊框會非常友好。

你可能感兴趣的:(Android 焦點適配注意事項)