我应该使用LinearLayout还是RelativeLayout让4个对象填满屏幕?

时间:2014-03-26 04:09:40

标签: android xml layout

我正在了解LinearLayoutRelativeLayout之间的区别,并且对解决我的具体问题的最佳方法感到困惑。我想让4个按钮填满一个屏幕,每个按钮都有不同的动作。在遇到RelativeLayout问题后,建议我通过this SO帖子切换到LinearLayout。使用嵌套的LinearLayoutandroid: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>

我会发布一张图片,但我刚加入并没有声誉。 :(

3 个答案:

答案 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>