Navigation菜单展开时下方Spinner等UI元素仍可点击的问题求助
解决导航抽屉展开时下方UI仍可点击的问题
嘿,我看出来你的问题所在了——核心是布局层级搞反了!你把Spinner和包含DrawerLayout的布局放在同一个RelativeLayout里,导致两者是同级视图。当导航抽屉展开时,它并没有真正覆盖在Spinner上层,所以Spinner还能照常响应点击。而且你在merge标签里加的android:clickable="true"完全没用,因为merge不是实际的ViewGroup,这个属性根本不会被应用到任何有效视图上。
方案1:修正布局结构(最推荐)
把DrawerLayout作为整个页面的根容器,把Spinner放到DrawerLayout的内容区域(第一个子View)里。这样导航抽屉展开时会自然盖在内容上面,直接拦截所有点击事件。
修改后的activity_main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <!-- 内容区域:放Spinner和其他UI --> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <Spinner android:id="@+id/delivery_area_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_gravity="center" android:layout_marginLeft="5dp" android:background="@android:color/transparent" android:gravity="center" android:spinnerMode="dropdown" /> <!-- 引入顶部AppBar --> <include layout="@layout/app_bar_main" /> </RelativeLayout> <!-- 导航抽屉 --> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/layout_main_navigation_header" app:menu="@menu/main_drawer_menu" /> </android.support.v4.widget.DrawerLayout>
改完之后,原来的layout_drawer_navigation.xml就可以删掉了,因为现在DrawerLayout直接作为根布局存在,不需要再通过include引入。
方案2:小改拦截点击(适合不想大动布局的情况)
如果你不想大幅调整布局结构,可以在DrawerLayout的内容容器(也就是第一个子View,比如你的app_bar_main的根布局)里加上android:clickable="true"和android:focusable="true"。这样当抽屉展开时,内容区域会把点击事件拦下来,不会传到Spinner那里。
举个例子,修改app_bar_main.xml的根布局:
<!-- app_bar_main.xml的根布局 --> <LinearLayout <!-- 原有属性 --> android:clickable="true" android:focusable="true"> <!-- 原有内容 --> </LinearLayout>
这样设置后,导航抽屉展开时,点击内容区的任何地方都会被这个布局拦截,Spinner就点不动了。
内容的提问来源于stack exchange,提问作者Ezio
相关产品推荐
相关产品推荐

