事情很简单,一个返回按钮设置了点击事件,但是无论如何都触发不了。
布局也很简单,就是一个 LinearLayout 中,包含一个 TitleBar 和一个 RecyclerView:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout ...>
<ImageView
android:id="@+id/btnClose"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="16dp" />
<TextView .../>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
首先排除了一些小白错误,确定了点击事件确实绑定上了,但是却无法点击。
在网上搜索时,看到有人说到一种情况,就是按钮被上面的控件覆盖了,导致点击事件没有传递过来。
但是,这个界面很简单啊,不可能存在被覆盖的情况吧?
虽然感觉问题不大,但是还是点开了 Layout Inspector 查看了实时布局。
不看不知道,一看吓一跳:
原来真的有个
action_bar_container
覆盖在按钮的上方!这玩意儿是哪儿来的呢?看名字就知道是系统自带的 ActionBar,但是为啥他不显示?通过查看主题,发现了这么一句:
<item name="actionBarStyle">@android:color/transparent</item>
原来他是一个透明的 ActionBar?这也太坑了吧!
找到问题就好解决了,直接隐藏了系统的 ActionBar 即可。
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
网友评论