Android SlidingDrawer不会禁用抽屉下的按钮

时间:2011-03-22 15:07:20

标签: android slidingdrawer

这是场景: 我有一个按钮B和一个拉出的抽屉,当拉出时覆盖整个屏幕。 当我拉出屏幕并触摸B曾经可见的屏幕时,其动作仍然执行。

我该如何解决这个问题?

我发现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);
}

6 个答案:

答案 0 :(得分:45)

你可以将android:clickable =“true”添加到你的滑块内容标签(id reportContent)。这样它就不会“点击”。滑块内的按钮应该仍然可以工作..我希望;)

答案 1 :(得分:13)

刚刚加入@ f-horn的回答:

如果你为SlidingDrawer包含来自不同文件的布局(就像我一样),你必须在包含的布局文件中放入'android:clickable =“true”',而不是在include标签中。我想用一个例子来说明:

这不起作用:

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_other_layout.xml:

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

答案 2 :(得分:2)

我认为你应该在滑块上添加一个触控侦听器并在其上返回true。 这样,您将告诉系统触摸事件已被消耗。

答案 3 :(得分:2)

嘿,我坚持这个错误好几天所以有简单的答案

你已经在班上创造了抽屉画家; 只需在您的类中实现OnDrawerOpenListener,onDrawerCloseListener

然后让该类添加未实现的方法并转到ondraweropenlistener{ slidingdrawer.setclickable(true); }

drawercloselistener{ slidingdrawer.setclickable(false); }

这将设置抽屉打开时将使其可点击并防止在后面的视图中单击,当它关闭时,每件事都恢复到默认值

这是最简单的解决方案:D

答案 4 :(得分:1)

我遇到了同样的问题。我在滑动抽屉中的物品无法获得焦点。在尝试了几个不同的东西之后,我发现我在标签和具有contentLayout的线性布局之间的滑动抽屉中放置了一个。

一旦我删除它一切正常。

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

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

我希望这有助于某人。

答案 5 :(得分:0)

在SlidingDrawer上,覆盖onTouch(View v,MotionEvent事件)并返回true。

我不确定的一件事是框架是否会考虑抽屉覆盖视图,即使它已关闭。如果是这种情况,那么你应该添加一些检查以查看抽屉的状态,返回isOpened(),当抽屉被打开时它将是真的但是当它被关闭时是假的。