android 布局杂谈

来源:互联网 发布:securecrt mac 中文 编辑:程序博客网 时间:2024/04/29 20:18

由于五大布局在网上的资料已经非常之多,所以在这里就不在赘述。

关于五大布局的特性可以查看下面这篇文章:http://blog.csdn.net/android_tutor/article/details/4779097


这里将讲解一些容易引起混淆的布局参数,并提供一些例子供大家参考。


1、layout_margin & padding

layout_margin:view自身的边界与外界view的距离。

padding:view自身的边界与内部元素的距离。

即layout_margin是面向外部的,而padding是面向内部的。先来看一个布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="200dip"    android:layout_height="200dip"    android:layout_gravity="center"    android:background="#D8D8D8">    <LinearLayout         android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_margin="20dip"        android:padding="20dip"        android:background="#81BEF7">        <TextView            android:layout_width="fill_parent"           android:layout_height="fill_parent"           android:background="#BCF5A9"/>    </LinearLayout></LinearLayout>

为了更加清晰的展示layout_margin和padding的效果,将最外围的LinearLayout布局居中,且设置长宽均为200dip。

将外层LinearLayout的背景设置为  浅灰色,内层的LinearLayout背景为浅蓝色,最内层的TextView背景为浅绿色

子元素的长宽均为充满父元素。但是用于LinearLayou设置了

android:layout_margin="20dip"

android:padding="20dip"

所以出来的效果如下图:

图中,浅灰色 的部分即为 LinearLayout 布局 android:layout_margin="20dip" 的效果,浅蓝色 的部分即为 android:padding="20dip" 的效果。


2、layout_gravity & gravity

layout_gravity:view自身相对于父元素的重力方向。

gravity:view内部子元素相对于自身的重力方向。

说起来有些抽象,看个例子就很比较清晰了。:

还是用上面的这个例子,修改内层LinearLayout 和 TextView的长宽,并添加一些内容:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="200dip"    android:layout_height="200dip"    android:layout_gravity="center"    android:background="#D8D8D8">    <LinearLayout         android:layout_width="fill_parent"        android:layout_height="100dip"        android:layout_margin="20dip"        android:padding="20dip"        android:background="#81BEF7"                android:layout_gravity="center"        android:gravity="right">        <TextView            android:layout_width="wrap_content"           android:layout_height="wrap_content"           android:background="#BCF5A9"           android:text="GRAVITY"           android:textColor="#000000"/>    </LinearLayout></LinearLayout>

注意内层 LinearLayout 的两行属性:

android:layout_gravity="center" //将自身放置在相对于父元素的居中位置

android:gravity="right" //将内部子元素放置在相对于自身的居右位置

效果如下图:


3、layout_weight

线性布局内子元素对未占用空间(水平或垂直)分配权重值,其值越小,权重越大,不过有前提条件。

这篇文章的后两个例子总结的很好,供大家参考:http://blog.csdn.net/trampou/article/details/5752533


其他提两个标签

<include>:重用的标签,该标签可以直接饮用已写好的布局,大大提高了布局的复用性。

<merge>:减少布局层次标签,该标签可以减少一级布局层次,优化布局结构,不过有一定的限制。

限制:1.只能用于xml layout文件的根元素;  

2.在代码中inflate一个以merge为根元素的布局文件时候,你需要指定一个ViewGroup 作为其容器,并且要设置attachToRoot 为true。


将上面的布局文件用<include>标签重用起来,出来的效果就跟上面一样。绝对是布局重用的利器。

<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android">    <include layout="@layout/gravity_test"/></merge>


原创粉丝点击