学习android布局中的线性布局时,遇到这么个问题。

按照官网的例子,layout文件如下:

 

   
   
   
   
  1. xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent"> 
  6.  
  7.   <LinearLayout 
  8.       android:orientation="horizontal" 
  9.       android:layout_width="fill_parent" 
  10.       android:layout_height="fill_parent" 
  11.       android:layout_weight="2"> 
  12.       <TextView 
  13.           android:text="red" 
  14.           android:gravity="center_horizontal" 
  15.           android:background="#aa0000" 
  16.           android:layout_width="wrap_content" 
  17.           android:layout_height="fill_parent" 
  18.           android:layout_weight="1"/> 
  19.       <TextView 
  20.           android:text="green" 
  21.           android:gravity="center_horizontal" 
  22.           android:background="#00aa00" 
  23.           android:layout_width="wrap_content" 
  24.           android:layout_height="fill_parent" 
  25.           android:layout_weight="1"/> 
  26.       <TextView 
  27.           android:text="blue" 
  28.           android:gravity="center_horizontal" 
  29.           android:background="#0000aa" 
  30.           android:layout_width="wrap_content" 
  31.           android:layout_height="fill_parent" 
  32.           android:layout_weight="1"/> 
  33.       <TextView 
  34.           android:text="yellow" 
  35.           android:gravity="center_horizontal" 
  36.           android:background="#aaaa00" 
  37.           android:layout_width="wrap_content" 
  38.           android:layout_height="fill_parent" 
  39.           android:layout_weight="1"/> 
  40.   LinearLayout> 
  41.          
  42.   <LinearLayout 
  43.     android:orientation="vertical" 
  44.     android:layout_width="fill_parent" 
  45.     android:layout_height="fill_parent" 
  46.     android:layout_weight="1"> 
  47.     <TextView 
  48.         android:text="row one" 
  49.         android:textSize="15pt" 
  50.         android:layout_width="fill_parent" 
  51.         android:layout_height="wrap_content" 
  52.         android:layout_weight="1"/> 
  53.     <TextView 
  54.         android:text="row two" 
  55.         android:textSize="15pt" 
  56.         android:layout_width="fill_parent" 
  57.         android:layout_height="wrap_content" 
  58.         android:layout_weight="1"/> 
  59.     <TextView 
  60.         android:text="row three" 
  61.         android:textSize="15pt" 
  62.         android:layout_width="fill_parent" 
  63.         android:layout_height="wrap_content" 
  64.         android:layout_weight="1"/> 
  65.     <TextView 
  66.         android:text="row four" 
  67.         android:textSize="15pt" 
  68.         android:layout_width="fill_parent" 
  69.         android:layout_height="wrap_content" 
  70.         android:layout_weight="1"/> 
  71.   LinearLayout> 
  72.  
  73. LinearLayout> 

按照说明,上面的列表应该比下面的列表占用更多的高度才对,因为它的weight是2,可结果却是反而比下面的列表更矮,很奇怪。

于是请教公司的大牛,将文件修改如下:

   
   
   
   
  1. xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent"> 
  6.  
  7.   <LinearLayout 
  8.       android:orientation="horizontal" 
  9.       android:layout_width="fill_parent" 
  10.       android:layout_height="0dip" 
  11.       android:layout_weight="2"> 
  12.       <TextView 
  13.           android:text="red" 
  14.           android:gravity="center_horizontal" 
  15.           android:background="#aa0000" 
  16.           android:layout_width="0dip" 
  17.           android:layout_height="fill_parent" 
  18.           android:layout_weight="2"/> 
  19.       <TextView 
  20.           android:text="greenaaa" 
  21.           android:gravity="center_horizontal" 
  22.           android:background="#00aa00" 
  23.           android:layout_width="0dip" 
  24.           android:layout_height="fill_parent" 
  25.           android:layout_weight="1"/> 
  26.       <TextView 
  27.           android:text="blue" 
  28.           android:gravity="center_horizontal" 
  29.           android:background="#0000aa" 
  30.           android:layout_width="0dip" 
  31.           android:layout_height="fill_parent" 
  32.           android:layout_weight="1"/> 
  33.       <TextView 
  34.           android:text="yellow" 
  35.           android:gravity="center_horizontal" 
  36.           android:background="#aaaa00" 
  37.           android:layout_width="0dip" 
  38.           android:layout_height="fill_parent" 
  39.           android:layout_weight="1"/> 
  40.   LinearLayout> 
  41.          
  42.   <LinearLayout 
  43.     android:orientation="vertical" 
  44.     android:layout_width="fill_parent" 
  45.     android:layout_height="0dip" 
  46.     android:layout_weight="1"> 
  47.     <TextView 
  48.         android:text="row one" 
  49.         android:textSize="10pt" 
  50.         android:layout_width="fill_parent" 
  51.         android:layout_height="0dip" 
  52.         android:layout_weight="3"/> 
  53.     <TextView 
  54.         android:text="row two" 
  55.         android:textSize="10pt" 
  56.         android:layout_width="fill_parent" 
  57.         android:layout_height="0dip" 
  58.         android:layout_weight="1"/> 
  59.     <TextView 
  60.         android:text="row three" 
  61.         android:textSize="10pt" 
  62.         android:layout_width="fill_parent" 
  63.         android:layout_height="0dip" 
  64.         android:layout_weight="1"/> 
  65.     <TextView 
  66.         android:text="row four" 
  67.         android:textSize="10pt" 
  68.         android:layout_width="fill_parent" 
  69.         android:layout_height="0dip" 
  70.         android:layout_weight="1"/> 
  71.   LinearLayout> 
  72.  
  73. LinearLayout> 

垂直布局时,将每个element的高度设置为“0dip”,水平布局时,将每个element的宽度设置为“0dip”,那么布局就会严格按照weight的比例显示了。