我有一個SlidingDrawer從屏幕底部彈出並填充大約80%的屏幕。即使SlidingDrawer視圖處於焦點狀態,仍然可以單擊位於SlidingDrawer後面的視圖中的項目,按鈕和其他元素。當SlidingDrawer處於活動狀態時,我想禁用它後面的整個視圖,因此無法接收點擊和觸摸。是否有禁用整個視圖的好方法?我試過setEnable(false)和setClickable(false),但都沒有工作。如何在Android中禁用我的SlidingDrawer後的視圖?
幫助?
我有一個SlidingDrawer從屏幕底部彈出並填充大約80%的屏幕。即使SlidingDrawer視圖處於焦點狀態,仍然可以單擊位於SlidingDrawer後面的視圖中的項目,按鈕和其他元素。當SlidingDrawer處於活動狀態時,我想禁用它後面的整個視圖,因此無法接收點擊和觸摸。是否有禁用整個視圖的好方法?我試過setEnable(false)和setClickable(false),但都沒有工作。如何在Android中禁用我的SlidingDrawer後的視圖?
幫助?
我不知道這是否可行,但值得一試。在您的容器視圖(滑動抽屜滑過的那個視圖)上撥打 setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS)。
@Sara,請告訴我們它是否有效。 – tomash 2010-08-17 10:03:18
喬的回答對我來說並沒有訣竅。我的情況有點不同。我有一個有兩個孩子的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);
}
}
}
享受!
我試過在RelativeLayout
中放入SlidingDrawer
,而不是LinearLayout
。並在打開方法中設置 mySlidingDrawer.bringToFront()
。
所以我認爲這可能是一個解決方案。
在側面佈局不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>
在我看來,這是最簡單和最直接的解決方案,可以「覆蓋」彼此 - 這會使封面頁的背景「吸收」點擊而不是傳遞點擊。 – Elemental 2015-07-30 12:56:05
,因爲我無法重寫'SwipeRefreshLayout'方法'canChildScrollUp()'那就是爲什麼我使用這個解決方案。 – 2015-07-30 17:17:09
我用滑動抽屜太多,但從未有過這個問題^^ – 2010-09-24 14:40:27
你摸不着一個出來?有同樣的問題。 – 2011-03-22 15:03:34
http://stackoverflow.com/questions/5393314/android-slidingdrawer-doesnt-disable-buttons-under-the-drawer?lq=1 – Mertuarez 2012-08-17 13:57:36