线性布局用的十分普遍,和相对布局比较,可以减小很大代码量。其中Layout_gravity也是用的比较多的属性。
现有如下项目需求:
实现一个横向的线性布局,里面有两个子空间,一个居左,一个居右。
编写代码如下:
<LinearLayout
android:layout_width= "match_parent"
android:layout_height= "wrap_content"
android:orientation= "horizontal">
<TextView
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_gravity= "left"
android:text="我是左边" />
<TextView
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_gravity= "right"
android:text="我是右边" />
</LinearLayout >
结果如下:
发现第二个空间的
android:layout_gravity
=
"
right"
失效!!!
这是怎么回事呢?
作者也不知道怎么回事,查询相关资料,有如下说法(个人倾向于认为这是一个功能性的bug):
“布局对于子控件来说具有绝对的权威,在布局的gravity属性中定义的对齐方式是什么就是什么,子控件无法进行修改。”
像那么回事,所以贴上来。
结论:
如果子控件
layout_gravity
对齐方式设置为右对齐,如果想
layout_gravity起作用的话,线性布局必须是垂直的;
同理,如果对齐方式设置为下对齐,则线性布局必须是水平的。
那么问题来了该如何解决这个问题呢?
第一:改用相对布局。
第二:利用线性布局的weight属性,在两个控件之间在填充一个看不到的view控件,完成需求。
代码如下:
< LinearLayout
android:layout_width= "match_parent"
android:layout_height= "wrap_content"
android:orientation= "horizontal" >
<TextView
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_gravity= "left"
android:text ="我是左边" />
<View
android:layout_weight= "1"
android:layout_width= "0dp"
android:layout_height= "wrap_content" />
<TextView
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_gravity= "right"
android:text ="我是右边" />
</LinearLayout >
结果如图示: