1

我想在另一个全屏相对布局内有一个相对布局,占据全宽但占其父级高度的 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 和权重的所有答案。我以前也看过。我觉得我可能过度简化了这个问题。说我需要这样的东西:

在此处输入图像描述

我想我可以使用复杂的 LinearLayout 和 weighting 来勾勒中心正方形,然后将中心正方形设置为fill_parent,如下所示:

在此处输入图像描述

但是那我应该如何处理其他 3 个方格(布局)?我可以为另一个正方形设置另一个“层”LinearLayout 吗?或者我应该把整个屏幕分成很多很多的小单元,让这些子布局跨越多个单元(不确定这是否可能)?

4

5 回答 5

6

尝试LinearLayout使用weightSum

<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>
于 2012-11-15T03:48:19.483 回答
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>

于 2012-11-15T04:11:34.467 回答
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>

对您的编辑:

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

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

这是我将类似对象分组的意思的示例。这绝不是最好的解决方案,但这一切都取决于您如何定义定位参数。

黄色 = 垂直线性布局

绿色 = 水平线性布局

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

布局

于 2012-11-15T03:49:51.977 回答
1

也许尝试LinearLayout在内部使用 3 个布局,并将其android: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>
于 2012-11-15T03:46:12.853 回答
0

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

于 2012-11-15T03:47:17.527 回答