Ответ 1
вы можете добавить android: clickable = "true" в свой тег содержимого слайдера (id reportContent). таким образом, он не "щелкнет". ваши кнопки внутри слайдера должны работать. Надеюсь;)
Это сценарий: У меня есть кнопка B, и скользящий каретщик, который при вытаскивании покрывает весь экран. Когда я вытаскиваю экран и касаюсь экрана, где Б был видимым, его действие все еще выполняется.
Как я могу обойти это?
Я нашел этот поток, описывающий ту же самую проблему, но ответа не было принято, и те, которые мне дали, не смогли получить работу.
UPDATE: У меня есть файл с именем 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);
}
вы можете добавить android: clickable = "true" в свой тег содержимого слайдера (id reportContent). таким образом, он не "щелкнет". ваши кнопки внутри слайдера должны работать. Надеюсь;)
Просто добавив к ответу @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/>
Я думаю, вы должны добавить слушателя с сенсорным экраном на ползунок и вернуть true. Таким образом, вы сообщите системе, что событие касания было уничтожено.
Эй, я застрял с этой ошибкой в течение нескольких дней, поэтому есть простой ответ
вы уже создали в своем классе скользящее устройство; просто реализуйте в своем классе OnDrawerOpenListener, onDrawerCloseListener
то пусть класс добавит нереализованные методы и перейдет к ondraweropenlistener{
slidingdrawer.setclickable(true);
}
и в drawercloselistener{
slidingdrawer.setclickable(false);
}
это будет установлено, когда ящик открыт, сделает его доступным для клика и предотвратит щелчок в обратном представлении и когда он закроет все, вернитесь к умолчанию
это простейшее решение, попробуйте: D
У меня была такая же проблема. Мои предметы в скользящем выдвижном ящике не смогли получить фокус. Попробовав несколько разных вещей, я обнаружил, что у меня есть место в скользящем ящике между тегом и линейной компоновкой с содержимым contentLayout.
Как только я удалил, все работает нормально.
<SlidingDrawer ....>
<FrameLayout android:id="@+id/slideHandle" ... />
**MOVED** <ScrollView> **TO**
<LinearLayout android:id="@+id/contentLayout" ... >
<ScrollView> **HERE**
Я надеюсь, что это поможет кому-то.
На вашем SlidingDrawer переопределите onTouch (просмотр v, событие MotionEvent) и верните true.
Единственное, о чем я не сомневаюсь, заключается в том, будет ли каркас рассматривать ящик для наложения вида, даже когда он закрыт. Если это так, то вы должны добавить некоторые проверки, чтобы увидеть состояние ящика, возвращая isOpened(), которое будет истинным, когда ящик открыт, но false, когда он закрыт.
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>
Образец шахты после бит фрустрации, где добавить этот андроид: clickable = "true"