2011-08-02 17 views
6

Hola que estoy recibiendo una excepción de tiempo de ejecución:SlidingDrawer no puede tener dimensiones ESPECIFICADOS

SlidingDrawer cannot have UNSPECIFIED dimensions 

Desde el XML siguiente, Can cualquier ayuda en esto.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scroll" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true"> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:padding="10px" android:background="@drawable/formbg"> 


<LinearLayout android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:orientation="horizontal" android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" android:layout_alignParentRight="true"> 

    <TextView android:id="@+id/label" 
       android:layout_width="120px" 
       android:layout_height="wrap_content" 
       android:text="Question Title" 
       android:textStyle="bold" 
       android:textSize="12sp" 
       android:textColor="#000000" 
    android:paddingLeft="5px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
       /> 

    <EditText android:id="@+id/entry" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textColor="#000000" 
    android:paddingLeft="10px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
       /> 

</LinearLayout> 


    <LinearLayout android:id="@+id/linearLayout2" 
     android:layout_below="@id/linearLayout1" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:orientation="horizontal" 
     android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:paddingRight="0px" > 

    <TextView android:id="@+id/pass" 
       android:layout_width="120px" 
       android:layout_height="wrap_content" 
       android:text="Type Description" 
       android:textStyle="bold" 
       android:textSize="12sp" 
       android:textColor="#000000" 
    android:paddingLeft="5px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
    /> 

    <EditText android:id="@+id/passentry" 
       android:layout_width="match_parent" 
       android:layout_height="100px" 
       android:textColor="#000000" 
    android:paddingLeft="10px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
       /> 

    </LinearLayout> 


    <LinearLayout android:id="@+id/linearLayout3" 
     android:layout_below="@id/linearLayout2" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:orientation="horizontal" 
     android:layout_alignParentLeft="true" android:layout_alignParentRight="true"> 

    <TextView android:id="@+id/labelbounty" 
       android:layout_width="120px" 
       android:layout_height="wrap_content" 
       android:text="Enter Amount $" 
       android:textStyle="bold" 
       android:textSize="12sp" 
       android:textColor="#000000" 
    android:paddingLeft="5px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
       /> 

    <EditText android:id="@+id/bounty" 
       android:numeric="decimal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textColor="#000000" 
    android:paddingLeft="10px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
       />   


    </LinearLayout> 


    <LinearLayout android:id="@+id/linearLayout4" 
     android:layout_below="@id/linearLayout3" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:orientation="horizontal" 
     android:layout_alignParentLeft="true" android:layout_alignParentRight="true"> 



    <TextView android:id="@+id/duedatelabel" 
       android:layout_width="120px" 
       android:layout_height="wrap_content" 
       android:text="Due Date" 
       android:textStyle="bold" 
       android:textSize="12sp" 
       android:textColor="#000000" 
    android:paddingLeft="10px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" /> 

    <Button android:id="@+id/pickDate" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textColor="#000000" 
    android:paddingLeft="10px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
     android:text="Select Due Date"/> 

    </LinearLayout> 

    <LinearLayout android:id="@+id/linearLayout5" 
     android:layout_below="@id/linearLayout4" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:orientation="horizontal" 
     android:layout_alignParentLeft="true" android:layout_alignParentRight="true"> 


    <TextView android:id="@+id/labelprimary" 
       android:layout_width="120px" 
       android:layout_height="wrap_content" 
       android:text="Category" 
       android:textStyle="bold" 
       android:textSize="12sp" 
       android:textColor="#000000" 
    android:paddingLeft="10px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
       /> 

    <Spinner 
     android:id="@+id/primarycategory" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:prompt="@string/planet_prompt" 
     android:textColor="#000000" 
     android:paddingLeft="15px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
    /> 
    </LinearLayout> 


    <LinearLayout android:id="@+id/linearLayout6" 
     android:layout_below="@id/linearLayout5" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:orientation="horizontal" 
     android:layout_alignParentLeft="true" android:layout_alignParentRight="true"> 

    <TextView android:id="@+id/labelsecondary" 
       android:layout_width="120px" 
       android:layout_height="wrap_content" 
       android:text="Sub Category" 
       android:textStyle="bold" 
       android:textSize="12sp" 
       android:textColor="#000000" 
    android:paddingLeft="10px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
       /> 

    <Spinner 
     android:id="@+id/secondarycategory" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:prompt="@string/secondary_category" 
     android:textColor="#000000" 
    android:paddingLeft="15px" 
    android:paddingRight="5px" 
    android:paddingTop="10px" 
    android:paddingBottom="10px" 
    />    
    </LinearLayout> 


    <LinearLayout android:id="@+id/linearLayout7" 
     android:layout_below="@id/linearLayout6" android:layout_width="wrap_content" 
     android:padding="10px" 
     android:layout_height="wrap_content" android:orientation="horizontal" 
     android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:paddingRight="10px" android:paddingLeft="10px"> 

    <Button android:id="@+id/button1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Add Attachment" 
    > 

    </Button> 

    </LinearLayout> 


    <LinearLayout android:id="@+id/linearLayout8" 
     android:layout_below="@id/linearLayout7" android:layout_width="wrap_content" 
     android:padding="10px" 
     android:layout_height="wrap_content" android:orientation="horizontal" 
     android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:paddingRight="10px" android:paddingLeft="10px"> 


    <Button android:id="@+id/askNow" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:text="Post Question" /> 

    </LinearLayout> 
    <LinearLayout android:id="@+id/linearLayout9" 
     android:layout_below="@id/linearLayout8" 
     android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:gravity="bottom" 
       android:orientation="vertical"> 


     <SlidingDrawer android:id="@+id/SlidingDrawer" android:handle="@+id/slideHandleButton" android:content="@+id/contentLayout" android:topOffset="50dip" android:layout_width="fill_parent" android:layout_height="fill_parent"> 
      <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/slideHandleButton" android:background="@drawable/closearrow"></Button> 
      <LinearLayout android:id="@+id/contentLayout" android:layout_width="match_parent" android:layout_height="match_parent" 
          android:orientation="vertical" android:gravity="center" 
          android:background="#FF444444"> 
      <Button android:id="@+id/asknew" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ask New Question"></Button> 
      <Button android:id="@+id/logout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Log Out"></Button> 
      </LinearLayout> 
     </SlidingDrawer> 
    </LinearLayout> 

    <android.view.SurfaceView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/preview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     > 
    </android.view.SurfaceView> 

</RelativeLayout> 
</ScrollView> 

Respuesta

6

Estaba teniendo el mismo problema, así que fui a buscar el código fuente. La respuesta básica es que algo llamado measure() en su SlidingDrawer usando MeasureSpec.UNSPECIFIED, es decir, SlidingDrawer puede establecer su propio tamaño.

Podría deberse a que el diseño que lo contiene (o sus padres) esté alineado en la base o tenga WRAP_CONTENT como su altura o ancho. Si el LinearLayout que contiene tiene baselineAligned establecido verdadero, le pide a todos sus hijos que busquen el tamaño más grande. Y, por supuesto, también pregunta a sus hijos por su tamaño si se supone que los envuelva.

Ajuste android:baselineAligned="false" en cualquier LinearLayout que contenga el cajón deslizante y asegúrese de que nada que contenga el SlidingDrawer tenga WRAP_CONTENT para alto o ancho. En otras palabras, SlidingDrawer debe tener un tamaño exacto definido, lo que significa que sus padres también deben usar FILL_PARENT.

+0

Haces que parezca que hay alguna forma de evitar el problema real. La alineación de bases no tiene nada que ver con nada, y tampoco lo hace con wrap_content. Tiene un cajón vertical en LinearLayout vertical, nunca habrá una forma "dinámica" de establecer su altura porque el diseño que está usando crecerá más por diseño.Necesita agregar la altura de los botones que tiene en el cajón a la que está usando para el mango y usar ese valor como el layout_height del cajón, el ancho puede permanecer dinámico. –

1

no estoy realmente seguro de por qué esto es la causa de su altura o valores de ancho a ser indeterminado, pero se puede decir que envolver su cajón deslizante en un LinearLayout es probablemente la causa del problema. Convertir este código en atributos de la SlidingDrawer y retire la LinearLayout:

android:layout_below="@id/linearLayout8" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="bottom" 

Esperamos que esto lo arregla para usted.

+0

@ caspNZ trabajo a fuerza alguna otra manera. – Max

+0

La opción anterior no funciona, ninguna otra solución. – Max

+1

Acabo de notar que tiene todo envuelto en una vista de desplazamiento. Probablemente deberías tener tu RelativeLayout como padre de la vista y la vista de desplazamiento que envuelve las cosas que necesitas desplazarte (todo lo que está sobre SlidingDrawer). Una forma de probar esto si nada de esto funciona es simplificar el diseño, así que todo lo que hay son un par de vistas y su vista de desplazamiento, entonces podrá reducir lo que está causando el error. Ah, por cierto, conserve mi solución original, esa es la forma en que debería hacerse. ¡Buena suerte! –

0

Me temo que el problema podría ser con ScrollView: parece que no se puede colocar un SlidingDrawer en un ScrollView. Consulte this thread para el mismo problema. La solución del tipo era tener ScrollView Wrap todo, EXCEPTO el SlidingDrawer. Luego puso ambas, la ScrollView y la SlidingDrawer en RelativeLayout, parece haber funcionado para él, debes darle una oportunidad (como lo haré yo).

[EDIT] le di un tiro y aquí es cómo funciona para mí:

 RelativeLayout mainContainer = new RelativeLayout(context); 
     mainContainer.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, 
       LayoutParams.FILL_PARENT)); 

     ScrollView scrollView = new ScrollView(context); 
     scrollView.setLayoutParams(new ScrollView.LayoutParams(LayoutParams.FILL_PARENT, 
       LayoutParams.FILL_PARENT)); 
     // Add furhter children to scrollview if you wish to 
     // Add the scrollview to the main container 
     mainContainer.addView(scrollView); 
     // Create your SlidingViewer, for instance be inflating it using the layout inflater 
     // Inflate from pre-written layout 
     // getSystemService is only available from an Activity 
     LayoutInflater inflater = (LayoutInflater)getSystemService(
       Context.LAYOUT_INFLATER_SERVICE); 
     // We dont have the parent view yet, will be added by the layouter 
     SlidingDrawer slidingDrawer = (SlidingDrawer) inflater.inflate(R.layout.sliding_drawer_layout, null); 

     // Add Sliding drawer at the bottom 
     mainContainer.addView(new SlidingDrawerWidget(context, new AttributeContainer()).getView()); 
+0

Bien, probé el enfoque anterior y funciona. Trataré de actualizar mi publicación en consecuencia para obtener más código. – AgentKnopf

2

Tiene que especificar una dimensión de atributo layout_height, como android:layout_height="100dp"

+0

tuve que especificar el layout_width también a un tamaño especificado –

Cuestiones relacionadas