为什么去掉与否差异这么大?

天王盖地虎626 发布于 2016/06/11 23:54
阅读 158
收藏 0

布局文件如下;

<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="100dp"
    android:orientation ="vertical"
    android:background="#8ea31a">
    
     <TextView
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:gravity="center"
        android:layout_weight="2"
        android:text="测试一下布局文件的问题" 
        android:background="#1a93c0"/>
     
       <ListView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         android:background="#c01a5c"
        >
    </ListView>
</LinearLayout>


标红的位置android:layout_weight="2",如果保留这段代码,其运行效果是


如果去掉标红处的代码,其运行效果是

麻烦从LinearLayout 的onMeasure()角度阐述下其区别哦?

加载中
0
loyal
loyal

 

android:layout_weight 你不懂.

你为什么不都加上试试? 哈哈哈

0
天王盖地虎626
天王盖地虎626

引用来自“loyal”的评论

 

android:layout_weight 你不懂.

你为什么不都加上试试? 哈哈哈

已经明白了

1)如果去掉android:layout_weight=2

onMeasure计算的时候,只计算一次

即:textview的高度应该是60dp,listview的高度应该是100-60=40dp;即占用剩下的40dp宽度。

这个时候,如果把listview标签移到textiview上面,我们会发现,listivew会占全屏,即100dp


2)现在因为textview中有了android:layout_weight=2

其中计算规则发生了变化

textview的高度 =60+(100-100-60)*(2/(2+0))=0;

listview的高度是=100+(100-100-60)*(0/(2+0))=100

所以,占用全屏了。

我是看了这篇文章才明白的

http://www.cnblogs.com/xiaoQLu/archive/2012/09/20/2695355.html


返回顶部
顶部