20

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

我怎样才能解决这个问题?

我发现这个线程描述了同样的问题,但没有接受任何答案,并且给出的答案我没有设法开始工作。

更新:我有一个名为 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);
}
4

7 回答 7

45

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

于 2011-03-28T16:49:22.250 回答
13

只需添加到@f-horn 的答案:

如果您为 SlidingDrawer 包含来自不同文件的布局(就像我一样),您必须将 'android:clickable="true"' 放在包含的布局文件中,而不是包含标签中。让我宁愿用一个例子:

这将不起作用:

主要的.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>'

这会:

主要的.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/>
于 2011-10-02T14:01:16.880 回答
2

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

于 2011-03-22T15:12:00.663 回答
2

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

你已经在你的类中创建了slidingdrawer;只需在你的类中实现,OnDrawerOpenListener,onDrawerCloseListener

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

并且在drawercloselistener{ slidingdrawer.setclickable(false); }

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

这是最简单的解决方案尝试一下:D

于 2012-10-17T18:04:27.403 回答
1

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

一旦我删除它,一切正常。

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

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

我希望这可以帮助别人。

于 2011-07-21T21:05:56.610 回答
0

在您的 SlidingDrawer 上,覆盖 onTouch(View v, MotionEvent event) 并返回 true。

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

于 2011-03-22T15:15:43.770 回答
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>

有点沮丧后我的示例在哪里添加 android:clickable="true"

于 2015-05-05T10:21:22.177 回答