设置app:elevation="0dp"后Toolbar内自定义布局隐藏但仍可响应点击的问题
我之前在项目里也碰到过一模一样的情况——设置AppBarLayout的app:elevation="0dp"后,Toolbar里的自定义布局突然看不见了,但点那个区域还能触发点击事件,简直离谱!这种情况大概率是AppBarLayout的默认裁剪行为、Toolbar的绘制层级或者背景设置冲突导致的,给你几个亲测有效的解决方案:
调整AppBarLayout的裁剪属性
很多时候AppBarLayout默认会开启clipChildren和clipToPadding,导致内部的Toolbar自定义布局被意外裁剪。你可以在AppBarLayout的标签里加上这两个属性,强制关闭裁剪:<android.support.design.widget.AppBarLayout android:id="@+id/appBarMain" android:layout_width="match_parent" android:layout_height="wrap_content" app:elevation="0dp" android:clipChildren="false" android:clipToPadding="false">同步设置Toolbar的透明背景和elevation
别只盯着AppBarLayout的elevation,Toolbar本身的属性也很关键。给Toolbar设置透明背景,同时把它的elevation也设为0dp,避免绘制层级异常:<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@android:color/transparent" app:elevation="0dp"> <!-- 你的自定义布局 --> </android.support.v7.widget.Toolbar>检查自定义布局的可见性与背景
先确认你的自定义布局没有被误设为android:visibility="invisible",也没有被其他View覆盖。另外,给自定义布局加个透明背景(android:background="@android:color/transparent"),有时候因为背景未设置,系统会跳过绘制逻辑,但触摸事件还是能穿透过去。适配滚动场景的scrollFlags
如果你是在带滚动的页面(比如用了CoordinatorLayout)里设置透明,可能是scrollFlags的组合导致布局变换异常。可以暂时把Toolbar的scrollFlags改成noScroll试试:<android.support.v7.widget.Toolbar ... app:layout_scrollFlags="noScroll" />
如果以上方法都没解决,你可以试试把AppBarLayout的背景也设为透明,同时检查自定义布局的宽高是否正确,有没有超出Toolbar的边界——有时候布局尺寸没设对,也会出现“看不见但能点”的诡异情况。
内容的提问来源于stack exchange,提问作者Testing Testing

