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

未完待续

相关文章
相关标签/搜索