Android layout_width& layout_height,它是如何工作的?

时间:2012-01-02 08:10:54

标签: android android-layout height width slidedown

我正在尝试创建一个界面,其中两个或多个按钮将显示给用户,如果单击一个按钮,将向他显示一些布局。我为此目的使用 SlidingDrawer

好吧,我对 layout_width& layout_height属性

如果我设置如下属性,屏幕上只会显示“手柄1”。

android:layout_width="fill_parent" android:layout_height="wrap_content"

老实说,我对这两个属性都知之甚少。 有人可以分享他对他们的了解吗?

main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <SlidingDrawer android:id="@+id/slidingDrawer1"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:handle="@+id/handle1"
            android:content="@+id/content1">
                <Button android:text="Handle 1" android:layout_height="wrap_content"
                        android:layout_width="fill_parent" android:id="@+id/handle1"></Button>
                <LinearLayout android:id="@+id/content1"
                        android:layout_width="fill_parent" android:layout_height="wrap_content"
                        android:orientation="vertical" android:gravity="center"
                        android:background="#FF444444">
                        <Button android:text="Handle 1 Item 1" android:layout_height="wrap_content"
                                android:layout_width="wrap_content" android:id="@+id/item1"></Button>
                </LinearLayout>
    </SlidingDrawer>

    <SlidingDrawer android:id="@+id/slidingDrawer2"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:handle="@+id/handle2"
            android:content="@+id/content2">
                <Button android:text="Handle 2" android:layout_height="wrap_content"
                        android:layout_width="fill_parent" android:id="@+id/handle2"></Button>
                <LinearLayout android:id="@+id/content2"
                        android:layout_width="fill_parent" android:layout_height="wrap_content"
                        android:orientation="vertical" android:gravity="center"
                        android:background="#FF444444">
                        <Button android:text="Handle 2 Item 1" android:layout_height="wrap_content"
                                android:layout_width="wrap_content" android:id="@+id/item2"></Button>
                </LinearLayout>
    </SlidingDrawer>     
</LinearLayout>

3 个答案:

答案 0 :(得分:6)

视图的layout_widthlayout_height属性旨在由其父容器使用。有些容器会忽略其中一个或两个;最尊敬他们。您需要查阅容器的文档(在您的情况下,SlidingDrawer)以了解如何使用这些值。

您没有显示完整的main.xml,因此很难确切地说出错了什么。如果您发布了错误的图像,这也会有所帮助。

修改

看到完整的布局后,我认为这里的基本问题是你使用的是LinearLayout来包含SlidingDrawers。作为docs for SlidingDrawer注释,它们需要位于FrameLayout或RelativeLayout中(实际上,任何允许多个视图相互叠加的容器)。

另一种可能性是第二个SlidingDrawer直接放在第一个下面。尝试更改第二个按钮的大小(例如,使文本更长),看看它是否在按钮1的两侧戳出。

答案 1 :(得分:4)

fill_parent = match_parent,这意味着它采用“父”容器的宽度或高度(指定的属性)

wrap_content意味着高度或宽度取决于“child”的高度或宽度

您希望使用权重而不是通常使用match_parent或wrap_content。

使用权重时,要将宽度设置为0dp。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

    <LinearLayout
    android:id="@+id/lowerLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1.0" >
            <LinearLayout
            android:id="@+id/headerLayout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_weight=".7" >
                <Button
                    android:id="@+id/previousMonthButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Previous" />

                <TextView
                    android:id="@+id/monthName"
                    android:layout_width="0dip"
                    android:layout_height="wrap_content"
                    android:text="Large Text"
                    android:layout_weight="1"
                    android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_horizontal" />

                <Button
                    android:id="@+id/nextMonthButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Next" />

            </LinearLayout>

            <LinearLayout
            android:id="@+id/lowerLayout3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_weight=".3" >

                <Button
                    android:id="@+id/addEvent"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />

            </LinearLayout>

    </LinearLayout>
    <LinearLayout
    android:id="@+id/lowerLayout2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1.0" >

        <LinearLayout
            android:id="@+id/monthView"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight=".7" >

        </LinearLayout>

        <ListView
            android:id="@+id/listView1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight=".3" >
        </ListView>
    </LinearLayout>

</LinearLayout>

答案 2 :(得分:0)

我认为你试图添加2个Sliding Drawer。

SlidingDrawer的大小定义了内容在滑出后占用的空间大小,因此SlidingDrawer通常应该对其两个维度使用match_parent,在这种情况下,一个与其他一个重叠,因此您无法看到处理程序2.

如果你设定可见度&#34;去了&#34;第一个SlidingDrawer你可以看到另一个。

<强>更新

嗨,

请尝试使用此代码可能会对您有所帮助

<?xml version="1.0" encoding="utf-8"?>

<SlidingDrawer
    android:id="@+id/slidingDrawer1"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:content="@+id/content1"
    android:handle="@+id/handle1" >

    <Button
        android:id="@+id/handle1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Handle 1" >
    </Button>

    <LinearLayout
        android:id="@+id/content1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#FF444444"
        android:gravity="center"
        android:orientation="vertical" >

        <Button
            android:id="@+id/item1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Handle 1 Item 1" >
        </Button>
    </LinearLayout>
</SlidingDrawer>