6

我在我的应用程序中使用AppBarLayout了里面的CoordinatorLayout, 。由于某些设计要求,我不得不AppBarLayout通过将其高程属性设置为 0 来移除元素下方的阴影。(app:elevation="0")。在对 AppBarLayout 中的元素执行此操作后,选项卡不会响应触摸/单击事件。

通过将高度设置回 1dp,元素响应触摸/单击事件,但随后我又回到了阴影......

有没有人建议如何让元素AppBarLayout0dp海拔高度时响应触摸/点击事件?

代码摘录:

  <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>.......
4

2 回答 2

3

因为我遇到了一个非常相似的问题,所以想要关闭这个循环。

问题不在于elevation=0dp,问题在于CoordinatorLayout 的行为类似于FrameLayout,这意味着稍后在XML 中声明的元素位于之前声明的元素的“顶部”。更改为线性布局碰巧有效,因为它不支持“重叠元素”。

正确的解决方案是将您的 AppBarLayout(或任何元素)移动到在拦截事件之后声明的任何元素之上。当海拔 > 0 时它起作用的原因是因为在调度触摸事件时考虑了海拔,但在海拔相等的情况下,您将遇到同样的问题。

于 2016-06-10T23:26:10.163 回答
2

CoordinatorLayout通过将元素替换为LinearLayoutwith解决了这个问题android:orientation="vertical"。使用CoordinatorLayout似乎是一种错误的方法。

于 2016-02-02T09:40:32.237 回答