2010-04-07 49 views
15

我有一個SlidingDrawer從屏幕底部彈出並填充大約80%的屏幕。即使SlidingDrawer視圖處於焦點狀態,仍然可以單擊位於SlidingDrawer後面的視圖中的項目,按鈕和其他元素。當SlidingDrawer處於活動狀態時,我想禁用它後面的整個視圖,因此無法接收點擊和觸摸。是否有禁用整個視圖的好方法?我試過setEnable(false)和setClickable(false),但都沒有工作。如何在Android中禁用我的SlidingDrawer後的視圖?

幫助?

+0

我用滑動抽屜太多,但從未有過這個問題^^ – 2010-09-24 14:40:27

+0

你摸不着一個出來?有同樣的問題。 – 2011-03-22 15:03:34

+0

http://stackoverflow.com/questions/5393314/android-slidingdrawer-doesnt-disable-buttons-under-the-drawer?lq=1 – Mertuarez 2012-08-17 13:57:36

回答

12

這裏有一種方法來解決這個問題(我也需要一個解決方案) - 抓住linearLayout來保存內容並添加一個點擊監聽器。讓點擊監聽器響應點擊(扔掉,不管)),然後停止它傳播到滑動抽屜下方的視圖 - 它適用於我 - 並且不會阻擋抽屜中的其他項目。

+0

+1這很好。謝謝! – flumpb 2011-05-17 19:51:59

+0

工作,偉大jugaad – 2013-02-12 10:18:22

+0

這相當於@mansukh在下面說 - 但他的方式是少代碼。 – Elemental 2015-07-30 12:57:28

1

喬的回答對我來說並沒有訣竅。我的情況有點不同。我有一個有兩個孩子的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); 
     } 
    } 
} 

享受!

2

我試過在RelativeLayout中放入SlidingDrawer,而不是LinearLayout。並在打開方法中設置 mySlidingDrawer.bringToFront()

所以我認爲這可能是一個解決方案。

2

在側面佈局不android:clickable="true"

對於實例以下文件是drawer.xml

LinearLayoutandroid: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> 
+0

在我看來,這是最簡單和最直接的解決方案,可以「覆蓋」彼此 - 這會使封面頁的背景「吸收」點擊而不是傳遞點擊。 – Elemental 2015-07-30 12:56:05

+1

,因爲我無法重寫'SwipeRefreshLayout'方法'canChildScrollUp()'那就是爲什麼我使用這個解決方案。 – 2015-07-30 17:17:09

相關問題