android:layout_weight

本文详细解析了Android布局中layout_weight参数的功能,并提供了实例演示其使用方法及常见错误避免技巧。

这个参数很有意思,网上有些中文资料写的完全不正确,可偏偏很多地方还在转载。

其实这个参数就是个比重大小调整的参数,数值越大,比重越大。(不像网上疯传的那个文章里写的数值越大,比重越小)。


但是当你在调整参数的时候注意,要把view的height或者width设置为0px,否则比重(layout_weight)不起作用,或者有些意想不到的结果。


下面是个例子。


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

	<LinearLayout android:orientation="horizontal"
		android:layout_width="fill_parent" android:layout_height="0px"
		android:layout_weight="2">
		<TextView android:text="red" android:gravity="center_horizontal"
			android:background="#aa0000" android:layout_width="0px"
			android:layout_height="fill_parent" android:layout_weight="3" />
		<TextView android:text="green" android:gravity="center_horizontal"
			android:background="#00aa00" android:layout_width="0px"
			android:layout_height="fill_parent" android:layout_weight="1" />
		<TextView android:text="blue" android:gravity="center_horizontal"
			android:background="#0000aa" android:layout_width="0px"
			android:layout_height="fill_parent" android:layout_weight="1" />
		<TextView android:text="yellow" android:gravity="center_horizontal"
			android:background="#aaaa00" android:layout_width="0px"
			android:layout_height="fill_parent" android:layout_weight="1" />
	</LinearLayout>

	<LinearLayout android:orientation="vertical"
		android:layout_width="fill_parent" android:layout_height="0px"
		android:layout_weight="1">
		<TextView android:text="row one" android:textSize="15pt"
			android:layout_width="fill_parent" android:layout_height="0px"
			android:layout_weight="3" />
		<TextView android:text="row two" android:textSize="15pt"
			android:layout_width="fill_parent" android:layout_height="0px"
			android:layout_weight="1" />
		<TextView android:text="row three" android:textSize="15pt"
			android:layout_width="fill_parent" android:layout_height="0px"
			android:layout_weight="1" />
		<TextView android:text="row four" android:textSize="15pt"
			android:layout_width="fill_parent" android:layout_height="0px"
			android:layout_weight="1" />
	</LinearLayout>

</LinearLayout>

效果图


<think>我们正在讨论的是Android中的`layout_weight`属性,用户询问的是该属性的初始值。根据引用资料,我们可以找到相关信息。 引用[2]和引用[4]提到:`android:layout_weight`的默认值为0。引用[4]明确指出:“android:layout_weight的表面含义是:分配的比重值,默认值为0”。 因此,我们可以明确地回答:`layout_weight`属性的初始值(默认值)是0。 当没有显式设置`layout_weight`属性时,其值就是0。这意味着该控件不会分配剩余空间,只使用其声明的尺寸(如`layout_width`或`layout_height`)。 另外,引用[3]和引用[4]解释了`layout_weight`的工作原理:设置了该属性的控件,其最终尺寸等于原有尺寸加上剩余空间的占比。而当`layout_weight`为0时(即默认情况),控件不会分配剩余空间,因此最终尺寸就是原有尺寸。 下面我们用公式来进一步说明(以水平方向为例): 假设有一个水平方向的LinearLayout,内部有两个子控件。两个子控件的宽度都设为0dp(这样原有宽度为0),然后分别设置权重为1和2。 那么,根据引用[3]和引用[4]的公式: 剩余空间 = LinearLayout的宽度 - 所有子控件的初始宽度之和(这里为0+0=0,所以剩余空间就是整个LinearLayout的宽度) 第一个控件的宽度 = 0 + (剩余空间 * 1/(1+2)) = 剩余空间的1/3 第二个控件的宽度 = 0 + (剩余空间 * 2/(1+2)) = 剩余空间的2/3 但是,如果其中一个控件没有设置权重(即默认0),则它不会参与剩余空间的分配。例如,第一个控件权重为0,第二个控件权重为1: 第一个控件的宽度 = 0 (因为权重0,不分配剩余空间,但注意:如果它的宽度设为wrap_content或固定值,则按照原有宽度计算,这里我们设为0dp,所以为0) 第二个控件的宽度 = 0 + (剩余空间 * 1/(0+1)) = 剩余空间(即整个LinearLayout的宽度减去第一个控件占用的0,所以整个空间都给了第二个控件) 然而,实际中我们通常不会把宽度设为0dp,而是可能设为固定值或wrap_content。这时,剩余空间的计算就要减去这些固定值或内容宽度。 总结:`layout_weight`的初始值(默认值)是0。 因此,我们可以这样回答用户: 在Android布局中,`layout_weight`属性的初始值(默认值)为0。当未显式设置该属性时,其值即为0,表示该控件不会按比例分配父布局中的剩余空间,而只使用其声明的尺寸(如`android:layout_width`或`android:layout_height`)[^2][^4]。 同时,我们可以生成相关问题: §§相关问题§§ 1. `layout_weight`属性在LinearLayout中如何计算控件尺寸? 2. 如何动态改变一个控件的`layout_weight`值? 3. 在LinearLayout中,如果多个子控件的`layout_weight`之和为0,会有什么效果? 4. 为什么有时设置`layout_weight`后控件的尺寸与预期不符? </think>在 Android 布局中,`layout_weight` 属性的**初始值(默认值)为 0**。这是由 Android 框架定义的标准行为,也是所有引用资料中明确指出的特性[^2][^4]。 ### 关键说明: 1. **默认行为** 当未显式设置 `layout_weight` 属性时,系统自动采用默认值 `0`: ```xml <!-- 未设置 layout_weight 等同于 weight=0 --> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" /> ``` 2. **权重为 0 的含义** 权重值为 `0` 表示: - 控件**不参与剩余空间分配** - 控件尺寸完全由 `layout_width`/`layout_height` 决定 - 在 `LinearLayout` 中与其他控件的权重计算无关[^2][^4] 3. **与其他权重的交互** 当存在多个控件时: ```xml <LinearLayout> <!-- 权重默认0,不分配剩余空间 --> <Button android:layout_width="0dp" android:layout_height="wrap_content"/> <!-- 显式设置权重,参与分配 --> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <!-- 占据所有剩余空间 --> </LinearLayout> ``` ### 验证方法: 1. **动态代码验证** 通过代码获取默认值: ```java LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)button.getLayoutParams(); float defaultWeight = params.weight; // 返回 0.0f ``` 2. **XML 行为验证** 未设置权重的控件在存在剩余空间时不会自动扩展,符合权重为 0 的特性[^3][^4]。 > **设计原理**:默认值设为 `0` 可确保向后兼容性,避免历史版本中未使用权重的布局在升级后出现意外行为[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值