如何制作几个RelativeLayouts,每个都占据屏幕的一部分?

时间:2012-11-15 03:35:33

标签: android android-layout

我希望在另一个全屏相对布局中有一个相对布局,占据其父宽度的50%,最好是用XML而不是java代码完成。

我已经弄清楚如何对齐父母的中心,以及如何填充宽度,但有没有办法获得父母身高的50%? 30%左右? 6.2834%?

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

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="??????????"
        android:layout_centerInParent="true" >

我尝试做百分比的原因是,如果我用“dip”指定它,而对象将保持相同的大小,布局在不同的屏幕尺寸上看起来会有很大差异(例如手机和片剂)。

修改

感谢您使用LinearLayout和加权的所有答案。我之前也看过那个。我觉得我可能过度简化了这个问题。说我需要这样的东西:

enter image description here

我想我可以使用复杂的LinearLayout和加权来勾画中心方块,然后将中心方块设为fill_parent,如下所示:

enter image description here

但那么我应该怎样处理其他3个方块(布局)?我可以为另一个方块设置另一个LinearLayout“层”吗?或者我应该将整个屏幕分成许多很小的小区,并将这些子布局划分到多个小区(不确定这是否可能)?

5 个答案:

答案 0 :(得分:6)

尝试将LinearLayoutweightSum

一起使用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="2"
    android:gravity="center_vertical"
    android:orientation="vertical" >

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#FF0000">

    </RelativeLayout>

</LinearLayout>

答案 1 :(得分:3)

如果你不是绝对需要它嵌套在一个RelativeLayout中,你可以在LinearLayout中使用权重,正如其他人指出的那样。我刚刚添加了一个额外的RelativeLayout上面和下面,所以如果你想尝试,你可以使用屏幕的其余部分。如果没有,只需删除其他RelativeLayouts。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ParentLinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="10" >

<RelativeLayout
    android:id="@+id/RelativeLayoutTop"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="2.5"
    android:background="@color/torange" >
</RelativeLayout>

<RelativeLayout
    android:id="@+id/RelativeLayoutMid"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="5"
    android:background="@color/tpurple"
    android:padding="8dp" >

    <TextView
        android:id="@+id/description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/describe"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

<RelativeLayout
    android:id="@+id/RelativeLayoutBottom"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="2.5"
    android:background="@color/torange" >
</RelativeLayout>

答案 2 :(得分:2)

我通常会使用LinearLayout并将权重设置为某个百分比:

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

    <View
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="25"/>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="50">
     </RelativeLayout>

     <View
         android:layout_width="fill_parent"
         android:layout_height="0dp"
         android:layout_weight="25"/>

</LinearLayout>

进行编辑:

在某些时候,您需要确定布局。首先采用分组布局。寻找模式。在您的简单解释中,我们设计了一种方法,使用linearlayout将3个对象分组,其中一个在中间。使用新布局,您可以以任何方式对这些项目进行分组吗?

设置简单的布局模式后,可以通过定义权重来添加您要查找的特定间距。然后,您可能希望添加相对布局并开始将视图锚定到特定视图。问问自己,他们重叠吗?一个视图总是位于其他视图的顶部或侧面。什么定义了视图的边界,然后使用线性布局,权重,相对布局,toLeftOf,toRightOf,bellow,above,margin和padding从那里获取视图。

以下是对类似对象进行分组的含义示例。它绝不是最好的解决方案,但这取决于您如何定义定位参数。

黄色=垂直线性布局

绿色=水平线性布局

你有1个大的垂直布局,里面有两个水平布局,里面有多个对象。从那里你可以分解为更容易管理如何安排和布局内项目的部分。现在使用相对布局,您可以相对于另一个对象定位项目,您可以删除线性布局处理的一些工作,但是您将定义它们相对于其他对象的距离,并且可能必须摆弄以使布局正确调整在不同的屏幕尺寸上(不使用静态定位的原因)。

layouts

答案 3 :(得分:1)

也许尝试使用内置3个布局的LinearLayoutandroid:layout_weight设置为1,2,1。

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

    <RelativeLayout
        android:background="#FF0000"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dip" >
    </RelativeLayout>

    <RelativeLayout
        android:background="#00FF00"
        android:layout_weight="2"
        android:layout_width="match_parent"
        android:layout_height="0dip" >
    </RelativeLayout>

    <RelativeLayout
        android:background="#FF0000"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dip" >
    </RelativeLayout>

</LinearLayout>

答案 4 :(得分:0)

RelativeLayout不支持儿童的宽度和高度百分比。将LinearLayoutandroid:layout_weight属性一起使用。