这是场景: 我有一个按钮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);
}
答案 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(),当抽屉被打开时它将是真的但是当它被关闭时是假的。