您的位置:首页 > 其它

LinearLayout中layout_gravity控制控件位置

2014-08-08 11:30 92 查看

无数次在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才是好的,还是要根据不同的情况合适使用才行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: