Как отключить представление за моим SlidingDrawer в Android?
У меня есть SlidingDrawer, который появляется в нижней части экрана и заполняет экран примерно на 80%. Несмотря на то, что представление SlidingDrawer находится в фокусе, все равно можно щелкнуть по элементам, кнопкам и другим элементам в представлении, которое находится за SlidingDrawer. Когда SlidingDrawer активен/остановлен/в фокусе, я хочу отключить весь вид позади него, чтобы он не смог получить клики и касания. Есть ли хороший способ отключить весь просмотр? Я попробовал setEnable (false) и setClickable (false), но ни один из них не работает.
Справка
Ответы
Ответ 1
Вот способ обойти эту проблему (мне также нужно было решение) - захватить linearLayout, который содержит содержимое и добавить прослушиватель кликов. Попросите кликер-кликер отреагировать на клики (выбросить, что угодно) - и это остановит его распространение на вид под скользящим ящиком - он работает для меня - и он не блокирует другие предметы в ящике.
Ответ 2
Я попытался поместить SlidingDrawer
в RelativeLayout
вместо LinearLayout
. И установите
mySlidingDrawer.bringToFront()
в методе открытия.
Поэтому я думаю, что это может быть решение.
Ответ 3
В макете стороны do 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>
Ответ 4
Ответ Джо не помогло. Мой сценарий немного отличается. У меня есть FrameLayout с двумя детьми. Только один из детей должен быть "активным" в данный момент, а второй активен, первый не должен больше обрабатывать какие-либо данные. Мое решение:
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);
}
}
}
Наслаждайтесь!
Ответ 5
Я не знаю, будет ли это работать, но стоит попробовать. Вызов
setDescendantFocusability (ViewGroup.FOCUS_BLOCK_DESCENDANTS) на вашем контейнере View (тот, который сдвигает выдвижной ящик)