android学习笔记(14)android相对布局

2014-12-8 9:42:09     19 人阅读    

android相对布局
相对布局由RelativeLayout代表,相对布局容器内子组件的位置总是相对兄弟组件、父 容器来决定的,因此这种布局方式被称为相对布局。
如果A组件的位置是由B组件的位置来决定的,Android要求先定义B组件,再定义A 组件。
RelativeLayout可支持如表2.7所示的两个XML属性。
表   RelativeLayout的XML属性及相关方法说明
XML属性                               相关方法                                 说 明
android:gravity                 setGravity(int)                      设洗该布局容器内部各个组件的对齐方式
android: ignoreGra vity      sctlgnorcGravity(int)         设定哪个组件不受gravity组件的影响


        为了控制该布局容器中各子组件的布局分布,RelativeLayout提供了一个内部类: RelativeLayout.LayoutParams,该类提供了大量的XML属性来控制RelativeLayout布局耗器 中子组件的布局分布。
RelativeLayout.LayoutParams 里只能设为 true、false 的 XML 属性如表 2.8 所示。
表 2.8 RelativeLayout.LayoutParams 里只能设为 boolean 值的属性
            属 性                                                                            说 明
android: layout一centerHorizontal            控制该子组件是否位于布局容器的水平居中位置
android: lay out_centerVertica!              控制该子组件是否位于布局容器的垂直居中位置
android:layout_centerInFarent              控制该子组件是否位于布局容器的中间位置

 android: layout_al i gnParentBottom        控制该子组件是否与布况容器底端对齐
android:layout_alignParentLeft              控制该子组件是否与布局管容器左边对齐
android: layout.alignParentRight          控制该子组件是否与布局容器右边对齐
android:layout_alignParentTop            控制该子组件是否与布局容器顶瑙对齐
RelativeLayout.LayoutParams            里属性值为其他UI组件ID的XML属性

 

如表2.9所示。


表2.9 RelativeLayout.LayoutParams里只能设为其他UI组件ID的属性
            属 性                                                           说 明
android:layout_toRightOf                  控制该子组件位于给出ID组件的右侧
android: layout_toLeftOf                     控制子组件位于给出ID组件的侧
android: layout_above                       控制该子组件位于给出ID组件的上方
android: layout_bclo w                        控制该子组件位于给出ID组件的K方
android:layout_alignTop                   控制该子组件位于给出ID组件的上边界对齐
android: layout一alignBottom             控制该子组件位于给出ID组件边界对齐
android:layout_alignLeft                       拧制该子组件位于给出ID组件的左边界对齐
android:layout_alignRight                      控制该子组件位于给出ID组件的右边界对齐


除此之外,RelativeLayout.LayoutParams 还继承了 android.view.ViewGroup.MarginLayout Params,因此 RelativeLayout 布局容器中每个子组件也可指定 android.view.ViewGroup.Margin LayoutParams所支持的各XML属性。
下面以一个示例来介绍相对布局的用法。
实例:梅花布局效果
相对布局容器中的子组件总是相对其他组件来决定分布位置的,可以考虑先把一个组件 放在相对布局容器的中间,然后以该组件为中心,将其他组件分布在该组件的四周,这样就可以形成“梅花布局”效果。
下面是“梅花”布局效果的界面布局文件。
程序清单:codes\02\2.2\RelativeLayoutTest\res\layout\main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<!-- 定义该组件位于父容器中间 --> 
<TextView 
 android:id="@+id/view01"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:background="@drawable/leaf"
 android:layout_centerInParent="true"
 />
<!-- 定义该组件位于view01组件的上方 -->
<TextView 
 android:id="@+id/view02"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:background="@drawable/leaf"
 android:layout_above="@id/view01"
 android:layout_alignLeft="@id/view01"
 />
<!-- 定义该组件位于view01组件的下方 -->
<TextView 
 android:id="@+id/view03"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:background="@drawable/leaf"
 android:layout_below="@id/view01"
 android:layout_alignLeft="@id/view01"
 />
<!-- 定义该组件位于view01组件的左边 -->
<TextView 
 android:id="@+id/view04"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:background="@drawable/leaf"
 android:layout_toLeftOf="@id/view01"
 android:layout_alignTop="@id/view01"
 />
<!-- 定义该组件位于view01组件的右边 -->
<TextView 
 android:id="@+id/view05"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:background="@drawable/leaf"
 android:layout_toRightOf="@id/view01"
 android:layout_alignTop="@id/view01"
 />  
</RelativeLayout>

上面的程序中第一行粗体字代码控制该组件位于父容器的中央,接下来定义的4个组件 依次环绕在第一个组件四周。
大部分时候,使用绝对布局都不是一个好思路,因为运行Android应用的 手机往往千差万别,因此屏幕大小、分辨率都可能存在较大差异,使用绝对布 局会彳艮难兼顾不同屏幕大小、分辨率的问题。
使用绝对布局时,每个子组件都可指定如下两个XML属性。
layout_x:指定该子组件的X坐标。
layout_y:指定该子组件的K坐标。
漏实例:登录界面
下面介绍一个使用绝对布局开发的登录界面的实例,这个登录界面中所有组件都通过 “绝对定位”的方式来指定位置。下面是该登录界面的界面布局文件。
程序清单:codes\02\2.2\AbsoluteLayoutTest\res\layout\main.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<!-- 定义一个文本框,使用绝对定位 -->
<TextView 
 android:layout_x="20dip"
 android:layout_y="20dip"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="用户名:"
 />
<!-- 定义一个文本编辑框,使用绝对定位 -->
<EditText 
 android:layout_x="80dip"
 android:layout_y="15dip"
 android:layout_width="wrap_content" 
 android:width="200px" 
 android:layout_height="wrap_content" 
 />
<!-- 定义一个文本框,使用绝对定位 --> 
<TextView 
 android:layout_x="20dip"
 android:layout_y="80dip"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="密  码:"
 />
<!-- 定义一个文本编辑框,使用绝对定位 --> 
<EditText 
 android:layout_x="80dip"
 android:layout_y="75dip"
 android:layout_width="wrap_content" 
 android:width="200px" 
 android:layout_height="wrap_content" 
 android:password="true"
 />
<!-- 定义一个按钮,使用绝对定位 -->
<Button 
 android:layout_x="130dip"
 android:layout_y="135dip"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="登   录"
 /> 
</AbsoluteLayout>

上面绝对布局容器中的每个子组件都指定了 layout_x、layout_y两个定位属性,这样才控 制了每个子组件在容器中的出现位置。使用Activity显示上面的页面,将看到如图2.14所示 界而。
不要以为笔者一下就通过绝对布局做出了图2.14所示 的登录界面,实际上这个登录界面是笔者不断调整各组件 的位置,经过多次尝试之后得到的结果。当使用绝对布局 来控制子组件布局时,编程要烦琐得多,而且在不同屏幕 上的显示效果差异也很大。
上面的界面布局中指定各组件的android:layout_x、 andr〇idMayout_y属性时指定了形如20dip这样的属性值,图2.14使用绝对布局管理的登录界面 这是一个距离值。Android中一般支持如下常用的距离单位。
px (像素):每个px对应屏幕上的一个点。
dip或dp (device independent pixels,设备独立像素):一种基于屏幕密度的抽象
单位。在每英寸160点的显示器上,1dip = 1px。但随着屏幕密度的改变,dip与px 的换算会发生改变。
sp (scaled pixels,比例像素):主要处理字体的大小,可以根据用户的字体大小
首选项进行缩放。
in (英寸):标准长度单位。
mm (毫米)••标准长度单位。
 pt (磅):标准长度单位,1/72英寸。


原文地址:http://www.itmmd.com/201412/274.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

产品经理学习笔记(7)-如何有效地发现需求   上一篇
下一篇  linux命令详解(13)环境变量配置和使用

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!