Android layout_width & layout_height,它是如何工作的?
Posted
技术标签:
【中文标题】Android layout_width & layout_height,它是如何工作的?【英文标题】:Android layout_width & layout_height, how it works? 【发布时间】:2012-01-31 16:35:12 【问题描述】:我正在尝试创建一个界面,其中将向用户显示两个或多个按钮,如果单击一个按钮,则会向他显示一些布局。为此,我正在使用 SlidingDrawer。
好吧,我对 layout_width 和 layout_height 属性感到困惑。
如果我像下面这样设置属性,屏幕上只会显示“Handle 1”。
android:layout_ android:layout_
老实说,我对这两个属性都没有足够的了解。 有人可以分享他对他们的了解吗?
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_
android:layout_>
<SlidingDrawer android:id="@+id/slidingDrawer1"
android:layout_ android:layout_
android:handle="@+id/handle1"
android:content="@+id/content1">
<Button android:text="Handle 1" android:layout_
android:layout_ android:id="@+id/handle1"></Button>
<LinearLayout android:id="@+id/content1"
android:layout_ android:layout_
android:orientation="vertical" android:gravity="center"
android:background="#FF444444">
<Button android:text="Handle 1 Item 1" android:layout_
android:layout_ android:id="@+id/item1"></Button>
</LinearLayout>
</SlidingDrawer>
<SlidingDrawer android:id="@+id/slidingDrawer2"
android:layout_ android:layout_
android:handle="@+id/handle2"
android:content="@+id/content2">
<Button android:text="Handle 2" android:layout_
android:layout_ android:id="@+id/handle2"></Button>
<LinearLayout android:id="@+id/content2"
android:layout_ android:layout_
android:orientation="vertical" android:gravity="center"
android:background="#FF444444">
<Button android:text="Handle 2 Item 1" android:layout_
android:layout_ android:id="@+id/item2"></Button>
</LinearLayout>
</SlidingDrawer>
</LinearLayout>
【问题讨论】:
你检查过the documentation吗?很清楚恕我直言。 好问题。几个月前,当我第一次开始时,我对此感到困惑。给它几天,你就会掌握它的窍门。 【参考方案1】:视图的layout_width
和layout_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_
android:layout_
android:layout_weight="1"
android:content="@+id/content1"
android:handle="@+id/handle1" >
<Button
android:id="@+id/handle1"
android:layout_
android:layout_
android:text="Handle 1" >
</Button>
<LinearLayout
android:id="@+id/content1"
android:layout_
android:layout_
android:background="#FF444444"
android:gravity="center"
android:orientation="vertical" >
<Button
android:id="@+id/item1"
android:layout_
android:layout_
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_
android:layout_
android:orientation="vertical" >
<LinearLayout
android:id="@+id/lowerLayout"
android:layout_
android:layout_
android:orientation="horizontal"
android:weightSum="1.0" >
<LinearLayout
android:id="@+id/headerLayout"
android:layout_
android:layout_
android:orientation="horizontal"
android:layout_weight=".7" >
<Button
android:id="@+id/previousMonthButton"
android:layout_
android:layout_
android:text="Previous" />
<TextView
android:id="@+id/monthName"
android:layout_
android:layout_
android:text="Large Text"
android:layout_weight="1"
android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_horizontal" />
<Button
android:id="@+id/nextMonthButton"
android:layout_
android:layout_
android:text="Next" />
</LinearLayout>
<LinearLayout
android:id="@+id/lowerLayout3"
android:layout_
android:layout_
android:orientation="horizontal"
android:layout_weight=".3" >
<Button
android:id="@+id/addEvent"
android:layout_
android:layout_ />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/lowerLayout2"
android:layout_
android:layout_
android:orientation="horizontal"
android:weightSum="1.0" >
<LinearLayout
android:id="@+id/monthView"
android:layout_
android:layout_
android:orientation="vertical"
android:layout_weight=".7" >
</LinearLayout>
<ListView
android:id="@+id/listView1"
android:layout_
android:layout_
android:layout_weight=".3" >
</ListView>
</LinearLayout>
</LinearLayout>
【讨论】:
我知道这一点,但是看看我提供的 xml,为什么它只显示“Handle 1”,如果应用上述规则,它应该同时显示“Handle 1”和“Handle 2”。 您正在填充父级两次。尝试使用权重而不是将布局宽度设置为 fill_parent。还要记住,不推荐使用 fill_parent;改用 match_parent。我已经编辑了我的答案,所以我可以给你看一个例子。以上是关于Android layout_width & layout_height,它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章
Android之ListView&ViewPager模拟新闻界面
Android-高级控件-下拉列表(Spinner)&列表视图(ListView)
Android 自定义组件:未找到 layout_width 属性
UI控件之RadioButton(单选按钮)&Checkbox(复选按钮)