Android SlidingDrawer no desactiva los botones ''debajo'' del cajón
(7)
Este es el escenario: tengo un botón B, y un dibujante deslizante que cuando se extrae cubre toda la pantalla. Cuando saco la pantalla y toco la pantalla donde B solía estar visible, su acción aún se ejecuta.
¿Cómo puedo evitar esto?
Encontré this hilo que describe el mismo problema, pero no se aceptó ninguna respuesta y, dado que no pude ponerme a trabajar.
ACTUALIZACIÓN: Tengo un archivo llamado Report.java, con un archivo report.xml correspondiente como se ve a continuación.
<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>
Añadiendo componentes:
protected void addComponents() {
takePictureButton = (ImageButton) findViewById(R.id.takePictureButton);
slidingDrawer = (SlidingDrawer) findViewById(R.id.drawer);
}
Creo que deberías agregar un detector de toques en el control deslizante y devolverlo en verdadero. De esa manera, le dirá al sistema que el evento táctil se ha consumido.
En su SlidingDrawer, anule onTouch (Ver v, evento MotionEvent) y devuelva verdadero.
Lo único de lo que no estoy seguro es si el marco considerará el cajón para superponer la Vista incluso cuando esté cerrado. Si ese es el caso, entonces debe agregar algunas verificaciones para ver el estado del cajón, devolviendo isOpened (), que será verdadero cuando se abra el cajón, pero falso cuando esté cerrado.
Estaba teniendo el mismo problema. Mis artículos en el cajón deslizante no lograron enfocarse. Después de probar varias cosas diferentes, descubrí que tenía una ubicación en el cajón deslizante entre la etiqueta y el diseño lineal que tenía el diseño de contenido.
Una vez que lo saque todo funciona bien.
<SlidingDrawer ....>
<FrameLayout android:id="@+id/slideHandle" ... />
**MOVED** <ScrollView> **TO**
<LinearLayout android:id="@+id/contentLayout" ... >
<ScrollView> **HERE**
Espero que esto ayude a alguien.
Hola, me quedé con este error durante días, así que hay una respuesta simple.
ya has creado en tu clase el slidedrawer lo que sea; simplemente implementa en tu clase, OnDrawerOpenListener, onDrawerCloseListener
luego deje que la clase agregue los métodos no implementados y vaya al ondraweropenlistener{ slidingdrawer.setclickable(true); }
ondraweropenlistener{ slidingdrawer.setclickable(true); }
y en el drawercloselistener{ slidingdrawer.setclickable(false); }
drawercloselistener{ slidingdrawer.setclickable(false); }
esto se establecerá cuando se abra el cajón, se podrá hacer clic y evitará que se haga clic en la vista posterior y cuando se cierre todo volverá al valor predeterminado
Esta es la solución más sencilla. Inténtalo: D.
Solo añadiendo a la respuesta de @f-horn:
Si incluye un diseño de un archivo diferente (como lo hago yo) para SlidingDrawer, debe colocar ''android: clickable = "true"'' en el archivo de diseño incluido, no en la etiqueta de inclusión. Déjame preferir usar un ejemplo:
Esto no funcionará:
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>''
Esta voluntad:
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/>
podría agregar android: clickable = "true" a su etiqueta de contenido del control deslizante (id reportContent). de esa manera no hará "clic". sus botones dentro del control deslizante todavía deberían funcionar ... espero;)
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>
Muestra mía después de un poco de frustración donde agregar ese android: clickable = "true"