您好我得到了运行时异常:
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>
答案 0 :(得分:7)
我遇到了同样的问题所以我开始挖掘源代码。基本答案是使用measure()
在SlidingDrawer上调用MeasureSpec.UNSPECIFIED
,即允许SlidingDrawer设置自己的大小。
可能是由于包含的布局(或其父级)是基础对齐的,或者是WRAP_CONTENT
的高度或宽度。如果包含LinearLayout的baselineAligned
设置为true,则会询问其所有子项的大小以找到最大的子项。当然,如果应该将它们包起来,它也会询问它们的尺寸。
在包含滑动抽屉的任何LinearLayout中设置android:baselineAligned="false"
,并确保包含SlidingDrawer的任何内容都没有高度或宽度的WRAP_CONTENT。换句话说,SlidingDrawer必须定义一个确切的大小,这意味着如果你使用FILL_PARENT
,它的父母也必须。{/ p>
答案 1 :(得分:4)
因为您的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)获得了线索
答案 2 :(得分:2)
您必须为layout_height属性指定维度,例如android:layout_height="100dp"
答案 3 :(得分:1)
我真的不确定为什么这会导致您的高度或宽度值未指定,但我可以告诉您,将滑动抽屉包裹在LinearLayout中可能会导致问题。将此代码转换为SlidingDrawer
上的属性,然后移除LinearLayout
:
android:layout_below="@id/linearLayout8"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom"
希望这可以帮到你。
答案 4 :(得分:0)
我担心问题可能出在ScrollView上:好像你不能在ScrollView中放置SlidingDrawer。查看this thread是否存在同一问题。该家伙的解决方案是让ScrollView Wrap除SlidingDrawer之外的一切。然后他将ScrollView和SlidingDrawer放入RelativeLayout - 似乎对他有效,你应该试一试(就像我一样)。
[编辑]我试了一下,以下是它对我有用的方法:
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());