Android 8.0 踩過的坑

神奇的綠色邊框

問題描述

頁面A有一個相對佈局RelativeLayout(有點擊事件),以下:android

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rl_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
	...
</RelativeLayout>

首次進入頁面A,顯示正常,從頁面A進入頁面B,再進入頁面C,返回到頁面A,此時RelativeLayout會出現綠色邊框。框架

心路歷程

  1. 確定是特定機型的問題,能夠先不解決;
  2. 後來發現有兩款機型,這是bug啊;
  3. 通過與同事討論,頭腦風暴:是否是高版本API發生變動;

解決流程

查看Android8.0的API變動,發現有以下變動:佈局

如今,若是您沒有爲 View 對象(前景或背景圖片)定義任何焦點狀態顏色,框架會爲 View 設置默認的焦點突出顯示顏色。此焦點突出顯示標誌是基於操做組件主題背景的漣漪圖片。code

看着這裏感受,好像找到問題了,下面應該是解決方案:xml

若是您不但願 View 對象在接收焦點時使用此默認突出顯示標誌,請在包含 View 的佈局 XML 文件中將 android:defaultFocusHighlightEnabled 屬性設置爲 false,或者將 false 傳遞至應用界面邏輯中的 setDefaultFocusHighlightEnabled()。對象

通過嘗試發現這個API在低版本中沒有,接着看,發現下面的描述:事件

可點擊的 View 對象如今默認也能夠成爲焦點。若是您但願 View 對象可點擊但不可成爲焦點,請在包含 View 的佈局 XML 文件中將 android:focusable 屬性設置爲 false,或者將 false 傳遞至應用界面邏輯中的 setFocusable()。圖片

給RelativeLayout增長屬性bug

android:focusable="false"

通過嘗試,問題解決了,忽然感受本身變大神了^-^(還不明白底層運行規則,若是有大神知道,請多多指教!)。layout

未完待續

相關文章
相關標籤/搜索