我希望在另一个全屏相对布局中有一个相对布局,占据其父宽度的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和加权来勾画中心方块,然后将中心方块设为fill_parent
,如下所示:
但那么我应该怎样处理其他3个方块(布局)?我可以为另一个方块设置另一个LinearLayout“层”吗?或者我应该将整个屏幕分成许多很小的小区,并将这些子布局划分到多个小区(不确定这是否可能)?
答案 0 :(得分: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>
答案 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个大的垂直布局,里面有两个水平布局,里面有多个对象。从那里你可以分解为更容易管理如何安排和布局内项目的部分。现在使用相对布局,您可以相对于另一个对象定位项目,您可以删除线性布局处理的一些工作,但是您将定义它们相对于其他对象的距离,并且可能必须摆弄以使布局正确调整在不同的屏幕尺寸上(不使用静态定位的原因)。
答案 3 :(得分:1)
也许尝试使用内置3个布局的LinearLayout
,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>
答案 4 :(得分:0)
RelativeLayout
不支持儿童的宽度和高度百分比。将LinearLayout
与android:layout_weight
属性一起使用。