Layout开发小技巧(一)

1.创建可复用的UI组件

我们可以通过使用来包含其它xml里面的内容到当前xml中, 内部只允许使用 layout 属性


layout="@layout/image_holder"
   
android:layout_height="fill_parent"
   
android:layout_width="fill_parent" />

layout="@layout/image_holder" />

2.与互补的 标签

可以通过减少视图树的数量级方式来优化android layout.以下xml布局展示了一个image和一个title:

xmlns:android="http://schemas.android.com/apk/res/android"
   
android:layout_width="fill_parent"
   
android:layout_height="fill_parent">

   
 
       
android:layout_width="fill_parent"
       
android:layout_height="fill_parent"
   
       
android:scaleType="center"
       
android:src="@drawable/golden_gate" />
   
   

       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:layout_marginBottom="20dip"
       
android:layout_gravity="center_horizontal|bottom"

       
android:padding="12dip"
       
       
android:background="#AA000000"
       
android:textColor="#ffffffff"
       
       
android:text="Golden Gate" />

在 HierarchyViewer中查看继承图表,如果仔细观察这张表,我们会发现我们在XML里面定义的FrameLayout 是另外一个FrameLayout 唯一的孩子.

由于使用了fill_parent属性我们的FrameLayout 有与其父节点相同的尺寸,并且我们没有定义任何的背景, 额外的填充 或gravity属性,因此这个FrameLayout 节点是多余的.这样做会使我们的UI无缘无故的变得复杂起来,怎样才能去掉这个FrameLayout 呢?毕竟XML文件都需要一个根标签和一个表示视图的标签.

 标签可以帮助我们解决这个问题,当 LayoutInflater遇到这个标签时,LayoutInflater会跳过这个标签内的内容,然后把这些内容加入到其父节点中去,以上的例子改写如下:

xmlns:android="http://schemas.android.com/apk/res/android">

   
 
       
android:layout_width="fill_parent"
       
android:layout_height="fill_parent"
   
       
android:scaleType="center"
       
android:src="@drawable/golden_gate" />
   
   

       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:layout_marginBottom="20dip"
       
android:layout_gravity="center_horizontal|bottom"

       
android:padding="12dip"
       
       
android:background="#AA000000"
       
android:textColor="#ffffffff"
       
       
android:text="Golden Gate" />

我们再次查看HierarchyViewer,多余的FrameLayout 节点没有了.

仅仅只限于父节点是FrameLayout 的情况下,你不能在父节点是LinearLayout 的情况下使用这个标签.你可以使用这个标签加入你自己的控件.


   
xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:okCancelBar="http://schemas.android.com/apk/res/com.example.android.merge">

   
 
       
android:layout_width="fill_parent"
       
android:layout_height="fill_parent"
   
       
android:scaleType="center"
       
android:src="@drawable/golden_gate" />
   
   

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

       
android:paddingTop="8dip"
       
android:gravity="center_horizontal"
       
       
android:background="#AA000000"
       
       
okCancelBar:okLabel="Save"
       
okCancelBar:cancelLabel="Don't save" />

也可以与一起使用

xmlns:android="http://schemas.android.com/apk/res/android">
   

       
layout="@layout/okcancelbar_button"
       
android:id="@+id/okcancelbar_ok" />
       
   

       
layout="@layout/okcancelbar_button"
       
android:id="@+id/okcancelbar_cancel" />

有以下局限:

1.它只能作为根标签使用

2.当你inflating一个以 作为根标签的layout时,必须指明父类ViewGroup ,并且设置其attachToRoot 属性为true:

LayoutInflater.from(context).inflate(R.layout.okcancelbar, this, true);

你可能感兴趣的:(android应用开发,layout,android,include,merge,xml,button)