SlidingDrawer не может иметь НЕОБХОДИМЫЕ измерения

Привет, я получаю исключение времени выполнения:

SlidingDrawer cannot have UNSPECIFIED dimensions 

Из приведенного ниже XML можно ли помочь в этом.

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

У меня была такая же проблема, поэтому я начал копаться в исходном коде. Основной ответ заключается в том, что что-то называемое measure() на вашем SlidingDrawer, используя MeasureSpec.UNSPECIFIED , то есть SlidingDrawer разрешено устанавливать свой собственный размер.

Это может быть вызвано тем, что содержащий макет (или его родители) выравнивается по основанию или имеет WRAP_CONTENT как его высоту или ширину. Если содержащая LinearLayout имеет baselineAligned set true, она запрашивает у всех своих детей их размер, чтобы найти самый большой. И, конечно же, он также просит своих детей по своему размеру, если он должен их обернуть.

Установите android:baselineAligned="false" в любом LinearLayout, который содержит скользящий ящик, и убедитесь, что ничто, содержащее SlidingDrawer, не имеет WRAP_CONTENT для высоты или ширины. Другими словами, SlidingDrawer должен иметь точный размер, который означает, что его родители также должны использовать FILL_PARENT .

Поскольку ваш SlidingDrawer находится в ScrollView. Я предполагаю, что ScrollView не может обеспечить высоту, но SlidingDrawer наследует высоту от ScrollView и вызывает исключение. (Я получаю ключ от http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/SlidingDrawer.java )

Вы должны указать измерение для атрибута layout_height, например, android:layout_height="100dp"

Я действительно не уверен, почему это приводит к тому, что ваши значения высоты или ширины не определены, но могу сказать, что упаковка вашего скользящего ящика в LinearLayout, вероятно, вызывает проблему. Включите этот код в атрибуты на SlidingDrawer и удалите LinearLayout :

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

Надеюсь, это поможет вам.

Я боюсь, что проблема может быть в ScrollView: похоже, вы не можете разместить SlidingDrawer в ScrollView. Просмотрите эту тему для той же проблемы. Решение парня состояло в том, чтобы ScrollView Wrap все ЗА ИСКЛЮЧЕНИЕМ SlidingDrawer. Затем он поставил оба: ScrollView и SlidingDrawer в RelativeLayout – похоже, сработал для него, вы должны дать ему шанс (как и я).

[EDIT] Я дал ему шанс, и вот как это работает для меня:

  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());