android 布局杂谈

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

关于五大布局的特性可以查看下面这篇文章: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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值