对LinearLayout中Weight的深度分析

来源:互联网 发布:java 16进制中文 编辑:程序博客网 时间:2024/05/21 05:55

Weight的意义

LinearLayout中weight的意义是对控件宽度和高度进行按比例控制。然而,其中具体的实现逻辑却像一个黑盒子一样。

Weight的内部逻辑

以下便是对weight内部逻辑的实现过程进行深度分析:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal" >        <Button             android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="2"            android:text="Button1"/>        <Button             android:layout_width="match_parent"            android:layout_height="wrap_content"        android:layout_weight="1"            android:text="Button2"/></LinearLayout>

以上是一个LinearLayout,里面有两个Button控件。

weight在其中的意义是:
父控件的宽度为m,
内部控件1的设置宽度为a,内部控件2的设置宽度为b,以此类推……
weight的值为w1,w2,w3那么内控控件的实际宽度为A,B 以此类推……
公式定义

父控件的总剩余空间 r = m - a - b……;

A控件分权值 Aw = w1/ (w1+w2+w3);

A=Awr+a;

B=Bwr+b;


也就是说:
=+

根据以上公式可得如下结论:

  1. 当所有组件的宽度一样的时候,那么所有组件最终的显示宽度跟Aw,也就是自身的权重正相关,跟其自身的宽度设置无关。
  2. 当所有组件的宽度和大于父控件的时候,此时剩余控件则为负值。因此,此时的权重也就成负值,也就是负相关。
  3. 以上两个结论可以单独存在,也可以共同存在。

表解释:

1. 分权正相关:结果就是分权所分的空间2. 分权负相关:结果刚好与分权所分的空间相反,分权值越大,所分空间越小3. 分权弱相关:结果与分权值在表面上没有明显的体现,需要代入公式进行计算才能得出最后的结果。

宽度与Weight的关系:

宽度是否相同 剩余空间 结论 是 正 分权正相关 是 否 分权负相关 否 正 分权弱正相关 否 否 分权弱负相关

组件的宽度设置与Weight的关系:

组件1宽度设置 组件2宽度设置 结论 Match_Parent Match_Carent 分权负相关 Match_Parent Wrap_Content 分权弱负相关 Wrap_Content Wrap_Content 分权正相关 0 0 分权正相关
0 0