我正在了解LinearLayout
和RelativeLayout
之间的区别,并且对解决我的具体问题的最佳方法感到困惑。我想让4个按钮填满一个屏幕,每个按钮都有不同的动作。在遇到RelativeLayout
问题后,建议我通过this SO帖子切换到LinearLayout
。使用嵌套的LinearLayout
和android:weight
值,我得到了一个可以正常工作的解决方案。但是,现在我收到警告:“嵌套权重对性能不利。”我非常谨慎地查看了SO并找到this文章,告诉我切换回RelativeLayout
。
什么是正确的答案?有没有一种方法让对象在RelativeLayout
中填充这样的区域?
这是我目前的代码。请原谅额外的东西,不知道要留下什么以及要取出什么。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/motherStack"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:id="@+id/rowOne"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1">
<Button
android:id="@+id/redButton"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/red_button_text"
android:textColor="@color/RED" />
<Button
android:id="@+id/blueButton"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/blue_button_text"
android:textColor="@color/BLUE" />
</LinearLayout>
<LinearLayout
android:id="@+id/rowTwo"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1">
<Button
android:id="@+id/greenButton"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/green_button_text"
android:textColor="@color/GREEN" />
<Button
android:id="@+id/yellowButton"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/yellow_button_text"
android:textColor="@color/YELLOW" />
</LinearLayout>
我会发布一张图片,但我刚加入并没有声誉。 :(
答案 0 :(得分:1)
将根元素android:orientation
保持为vertical
,然后保持horizontal
。
试试这个:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/motherStack"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:id="@+id/rowOne"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_weight="1">
<Button
android:id="@+id/redButton"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"/>
<Button
android:id="@+id/blueButton"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:id="@+id/rowTwo"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_weight="1">
<Button
android:id="@+id/Button3"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"/>
<Button
android:id="@+id/Button4"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
希望这有帮助。
答案 1 :(得分:0)
为此你可以使用TableLayout作为根元素(删除所有嵌套的LinearLayouts)。
这将提供您尝试使用这些布局模仿的效果,每个布局包含两个元素,每个元素的权重为1.
答案 2 :(得分:0)
如果使用表格布局而不是线性布局
会更好<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" >
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="Button" />
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="Button" />
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" >
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="Button" />
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="Button" />
</TableRow>