Android Layout Trick

房冥夜
2023-12-01
滥用LAYOUT会导致initialization, layout and drawing become slower.
如果你在嵌套几个linearlayout时用到weight参数,他要求孩子被测量俩次,这尤其昂贵的。
在一个listview中,你假设让他的ITEM显示出下列的一种格式。
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
   
android:layout_width = "fill_parent"
   
android:layout_height = "?android:attr/listPreferredItemHeight"

   
android:padding = "6dip" >

   
< ImageView
       
android:id = "@+id/icon"

       
android:layout_width = "wrap_content"
       
android:layout_height = "fill_parent"
       
android:layout_marginRight = "6dip"

       
android:src = "@drawable/icon" />

   
< LinearLayout
       
android:orientation = "vertical"

       
android:layout_width = "0dip"
       
android:layout_weight = "1"
       
android:layout_height = "fill_parent" >

       
< TextView
           
android:layout_width = "fill_parent"
           
android:layout_height = "0dip"
           
android:layout_weight = "1"

           
android:gravity = "center_vertical"
           
android:text = "My Application" />

       
< TextView
           
android:layout_width = "fill_parent"
           
android:layout_height = "0dip"
           
android:layout_weight = "1"

           
android:singleLine = "true"
           
android:ellipsize = "marquee"
           
android:text = "Simple application that shows how to use RelativeLayout" />

   
</ LinearLayout >

</ LinearLayout >

这个layout可以工作但是非常浪费,因为你对这个LISTVIEW的每一个list view都要实例化这么一大串。可以relativelayout重写。
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
   
android:layout_width = "fill_parent"
   
android:layout_height = "?android:attr/listPreferredItemHeight"

   
android:padding = "6dip" >

   
< ImageView
       
android:id = "@+id/icon"

       
android:layout_width = "wrap_content"
       
android:layout_height = "fill_parent"

       
android:layout_alignParentTop = "true"
       
android:layout_alignParentBottom = "true"
       
android:layout_marginRight = "6dip"

       
android:src = "@drawable/icon" />

   
< TextView
       
android:id = "@+id/secondLine"

       
android:layout_width = "fill_parent"
       
android:layout_height = "26dip"

       
android:layout_toRightOf = "@id/icon"
       
android:layout_alignParentBottom = "true"
       
android:layout_alignParentRight = "true"

       
android:singleLine = "true"
       
android:ellipsize = "marquee"
       
android:text = "Simple application that shows how to use RelativeLayout" />

   
< TextView
       
android:layout_width = "fill_parent"
       
android:layout_height = "wrap_content"

       
android:layout_toRightOf = "@id/icon"
       
android:layout_alignParentRight = "true"
       
android:layout_alignParentTop = "true"
       
android:layout_above = "@id/secondLine"
       
android:layout_alignWithParentIfMissing = "true"

       
android:gravity = "center_vertical"
       
android:text = "My Application" />

</ RelativeLayout >

list item要显示的文字有俩行,如果其中一行不可见,application将简单的设置这个textview to GONE.
这个工作当用linealayout时表现很好,但是用relativelayout时则不行。
To solve this problem, you can use a very special layout parameter called alignWithParentIfMissing .

参考:http://www.curious-creature.org/2009/02/22/android-layout-tricks-1/
通过HierarchyViewer你可以看出俩中形式,第二个每次创建一个list item时都会少创建一linearlayout
 类似资料:

相关阅读

相关文章

相关问答