如何禁用Android中的SlidingDrawer后面的视图?

我有一个从屏幕底部popup的SlidingDrawer,并填充大约80%的屏幕。 即使SlidingDrawer视图处于焦点状态,仍然可以单击位于SlidingDrawer后面的视图中的项目,button和其他元素。 当SlidingDrawer处于活动状态/拉起/合焦时,我想禁用它后面的整个视图,因此无法接收点击和触摸。 有没有一种很好的方法来禁用整个视图? 我已经尝试setEnable(false)和setClickable(false),但他们都没有工作。

帮帮我?

Solutions Collecting From Web of "如何禁用Android中的SlidingDrawer后面的视图?"

这里有一个方法来解决这个问题(我也需要一个解决scheme) – 抓住linearLayout持有的内容,并添加一个点击监听器。 让点击监听器响应点击(扔掉,不pipe)),然后停止它传播到滑动抽屉下面的视图 – 它适用于我 – 它不会阻止抽屉中的其他项目。

我试图把SlidingDrawer放在RelativeLayout ,而不是LinearLayout 。 并在打开方法中设置mySlidingDrawer.bringToFront()

所以我认为这可能是一个解决scheme。

在侧面布局做android:clickable="true"

例如以下文件是drawer.xml

LinearLayout android:id="@+id/drawer_view" clickable="true"

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> <LinearLayout android:id="@+id/drawer_view" android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" android:orientation="vertical" android:layout_gravity="start" android:clickable="true" android:background="@color/drawer_background"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="@drawable/order_list_selector" android:orientation="horizontal"> <ImageView android:layout_width="@dimen/user_image_w_h" android:layout_height="@dimen/user_image_w_h" android:scaleType="fitCenter" android:id="@+id/drawerUserImage" android:src="@drawable/ic_user_icon" android:layout_gravity="center_vertical" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_gravity="center_vertical" android:orientation="vertical" android:layout_marginLeft="5dp" android:padding="5dp"> <TextView android:id="@+id/drawerUserNameTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Mansukh Ahir" android:textColor="@android:color/black" android:textSize="@dimen/font_large" /> <TextView android:id="@+id/drawerEmailIdTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="@dimen/font_very_small"/> </LinearLayout> </LinearLayout> <View android:layout_width="fill_parent" android:layout_height="1dp" android:background="@color/holo_gray_light" /> <ListView android:id="@+id/drawerListSlideMenu" android:layout_width="wrap_content" android:layout_height="fill_parent" android:choiceMode="singleChoice" android:dividerHeight="1dp" /> </LinearLayout> </android.support.v4.widget.DrawerLayout> 

乔的回答并没有为我做诡计。 我的情况有点不同。 我有一个有两个孩子的FrameLayout。 在一个特定的时刻,只有一个孩子要“活跃”,而第二个孩子则活跃起来,第一个孩子不再处理任何投入。 我的解决scheme

  public static void changeVGstate(ViewGroup current, boolean enable) { current.setFocusable(enable); current.setClickable(enable); current.setEnabled(enable); for (int i = 0; i < current.getChildCount(); i++) { View v = current.getChildAt(i); if (v instanceof ViewGroup) changeVGstate((ViewGroup)v, enable); else { v.setFocusable(enable); v.setClickable(enable); v.setEnabled(enable); } } } 

请享用!

我不知道这是否会奏效,但值得一试。 在您的容器View(滑动抽屉滑过的那个)上调用setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS )。