2011-03-22 16 views
19

Este es el escenario: Tengo un botón B, y un cajón deslizante que cuando se saca 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.Android SlidingDrawer no deshabilita los botones "debajo" del cajón

¿Cómo puedo evitar esto?

He encontrado this que describe el mismo problema, pero no se aceptó ninguna respuesta y las que se dieron no pude trabajar.

ACTUALIZACIÓN: Tengo un archivo llamado Report.java, con el correspondiente archivo report.xml 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> 

componentes Adición:

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

Respuesta

45

puede agregar android: clickable = "true" a su etiqueta de contenido del control deslizante (id contentContent). de esa forma no hará "clic". sus botones dentro del control deslizante todavía deberían funcionar ... espero;)

+2

Si incluye un diseño de un archivo diferente (como yo), debe colocar android: clickable = "true" '' en el archivo de diseño incluido, no en la etiqueta de inclusión. Permítanme usar un ejemplo: – RichardB

+0

yap, esto lo hizo. Mi caso: cajón deslizante sobre una vista recicladora. Use .setclickable (); para habilitar o deshabilitar la vista debajo. – Nactus

2

creo que se debe añadir un oyente en contacto deslizante y vuelta verdad en él. De esa manera, le dirá al sistema que el evento táctil se ha consumido.

+0

Gracias por su respuesta. Vea mi comentario sobre la respuesta a continuación si puede. –

+1

después de que tienes una referencia al control deslizante, añadir en su método onCreate(): slider.setOnTouchListener (nueva OnTouchListener() {\t \t \t \t \t \t @ Override \t \t \t onTouch public boolean (Ver arg0, MotionEvent arg1) { \t \t \t \t \t \t \t return true; \t \t \t} \t \t}); –

0

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

La única cosa sobre la que no estoy seguro es si el marco considerará que el cajón se superpone a la Vista incluso cuando está cerrada. Si ese es el caso, entonces debe agregar algunos controles para ver el estado del cajón, devolviendo isOpened(), que será verdadero cuando el cajón esté abierto pero falso cuando esté cerrado.

+0

Mi problema es que no sé cómo llamar a un método en mi SlidingDrawer, ya que no tengo ningún método que yo sepa en mi clase Report.java. ¿Puedes explicar un poco sobre cómo se implementaría esto? ¿Escribiría el método onTouch en la clase Report.java y pasaría una vista que sería propiedad de SlidingDrawer o algo similar? –

+0

Agregué el componente al programa ahora, pero la pregunta es cómo puedo anular el método onTouch cuando instancia el SlidingDrawer usando el findViewById. –

1

Estaba teniendo el mismo problema. Mis artículos en el cajón deslizante no pudieron enfocarse. Después de probar varias cosas diferentes, descubrí que tenía una colocada en el cajón deslizante entre la etiqueta y el diseño lineal que tenía contentLayout.

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

13

Simplemente añadiendo a @ f-cuerno 'respuesta s:

Si se incluye una disposición de un archivo diferente (como yo) para el SlidingDrawer, usted tiene que poner el' android: se puede hacer clic = 'true' 'en el archivo de diseño incluido, no en la etiqueta de inclusión. Permítanme utilizar un ejemplo más:

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>' 

Esto hará lo siguiente:

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_ot her_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:clickable="true"> ............ 
<LinearLayout/> 
2

bueno me quedé con este error durante días por lo que no es la respuesta simple

ya ha creado en su clase de la slidingdrawer lo que sea; acaba de implementar en su clase, OnDrawerOpenListener, onDrawerCloseListener

entonces vamos a la clase añadir los métodos no implementados e ir al ondraweropenlistener{ slidingdrawer.setclickable(true); }

y en el drawercloselistener{ slidingdrawer.setclickable(false); }

Esto establecerá cuando se abre el cajón hará hacer clic y evitar que haga clic en la vista de atrás y cuando se cierra todo vuelva a la configuración predeterminada

esta es la solución más simple pruébelo: D

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> 

Muestra de mina después de la frustración poco dónde agregar que Android: se puede hacer clic = "true"

Cuestiones relacionadas