2011-03-22 81 views
19

這是該方案禁用按鈕。 當我拉出屏幕並觸摸B用來可見的屏幕時,其操作仍然執行。的Android SlidingDrawer不「下」抽屜

我該如何解決這個問題?

我發現this線程描述非常相同的問題,但沒有答案被接受和那些給予我沒能獲得工作。

更新:我有一個名爲Report.java文件,相應地report.xml將文件,如下圖所示。

<SlidingDrawer 
    android:id="@+id/drawer" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:handle="@+id/reportSlideButton" 
    android:content="@+id/reportContent" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:id="@id/reportContent" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:layout_weight="1" 
     android:padding="10dp" 
     android:background="@color/bg_color"> 
      <TextView android:id="@+id/garbageTypeTextView" 
       android:layout_height="wrap_content" 
       android:textColor="@color/text" 
       android:layout_width="fill_parent" 
       android:text="@string/garbageTypeString" 
       android:textStyle="bold"/> 
      <Spinner android:id="@+id/garbageTypeSpinner" 
       android:layout_height="wrap_content" 
       android:layout_width="fill_parent"/> 
      <TextView android:id="@+id/textViewForDateTitle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/dateString" 
       android:textColor="@color/text" 
       android:textStyle="bold" /> 
      <TextView android:id="@+id/dateTextView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="@color/text" /> 
      <TextView android:id="@+id/textViewForAddressTitle" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="@string/addressString" 
       android:textColor="@color/text" 
       android:textStyle="bold" /> 
      <TextView android:id="@+id/addressTextView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="@color/text" /> 
      <TextView android:id="@+id/textViewForPositionTitle" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="@string/positionString" 
       android:textColor="@color/text" 
       android:textStyle="bold" /> 
      <TextView android:id="@+id/positionTextView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="@color/text" /> 
      <TextView android:id="@+id/textViewForCommentTitle" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="@string/commentString" 
       android:textColor="@color/text" 
       android:textStyle="bold" /> 
      <EditText android:id="@+id/commentTextBox" 
       android:layout_height="fill_parent" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
      <Button android:id="@+id/sendCrapportButton" 
       android:onClick="sendCrapport" 
       android:layout_height="wrap_content" 
       android:layout_width="fill_parent" 
       android:text="Skicka rapport" /> 

    </LinearLayout> 
     <Button android:id="@id/reportSlideButton" 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:text=">"/> 
</SlidingDrawer> 

添加組件:

protected void addComponents() { 
    takePictureButton = (ImageButton) findViewById(R.id.takePictureButton); 
    slidingDrawer = (SlidingDrawer) findViewById(R.id.drawer); 
} 

回答

45

你可以添加機器人:可點擊= 「true」 以你的滑塊內容標籤(ID reportContent)。這樣它不會「點擊」。你的滑塊內的按鈕應該仍然工作..我希望;)

+2

如果您包含來自不同文件的佈局(與我一樣),則必須將android:clickable =「true」「'放入包含的佈局文件中,而不要放在include標籤中。讓我用一個例子: – RichardB 2011-10-02 13:51:25

+0

邑,這是做到了。我的情況:將抽屜滑過回收站視圖。使用 .setclickable();啓用或禁用底下的視圖。 – Nactus 2016-01-28 15:39:50

2

我想你應該在滑塊平添一份監聽器,並在它返回true。 這樣,您將告訴系統觸摸事件已被消耗。

+0

感謝您的答覆。如果可以的話,請參閱我的評論。 – 2011-03-22 15:28:21

+1

後你得滑塊上的參考,增加您的onCreate()方法:slider.setOnTouchListener(新OnTouchListener(){\t \t \t \t \t \t @覆蓋 \t \t \t公共布爾onTouch(查看arg0中,MotionEvent ARG1){ \t \t \t \t \t \t \t迴歸真實; \t \t \t} \t \t}); – 2011-03-22 15:50:30

0

在您SlidingDrawer,覆蓋onTouch(視圖V,MotionEvent事件),並返回true。

有一件事我不清楚的是框架是否會考慮覆蓋,即使它被關閉查看抽屜。如果是這種情況,那麼您應該添加一些檢查來查看抽屜的狀態,並返回isOpened(),當抽屜打開時它將爲true,當抽屜關閉時爲false。

+0

我的問題是,我不知道如何調用我的SlidingDrawer上的方法,因爲我沒有這樣的方法,只要我可以告訴我的Report.java類。你能否詳細說明這將如何實施?我會在Report.java類中編寫onTouch方法,並傳遞一個由SlidingDrawer擁有的視圖或其他東西嗎? – 2011-03-22 15:27:27

+0

現在把組件添加到程序中,但問題是當我使用findViewById實例化SlidingDrawer時,我可以重寫onTouch方法。 – 2011-03-22 15:39:56

1

我有同樣的問題。我的滑動抽屜裏的物品無法獲得焦點。在嘗試了幾個不同的事情之後,我發現我已經放置在標籤和具有contentLayout的線性佈局之間的滑動抽屜中。

一旦我刪除它,一切工作正常。

<SlidingDrawer ....> 
    <FrameLayout android:id="@+id/slideHandle" ... /> 

     **MOVED** <ScrollView> **TO** 
    <LinearLayout android:id="@+id/contentLayout" ... > 
     <ScrollView> **HERE** 

我希望這有助於某人。

13

只是增加@ F-喇叭的回答是:

如果包括從不同的文件佈局(像我一樣)的SlidingDrawer,你必須把'機器人:可點擊=‘真’ '在包含的佈局文件中,而不是在包含標籤中。讓我寧願用一個例子:

這是行不通的:

main.xml中

<SlidingDrawer android:handle="@+id/handle" 
     android:content="@+id/content"> 

     <ImageView android:id="@id/handle" /> 
     <include android:id="@+id/content" layout="@layout/some_other_layout" 
     android:clickable="true"/> 
</SlidingDrawer>' 

這將:

main.xml中

<SlidingDrawer android:handle="@+id/handle" 
     android:content="@+id/content"> 

     <ImageView android:id="@id/handle" /> 
     <include android:id="@+id/content" layout="@layout/some_other_layout"/> 
</SlidingDrawer>' 

some_ot her_layout。XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:clickable="true"> ............ 
<LinearLayout/> 
2

哎我還是堅持了這個錯誤的天,以便有簡單的答案

你已經在你的類創建的slidingdrawer什麼; 只是實現類,OnDrawerOpenListener,onDrawerCloseListener

然後讓類中添加未實現的方法,並轉到ondraweropenlistener{ slidingdrawer.setclickable(true); }

,並在drawercloselistener{ slidingdrawer.setclickable(false); }

這將設置當抽屜被打開將使它可點擊並防止點擊後面的視圖,當它關閉時,每件事回到默認狀態

這是最簡單的解決方案嘗試它:D

0
This is My main layout and where i introduce sliding drawer inside this. 

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/Beige" 
    android:clickable="true" 
    android:orientation="vertical" > 

    <Button 
    android:id="@+id/DoneStart" 
    android:layout_width="100dp" 
    android:layout_height="40dp" 
    android:textSize="14sp" /> 

    <SlidingDrawer 
    android:id="@+id/SlidingDrawer" 
    android:layout_width="wrap_content" 
    android:layout_height="100dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:content="@+id/contentLayout" 
    android:handle="@+id/handle_image" 
    android:padding="1dp" 
    android:rotation="180" > 

    <LinearLayout 
    android:id="@+id/contentLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
    android:id="@+id/TextView01" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_weight="8" 
    android:text="Hello Slider" /> 
    </LinearLayout> 
    </SlidingDrawer> 

位挫折後我的樣品在哪裏添加機器人:可點擊=「真」