今天开始学习RelativeLayout(相对布局),相对布局在平时布局的时候用的较多,因为Android适配方面的原因。相对布局可以控制组件摆放的位置(放在任一组件的上下左右等位置),下面来看看类的定义(http://developer.android.com/reference/android/widget/RelativeLayout.html):

相对布局有几个非常常用的属性在这里列个表格说下:

RelativeLayout的常用属性
编号 属性名称 对应的变量 意义
1 android:layout_below RelativeLayout.BELOW 放在指定组件的下面
2 android:layout_toLeftOf RelativeLayout.LEFT_OF 放在指定组件的左边
3 android:layout_toRightOf RelativeLayout.RIGHT_OF 放在指定组件的右边
4 android:alignTop RelativeLayout.ALIGN_TOP 以指定组件为参考进行上对齐
5 android:alignButtom RelativeLayout.ALIGN_BUTTOM 以指定组件为参考进行下对齐
6 android:alignLeft RelativeLayout.ALIGN_LEFT 以指定组件为参考进行左对齐
7 android:alignRight RelativeLayout.ALIGN_RIGHT 以指定组件为参考进行右对齐

下面同样写个例子来说明。

效果如下:

我用RelativeLayout来自定义title(比较常见)。

main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="45dip"
android:background="@drawable/head_bg" > <ImageButton
android:id="@+id/main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/main" /> <ImageButton
android:id="@+id/fresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:background="@drawable/fresh" /> <TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="Kay"
android:textColor="#FFFFFFFF"
android:textSize="24sp" />
</RelativeLayout> <ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/img_1" /> </LinearLayout>

上面用到的属性有一个上面没有说到就是android:layout_alignParentLeft(
layout_alignParentRight)和
android:layout_alignParentTop分别表示相对父布局靠左(靠右)和靠上,至于消除系统title前面已经说过了(http://blog.csdn.net/kaypro/article/details/9858807

接下来就是和以前一样用java代码来实现上面的效果:

package com.example.relativelayoutdemo;

import android.os.Bundle;
import android.provider.Contacts.Organizations;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.app.Activity;
import android.graphics.Color;
import android.text.Layout;
import android.view.Gravity;
import android.view.Menu;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 获取密度(用于dp转换成px值)
float scale = this.getResources().getDisplayMetrics().density;
// setContentView(R.layout.activity_main);
// 定义LinearLayout装载RelativeLayout和ImageView
LinearLayout lLayout = new LinearLayout(this);
// 设置垂直显示
lLayout.setOrientation(LinearLayout.VERTICAL);
// 定义LinearLayout的高和宽
LinearLayout.LayoutParams lLayoutParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT); // 定义RelativeLayout
RelativeLayout rLayout = new RelativeLayout(this);
// 定义RelativeLayout的高和宽
RelativeLayout.LayoutParams rLayoutParams = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, (int) (45 * scale + 0.5f));
// 设置RelativeLayout的背景
rLayout.setBackgroundResource(R.drawable.head_bg); // 定义两个ImageButton
ImageButton main = new ImageButton(this);
ImageButton fresh = new ImageButton(this);
// 定义两个ImageButton的高和宽
RelativeLayout.LayoutParams mainParams = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams freParams = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
// 设置两个ImageButton的背景
main.setBackgroundResource(R.drawable.main);
fresh.setBackgroundResource(R.drawable.fresh);
// 为两个ImageButton添加规则
// 在父布局的右边(相当于android:alignParentRight="true")
mainParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
// 垂直居中显示
mainParams.addRule(RelativeLayout.CENTER_VERTICAL);
// 在父布局的左边(android:alignParentLeft="false")
freParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
freParams.addRule(RelativeLayout.CENTER_VERTICAL);
// layout_marginLeft="10dp"(这里dp转换成像素)
freParams.leftMargin = (int) (10 * scale + 0.5f); TextView tv = new TextView(this);
tv.setGravity(Gravity.CENTER);
tv.setTextColor(Color.WHITE);
tv.setTextSize(24);
tv.setText("Kay"); // 定义ImageView和设置背景图
ImageView img = new ImageView(this);
img.setBackgroundResource(R.drawable.img_1);
// RelativeLayout添加main fresh tv这三个view
rLayout.addView(fresh, freParams);
rLayout.addView(tv, lLayoutParams);
rLayout.addView(main, mainParams); // LinearLayout添加RelativeLayout和ImageView
lLayout.addView(rLayout, rLayoutParams);
lLayout.addView(img, lLayoutParams); // 显示
super.setContentView(lLayout, lLayoutParams); } }

效果和上面xml实现的一样,好了,今天就说到这里了。

一步一步学android之布局管理器——RelativeLayout的更多相关文章

  1. 一步一步学android之布局管理器——LinearLayout

    线性布局是最基本的一种布局,在基本控件篇幅中用到的都是LinearLayout,线性布局有两种方式,前面也有用到,一种是垂直的(vertical),一种是水平的(horizontal).我们同样来看下 ...

  2. android的布局管理器

    理论上通过setContentView(view)能够把一个view设置到activity中,但当你有很多个view控件的时候,就需要用android的布局管理器来管理view控件了. android ...

  3. Android课程---布局管理器中的线性布局

    线性布局实例: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro ...

  4. Android课程---布局管理器

  5. android开发4:Android布局管理器1(线性布局,相对布局RelativeLayout-案例)

    控件类概述 View 可视化控件的基类 属性名称 对应方法 描述 android:background setBackgroundResource(int) 设置背景 android:clickabl ...

  6. Android UI组件:布局管理器

    为了更好的管理Android应用的用户界面中的组件,Android提供了布局管理器.通过使用布局管理器,Android应用的图形用户界面具有良好的平台无关性.通常,推荐使用布局管理器来管理组件的分布. ...

  7. android中常用的布局管理器

    Android中的几种常用的布局,主要介绍内容有: View视图 RelativeLayout    相对布局管理器 LinearLayout     线性布局管理器 FrameLayout     ...

  8. 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

    问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...

  9. [置顶] Android布局管理器 - 详细解析布局实现

    布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小; 布局管理器之间的继承关系 : 在上面的UML图中可以看出, 绝对布局 帧布局 网格布局 相 ...

随机推荐

  1. JDK常见问题 环境变量配置

    "javac不是内部命令或外部命令" Windows7 安装"jdk-6u26-windows-x64.exe"后,常提示"javac不是内部命令或外 ...

  2. TPen的7种Style和16种Mode

    //TPen 的主要属性有四: Color.Width.Style.Mode {Color: 颜色} {Width: 宽度; 默认是 1; 如果赋予 <= 0 的值, 会使用默认值} {Styl ...

  3. 杭电oj 2095 & 异或^符号在C/C++中的使用

    异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果. 值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终 ...

  4. 【POJ】1330 Nearest Common Ancestors ——最近公共祖先(LCA)

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18136   Accept ...

  5. wx.ToolBar

    wx.ToolBar A toolbar is a bar of buttons and/or other controls usually placed below the menu bar in ...

  6. CodeFirst EF中导航属性的个人理解

    >导航属性: 01.个人理解就是Ef中的属性在实体数据表中不存在(先这么认为); 02.就是除了根据表中列映射出的属性 之外根据表与表之间的关系的关联属性.方便操作与之关联的表; 例如: 有 表 ...

  7. char* 和 wchar_t* 如何互相转换

    char* 和 wchar_t* 如何互相转换 C函数可以用 wcstombs - 将宽字符转换成多字符 WCHAR ->  CHAR      mbstowcs - 把多字符把转换成宽字符 C ...

  8. Linux学习之find命令

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...

  9. php中禁止非法调用和硬路径引入文件的方法

    php中禁止非法调用和硬路径引入文件的方法 在php中有一些公共的文件为了方便,我们会做一个公共文件,让不用的文件共同调用.为了禁止公共文件被非常单独调用,可以在文件上做一个常量,禁止非常调用:在公共 ...

  10. 一个简单的php函数调用实例

    需求分析: funcs.php (这个文件,我们定义了一个函数) <?php //我们一个计算,+ - * / 的代码集合->函数 //1. function 是一个关键字 //2. ji ...