LinearLayout中layout_gravity控制控件位置
2014-08-08 11:30
92 查看
无数次在linearlayout中利用layout_gravity拖动控件的时候,它都不听使唤。一直也不知道是什么原因,其实什么原理机制我不是很有兴趣了解,我只是很想知道到底要怎么做才能让layout_gravity自由摆放我的控件。
下面是我常遇到的情况,horizontal的三个texiview,我分别用layout_gravity让他们左中右显示,但是很明显他们不受layout_gravity的控制。这个时候其实用FrameLayout或者RelativeLayout也是相当方便,后面会介绍这两种方法的使用
布局显示如下
然后我们把LinearLayout的horizontal改为vertical,把高度调为200dp看一下效果
。。。这样一改确实达到了左中右显示的效果。但是出现了阶梯的感觉,这是因为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显示
很显然,framelayout很轻易就达到了要求
下面用RelativeLayout
同样的RelativeLayout也可以完成,但是其中没有layout_gravity属性了,用了layout_alignParentLeft,layout_centerInParent,layout_alignParentRight三个属性
可见不是什么都用LinearLayout才是好的,还是要根据不同的情况合适使用才行。
无数次在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才是好的,还是要根据不同的情况合适使用才行。
相关文章推荐
- javascript控制滚动条的位置,获取控件的位置
- android 控制控件的位置和大小
- winform中,如何控制控件位置随窗体的大小改变而改变
- 控制ASP.NET2.0中控件的位置
- android 开发零起步学习笔记(九):android 控制控件的位置和大小及Layout相关属性
- android:layout_gravity="right"控制LinearLayout中控件居右显示失败
- 控制控件在页面的显示位置
- winform中,如何控制控件位置随窗体的大小改变而改变
- CEdit控件控制光标位置
- android:layout_gravity="right"控制LinearLayout中控件居右显示失败
- 动态创建的控件,如何控制相对位置
- Android 动态控制控件的位置
- Unity-GUI创建控件时控制位置
- vs2005中如何正确用流布局开控制控件的位置
- 精确控制MFC控件窗口的位置和大小(top|left|width|height)
- JQuery控制屏幕滚动到指定控件位置
- C#TreeView控件如何控制滚动条的位置
- Android控件位置控制
- winform中,如何控制控件位置随窗体的大小改变而改变
- Android控制控件的位置和控件是否可见