Android SlidingDrawer no deshabilita los botones 'debajo' del cajón

Este es el escenario: Tengo un botón B, y una corredera que cuando se saca cubre toda la pantalla. Cuando retiro la pantalla y toco la pantalla donde B estaba visible, su acción aún se ejecuta.

¿Cómo puedo evitar esto?

Encontré este hilo describiendo el mismo problema, pero no se aceptó ninguna respuesta y las que se dieron no conseguí trabajar.

ACTUALIZACIÓN: Tengo un archivo denominado 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> 

Adición de componentes:

 protected void addComponents() { takePictureButton = (ImageButton) findViewById(R.id.takePictureButton); slidingDrawer = (SlidingDrawer) findViewById(R.id.drawer); } 

Usted podría agregar android: clickable = "true" a su etiqueta del contenido del deslizador (id reportContent). De esa manera no hará "clic". Sus botones dentro de la corredera todavía debe trabajar .. espero;)

Solo añadiendo a la respuesta de @ f-horn:

Si incluye un diseño de un archivo diferente (como yo) para el SlidingDrawer, debe colocar el 'android: clickable = "true"' en el archivo de diseño incluido, no en la etiqueta de inclusión. Permítanme más bien 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/> 

Creo que debe agregar un oyente de tacto en el control deslizante y devolver verdadero en él. De esta forma, le dirá al sistema que se ha consumido el evento táctil.

Hey i pegado con este error durante días por lo que es la respuesta simple

Usted ha creado ya en su clase el slidingdrawer lo que; Sólo implemente en su 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 el cajón se abre hará que sea clicable y evitar que haga clic en la vista trasera y cuando se cierra todo volver al valor predeterminado

Esta es la solución más simple probarlo: D

Estaba teniendo el mismo problema. Mis artículos en el cajón deslizante no fueron capaces de ganar el foco. Después de probar varias cosas diferentes, descubrí que tenía una colocada en el cajón deslizante entre la etiqueta y la disposición lineal que tenía el contenido de Layout.

Una vez que lo quite 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.

En su SlidingDrawer, anule onTouch (Ver v, evento MotionEvent) y devuelva true.

La única cosa 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 comprobaciones para ver el estado del cajón, devolviendo isOpened (), lo que será cierto cuando el cajón se abre pero es falso cuando se cierra.

 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 de mina después de la frustración de los bits donde añadir que android: clickable = "true"

  • SlidingPaneLayout.setShadowResource Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.