LinearLayout中layout_gravity控制控件位置

来源:互联网 发布:导出来的sql带双引号 编辑:程序博客网 时间:2024/04/24 11:17


无数次在linearlayout中利用layout_gravity拖动控件的时候,它都不听使唤。一直也不知道是什么原因,其实什么原理机制我不是很有兴趣了解,我只是很想知道到底要怎么做才能让layout_gravity自由摆放我的控件。


下面是我常遇到的情况,horizontal的三个texiview,我分别用layout_gravity让他们左中右显示,但是很明显他们不受layout_gravity的控制。这个时候其实用FrameLayout或者RelativeLayout也是相当方便,后面会介绍这两种方法的使用

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:layout_marginTop="100dp"    android:background="@drawable/font_gray_bg"    android:orientation="horizontal" >    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_gravity="left"        android:text="left"        android:textSize="16sp" />    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_gravity="center"        android:text="center"        android:textSize="16sp" />    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_gravity="right"        android:text="right"        android:textSize="16sp" /></LinearLayout>

布局显示如下

然后我们把LinearLayout的horizontal改为vertical,把高度调为200dp看一下效果

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="200dp"    android:layout_marginTop="100dp"    android:background="@drawable/font_gray_bg"    android:orientation="vertical" >    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_gravity="left"        android:text="left"        android:textSize="16sp" />    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_gravity="center"        android:text="center"        android:textSize="16sp" />    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_gravity="right"        android:text="right"        android:textSize="16sp" /></LinearLayout>


。。。这样一改确实达到了左中右显示的效果。但是出现了阶梯的感觉,这是因为vertical属性控制了控件是自上向下依次显示的,一行显示一个控件。

所以设置linearlayout为水平时,layout_gravity的left,center,right的水平属性是没有效果的,但是top,center,bottom会有效,而设置为vertical时,则它的top,center,bottom会失效,left,center,right会有效果。

这是由于设置linearlayout为水平的时候,他就默认了控件是水平一个挨着一个显示,因而只能控制垂直方向的属性了。垂直的linearlayout控制控件水平显示我也试过了,确实是这样。


所以要想实现左中右显示,可以用FrameLayout和RelativeLayout,也可以用Linearlayout的weight属性三等分(三等分还需每个textview嵌套一个linearlayout才是实现)

其实要显示这种水平方向的几个控件,用FrameLayout更好控制,而且在xml文件中嵌套过多的linearlayout会降低效率

下面用FrameLayout显示

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:layout_marginTop="100dp"    android:background="@drawable/font_gray_bg"    >    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_gravity="left"        android:text="left"        android:textSize="16sp" />    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_gravity="center"        android:text="center"        android:textSize="16sp" />    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_gravity="right"        android:text="right"        android:textSize="16sp" /></FrameLayout>


很显然,framelayout很轻易就达到了要求


下面用RelativeLayout

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:layout_marginTop="100dp"    android:background="@drawable/font_gray_bg"    >    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_alignParentLeft="true"        android:text="left"        android:textSize="16sp" />    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_centerInParent="true"        android:text="center"        android:textSize="16sp" />    <TextView        android:layout_width="wrap_content"        android:layout_height="30dip"        android:layout_alignParentRight="true"        android:text="right"        android:textSize="16sp" /></RelativeLayout>


同样的RelativeLayout也可以完成,但是其中没有layout_gravity属性了,用了layout_alignParentLeft,layout_centerInParent,layout_alignParentRight三个属性

可见不是什么都用LinearLayout才是好的,还是要根据不同的情况合适使用才行。

0 0
原创粉丝点击