线性布局中,有4个及其重要的参数,直接决定元素的布局和位置,这四个参数是

android:layout_gravity (是本元素相对于父元素的布局方向)

android:gravity(是本元素内部所有子元素的布局方向)

android:orientation(线性布局以列或行来显示内部子元素)

android:layout_weight(线性布局内子元素对未占用空间【水平或垂直】分配权重值,其值越小,权重越大

前提是子元素设置了android:layout_width="fill_parent"属性(水平方向)

android:layout_height="fill_parent"属性(垂直方向)


如果某个子元素的android:layout_width="wrap_content"

android:layout_height ="wrap_content”

android:layout_weight的设置值对该方向上空间的分配刚好相反。

下面以一个简单例子来说明4个参数

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_height="200dp"

android:layout_width="200dp"

android:background="#AABBCC"

android:orientation="horizontal"

android:layout_gravity="center">

<TextViewandroid:text="ONE"

android:background="#aa0000"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_margin="1dp"/>

<TextViewandroid:text="TWO"

android:background="#aa0000"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_margin="1dp"/>

</LinearLayout>

说明:在上面的例子中,根布局是LinearLayout,其包含有2TextView视图,为了对参数android:layout_gravity有直观的了解,对根布局LinearLayout特意加了3个参数

android:layout_height="200dp"

android:layout_width="200dp"

android:background="#AABBCC"

为布局指定了固定的宽度和高度,以及背景颜色,上面的例子运行后效果如下图:

说明:对LinearLayout中的参数android:layout_gravity来说,其意义是指定本布局相对于父布局的重力方向,由于该布局的已经是根布局,其父布局是整个屏幕,那么该参数设置的是相对于屏幕的位置,可以换不同的参数top|bottom|left|right等等参数来试验。

现在增加参数android:gravity="bottom|right"完整XML如下,看看效果

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_height="200dp"

android:layout_width="200dp"

android:background="#AABBCC"

android:orientation="horizontal"

android:layout_gravity="center"

android:gravity="bottom|right">

<TextViewandroid:text="ONE"

android:background="#aa0000"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_margin="1dp"/>

<TextViewandroid:text="TWO"

android:background="#aa0000"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_margin="1dp"/>

</LinearLayout>

通过改变android:gravity参数的值可以看到实际效果。


参数android:orientation="horizontal"决定了每个子元素各占一列,如果

参数android:orientation="vertical"则每个子元素各占一行,也就是从上到下排列了。


对于LinearLayout布局的子元素,给每个子元素加上参数android:layout_weight

看看效果

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_height="200dp"

android:layout_width="200dp"

android:background="#AABBCC"

android:layout_gravity="center"

android:gravity="bottom|right"

android:orientation="horizontal">

<TextViewandroid:text="ONE"

android:background="#aa0000"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_margin="1dp"

android:layout_weight="1"/>

<TextViewandroid:text="TWO"

android:background="#aa0000"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_margin="1dp"

android:layout_weight="2"/>

</LinearLayout>

TextONE的权重为1,但明显占的宽度比TWO的小,百思不得其解,后来得知,如果把TextView的参数android:layout_width="wrap_content"全部修改为android:layout_width="fill_parent",ok,代码如下


<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_height="200dp"

android:layout_width="200dp"

android:background="#AABBCC"

android:layout_gravity="center"

android:gravity="bottom|right"

android:orientation="horizontal">

<TextViewandroid:text="ONE"

android:background="#aa0000"

android:layout_height="wrap_content"

android:layout_width="fill_parent"

android:layout_margin="1dp"

android:layout_weight="1"/>

<TextViewandroid:text="TWO"

android:background="#aa0000"

android:layout_height="wrap_content"

android:layout_width="fill_parent"

android:layout_margin="1dp"

android:layout_weight="2"/>

</LinearLayout>



所以padding是定义控件自己的内容和控件边缘之间的距离,padding有填充填料的意思,而margin是在说控件的四个边缘之外的距离,指的是和别的控件之间的距离,margin有边缘,页面留白的意思

借用一幅别人的图来说明



gravity与layout_gravity区别android:gravity 属性是对该view 内容的限定

android:layout_gravity 属性是该view相对与起父view 的位置的限定

例如如下代码,及效果图:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:layout_width="wrap_content"
android:gravity="center"
android:layout_height="wrap_content"
android:text="one"
android:layout_gravity="right"/>
</LinearLayout>



这两个都可以设置边距,但有细微的区别

android:padding是相对父view的边距

android:layout_margin是相对同一级View的边距

如LinearLayout是水平布局,下面有两个按钮,如果右边的按钮想距左边的按钮15px,因为这两个按钮是同一级的,应该用android:layout_margin;如果右边的按钮想距左边的距离为350px,应该用android:padding

注:

android:padding是左右上下都是相同的设置,如果想单独设置左边的,请设置android:paddingLeft,同样还可以设置android:paddingTop、android:paddingBottom、android:paddingRight

android:layout_margin和android:padding一样,有左右上下

android:layout_marginLeft android:layout_marginTop android:layout_marginRight android:layout_marginBottom



更多相关文章

  1. Android如何获取多媒体文件信息
  2. android:gravity="start" Android(安卓)多行文本框设置光标从头
  3. 安卓View理解总结
  4. 关于Android初级逻辑思考(续)——android文件夹讲解
  5. 谁说Android的动画不廉价(四)之元素动画
  6. 谁说Android的动画不廉价(五)之水波纹动画
  7. Android:BadTokenException: Unable to add window
  8. android 通知Notification的使用小实例(振动,灯光,声音)
  9. android webview js交互 (java和js交互)

随机推荐

  1. Android(安卓)一条竖线或横线、画边框
  2. android控件与常用控件
  3. Android基础教程:第3版:修订版(china-pub
  4. Android(安卓)NestedScrolling机制
  5. Android仿淘宝列表和网格布局切换
  6. android关于shape的gradient属性使用下篇
  7. android解析xml一直报错org.xmlpull.v1.X
  8. 使用Kotlin开发Android(安卓)扩展函数(Ext
  9. Android(安卓)API Level与sdk版本对照表
  10. Android(安卓)Studio 添加已有工程方法