android:Layout_weight正确的理解

本文纠正了关于Android布局权重(android:Layout_weight)的常见误解,详细解释了其真实作用及计算方法,通过实例展示了权重与屏幕占比之间的正确关系。包括不同宽度设置下(如0dp、fill_parent、match_parent、wrap_content)的计算公式和实例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言


原创文章,欢迎转载,请保留出处。
有任何错误、疑问或者建议,欢迎指出。
我的邮箱:Maxwell_nc@163.com

今天在看书的时候无意发现书上写着”android:Layout_weight是控件占据屏幕的重要度,值越小重要度越高”,当时一看顿时觉得不对劲,android:Layout_weight应该是控件的占据屏幕的权重啊,应该值越大占据比例越大才对啊,经过查阅资料后才写blog来记录总结和分享。

错误的理解


  • android:Layout_weight值越大,权重越大,占据比例越大
  • android:Layout_weight值越小,权重越大,占据比例越大
  • android:Layout_weight
    • 一般值越大,权重越大,占据比例越大
    • 当width或者height为fill_parent或者match_parent则值越小,权重越大

这些都是错误的理解,比如第一种错误的理解就是因为平时写android:Layout_weight时都会把width或者height设置为0dip,而第二种则是把width或者height设置为fill_parent或者match_parent,第三种则是没有深入研究妄下结论。

正确的理解


正确的理解是

android:Layout_weight是控件占据屏幕的权重,可以通过公式计算出正确的占据屏幕比例

以width来举例公式是:

实际width = 控件的width + 剩余的width  * (控件的权重/总权重)
  • 情况一 (width为0dp时):
    这时候假设有两个控件,第一个权重为1,第二个权重为2,则总权重为3,代入公式,
    第一个实际width = 0 + 屏幕宽 * (1/3)= 1/3屏幕宽
    第二个实际width = 0 + 屏幕宽 * (2/3)= 2/3屏幕宽

  • 情况二 (width为fill_parent或者match_parent时):
    这时候假设有两个控件,第一个权重为1,第二个权重为2,则总权重为3,代入公式,
    第一个实际width = 屏幕宽 + (-1*屏幕宽) * (1/3)= 2/3屏幕宽
    第二个实际width = 屏幕宽 + (-1*屏幕宽) * (2/3)= 1/3屏幕宽

 注:剩余的width = 屏幕宽 - 第一个控件width - 第二个控件width =(-1*屏幕宽) 

这样就出现了,权重越大,反而占用的比例越少的情况。

  • 情况三 (width为wrap_content或者自定值时):
    可以根据公式具体代入。

总结


实际上谷歌给我们定义android:Layout_weight时就希望我们可以快速地按比例划分布局,所以建议使用android:Layout_weight时候把width和height设置为0dp(当0dp时则是权重越大比例越大),方便计算。

参考文章

http://mobile.51cto.com/abased-375428.htm

【文件2-7】 activity_main.xml 1 <TableLayout xmlns:android-"http://schemas.android.com/apk/res/android" 2 3 android:layout width="match parent" 4 android:layout height="match parent" 5 android:stretchColumns="*"> 6 <TableRow 7 android:id="@+id/tr_one" 8 style="@style/rowstyle" 9 android:layout_marginTop-"200dp"> 10 <Button 11 style="@style/btnstyle" 12 android:text-"c"/> 13 <Button 14 style="@style/btnstyle" 15 android:text="-"/> 16 <Button 17 style="@style/btnstyle" 18 android:text="+"/> 19 <Button 20 style="@style/btnstyle" 21 android:text-"-"/> 22 </TableRow> 23 <TableRow android:id="@+id/tr_two" 24 25 style="@style/rowstyle"> 26 <Button 27 style="@style/btnstyle" 28 android:text="7"/> <Button style="@style/btnstyle" 31 android:text-"8"/> 32 <Button 33 style="@style/btnstyle" android:text-"9"/> 34 35 <Button 36 style="@style/btnstyle" 37 android:text="x"/> 38 </TableRow> 39 <TableRow 40 android:id="@+id/tr_three" 41 style="@style/rowStyle"> 42 <Button 43 style="@style/btnstyle" 44 android:text-"6"/> 45 <Button 46 style="@style/btnstyle" 47 android:text-"5"/> 48 <Button 49 style="@style/btnstyle" 50 android:text-"4"/> 51 <Button 52 style="@style/btnstyle" 53 android:text="/"/> 54 </TableRow> 55 <TableRow 56 android:id="@+id/tr_four" 57 style="@style/rowStyle"> 58 <Button style="@style/btnstyle" android:text-"1"/> 61 <Button 62 style="@style/btnstyle" 63 android:text="2"/> 64 <Button 65 style="@style/btnstyle" 66 android:text-"3"/> 67 <Button 68 style="@style/btnstyle" 69 android:text-"."/> 70 </TableRow> 71 <TableRow 72 android:id-"@+id/tr_five" 73 style="@style/rowstyle"> 74 <Button 75 style="@style/btnstyle" 76 android:layout_span="2" 77 android:text="0"/> 78 <Button 79 style="@style/btnstyle" 80 android:layout _span-"2" 81 android:text-"-"/> </TableRow> 82</TableLayout>写个类似的计算机代码
最新发布
03-17
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值