【问题标题】:Android layout_width & layout_height, how it works?Android layout_width & layout_height,它是如何工作的?
【发布时间】:2012-01-31 16:35:12
【问题描述】:

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

好吧,我对 layout_width 和 layout_height 属性感到困惑

如果我像下面这样设置属性,屏幕上只会显示“Handle 1”。

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

老实说,我对这两个属性都没有足够的了解。 有人可以分享他对他们的了解吗?

ma​​in.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>

【问题讨论】:

  • 你检查过the documentation吗?很清楚恕我直言。
  • 好问题。几个月前,当我第一次开始时,我对此感到困惑。给它几天,你就会掌握它的窍门。

标签: android android-layout height width slidedown


【解决方案1】:

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

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

编辑

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

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

【讨论】:

  • 我已经提供了完整的main.xml,请看我的问题。
【解决方案2】:

我认为您尝试添加 2 个滑动抽屉。

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

如果您将第一个 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>

【讨论】:

  • 是的,我想添加多个滑动抽屉,我的问题很清楚。如果我将可见性设置为消失,那么第一个滑动抽屉将变得不可见。
【解决方案3】:

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

wrap_content 表示高度或宽度取“子”的高度或宽度

您希望使用权重,而不是通常使用 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>

【讨论】:

  • 我知道这一点,但是看看我提供的 xml,为什么它只显示“Handle 1”,如果应用上述规则,它应该同时显示“Handle 1”和“Handle 2”。
  • 您正在填充父级两次。尝试使用权重而不是将布局宽度设置为 fill_parent。还要记住,不推荐使用 fill_parent;改用 match_parent。我已经编辑了我的答案,所以我可以给你看一个例子。
猜你喜欢
  • 2015-04-07
  • 2016-05-19
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2011-02-17
相关资源
最近更新 更多