【Android】记一次点击事件失效排查

2022-02-28  本文已影响0人  littlefogcat

事情很简单,一个返回按钮设置了点击事件,但是无论如何都触发不了。

布局也很简单,就是一个 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 查看了实时布局。
不看不知道,一看吓一跳:

actionbar
原来真的有个 action_bar_container 覆盖在按钮的上方!这玩意儿是哪儿来的呢?看名字就知道是系统自带的 ActionBar,但是为啥他不显示?通过查看主题,发现了这么一句:
<item name="actionBarStyle">@android:color/transparent</item>

原来他是一个透明的 ActionBar?这也太坑了吧!

找到问题就好解决了,直接隐藏了系统的 ActionBar 即可。

        if (getSupportActionBar() != null) {
            getSupportActionBar().hide();
        }
上一篇下一篇

猜你喜欢

热点阅读