AppBarLayout设置elevation=0dp后无法响应触摸事件(点击)

6
我在我的应用中使用了CoordinatorLayout内的AppBarLayout。由于某些设计要求,我被迫将其高度设置为0,以去除AppBarLayout元素下方的阴影(通过设置app:elevation="0"实现)。但在这样做后,元素内部的选项卡不会响应触摸/点击事件。

将标高设回1dp,元素就能响应触摸/点击事件,但我又回到有阴影的状态...

有没有人有建议如何在AppBarLayout处于0dp标高时使元素响应触摸/点击事件?

代码示例:

  <android.support.design.widget.CoordinatorLayout
        android:id="@+id/rootLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="@dimen/app_bar_height"
            app:elevation="0dp">

            <android.support.v7.widget.Toolbar
                android:id="@+id/my_toolbar"
                android:layout_height="wrap_content"
                android:layout_width="match_parent"
                android:minHeight="?attr/actionBarSize">

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="45dp"
                    android:scaleType="fitCenter"
                    android:layout_gravity="center"
                    android:id="@+id/toolbar_logo"
                    android:maxHeight="45dp"
                    android:contentDescription="Main logo"/>
            </android.support.v7.widget.Toolbar>

            <android.support.design.widget.TabLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabIndicatorColor="@color/tab_indicator_color"
                app:tabTextColor="@color/primary_text_grey"
                app:tabIndicatorHeight="3dp"
                android:id="@+id/tab_layout">
            </android.support.design.widget.TabLayout>

        </android.support.design.widget.AppBarLayout>.......
2个回答

3

想要解决这个问题,因为我遇到了非常类似的问题。

问题不在于 elevation=0dp,而是 CoordinatorLayout 的行为类似于 FrameLayout,这意味着在 XML 中后声明的元素会“覆盖”先前声明的元素。更改为线性布局之所以有效是因为它不支持“重叠元素”。

正确的解决方法是将你的 AppBarLayout(或任何其他元素)移到在其后声明的任何拦截事件的元素上方。当 elevation > 0 时它能工作的原因是 elevation 在分派触摸事件时被考虑在内,但如果两个元素的 elevations 相等,则会遇到相同的问题。


2

通过将CoordinatorLayout元素替换为具有android:orientation="vertical"LinearLayout来解决此问题。使用CoordinatorLayout似乎是错误的方法。


很奇怪但是有效,我把FrameLayout改成了LinearLayout,然后它就可以工作了。 - nicolas asinovich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接