android中baselineAligned和baselineAlignedChildIndex

    相信大家对LinearLayout已经相当熟悉,但你们是否了解它的属性baselineAligned呢?

    Android官方文档是这么描述的:

     

     那到底这个属性是做什么用的呢?

         baselineAligned:基准线对齐。

     首先要解释什么是基准线,这个在中文中不常见,但在以字母为书写语言的其他国家非常常见。

     

      如上图所示,红线就是基线(baseline),是不是很熟悉,这不就是我们经常写英文的四条线中的第三条吗。

     

     那baselineAligned是做什么用的呢?根据官方文档,baselineAligned默认设置为true,当设置为false时,

      布局文件和它的孩子的基准线不对齐。

      让我们通过一个例子来看看效果怎样的。

     

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="wrap_content"
 5     android:baselineAligned="false"
 6     android:orientation="horizontal">
 7 
 8     <TextView
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_marginRight="5dip"
12         android:text="TextView:p" />
13     <TextView 
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:layout_marginRight="5dip"
17         android:textSize="30sp"
18         android:text="LargeTextView:p"
19         />
20 </LinearLayout>

 这是将baselineAligned值设置为false时,也就是不对齐。看看运行效果:

  

  把baselineAligned值改为true。

  

差别很明显,一看就明白区别了。

android:layout_baselinealignedChildIndex属性 指当前layout是 以哪个view的基准线与其他的View进行对齐。这个属性只对Button、TextView、EditView有效且下标从0开始。大家看一段代码和效果图:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="3dip"
android:text="abcdg" />

<!-- We want the middle textview of this vertical linear layout to
be baseline aligned with the others.-->
<LinearLayout
android:orientation="vertical"
android:baselineAlignedChildIndex="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/test"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dip"
android:text="abcdg" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/test"/>
</LinearLayout>


<!-- We want the third index textview of this vertical linear layout to
be baseline aligned with the others.-->
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:baselineAlignedChildIndex="2">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/test"/>

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/test"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dip"
android:text="abcdg" />
</LinearLayout>


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="abcdg" />


</LinearLayout>

效果

 

注意,用了baselineAlignedChildIndex就不要用类似android:layout_gravity="center_vertical"这种定位的代码了,因为会冲突,就不会出现我们想要的效果了。

参考:Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline

posted @ 2015-02-02 14:18  不吃菜的菜鸟  阅读(1221)  评论(0编辑  收藏  举报