Android中你也许不知道的线性布局Layout_weight属性权重比例分配原理

       也许你正在使用这个属性Layout_weight权重,没错就是它,很多人问这有什么可讲的,不就是按照那样用吗?其实任何一东西的存在都有其原因。仔细研究你会有不同的感受,当然,肯定也会有很多大神知道,小菜鸟就班门弄斧了,但是对于Android初学者来说,你不妨看看,废话不多说,直接上...

      权重Layout_weight是Android中线性布局特有的属性,有时候我们为了让排在一行的控件平均或者按照一定比例的屏幕宽度摆放在屏幕上,但是你知道它是怎么分配宽度的吗?可能你的权重一直都是1,一直都是相同比例,你可能理所应当认为这就是按照屏幕宽度比例分配,或者你一直都是以width为0dp和按照权重比例使用,你知道为什么要这样使用吗?

就一句话:在Android中,权重是表示按比例分配剩余的占有屏幕的宽度或者高度,很多人会问什么叫屏幕的剩余宽度呢??

屏幕的剩余宽度就是当系统给每个控件分配完初始化宽度(也即是我们在布局文件中写Layout_Width或者Layout_height的值)后屏幕剩余的宽度。

权重分配屏幕宽度或高度原理:因为系统是这样分配屏幕空间的,首先给按照每个控件初始化的宽度,分配屏幕宽度,等每个控件的宽度都分配完后,此时屏幕的剩余宽度再按权重的比例分配。

好明白这几个概念后,接着来做一道小学生的数学题,你就明白其中的道理:

例如:有三个TextView,比如初始化的宽度都是10dp;,然后他们的权重比例是1:1:2;(很多人会认为前面两个TextView宽度之和等于第三个的宽度之和,很容理解1:1嘛,但是事实是这样的吗)假设屏幕宽度是70dp;
系统首先会给初始化的宽度分配宽度(每个10dp,占用了30dp,还剩下40dp),,然后这剩下的40dp按照1:2比例分配宽度,第一个TextView再分得10dp,第二个TextView再分得10dp,第三个分得20dp,最终第一个TextView宽度为:20dp,第二个为20dp,第三个为30dp;

原理图如下:

Android中你也许不知道的线性布局Layout_weight属性权重比例分配原理_第1张图片


最终结果表明:(20+20):30=4:3而不是1:1所以最终会发现第三个TextView宽度会稍微比前两个之和短一点
最终建议:在使用权重的时候,特别是在权重比例不一致的时候,建议把控件的初始化宽度设为0dp,因为在系统分配宽度时,给每个控件分配初始化宽度都为0dp,最终剩下的还是整个屏幕宽度,然后整个屏幕宽度再按比例分配,这就是完美的按比例分配了。

运行代码:     xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
   android:orientation="horizontal"
   android:padding="10dp"
   >
            android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
          android:textColor="#FFF"
          android:background="#FF0000"
        android:text="第一个" />


            android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="1"
        android:background="#F8FF00"
        android:textColor="#FFF"
        android:text="第二个" />
            android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
          android:textColor="#FFF"
          android:background="#0000FF"
        android:layout_weight="2"
        android:text="第三个" />


运行结果:

Android中你也许不知道的线性布局Layout_weight属性权重比例分配原理_第2张图片


你可能感兴趣的:(Android_布局)