今天开始学习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 {@Overrideprotected 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和ImageViewLinearLayout lLayout = new LinearLayout(this);// 设置垂直显示lLayout.setOrientation(LinearLayout.VERTICAL);// 定义LinearLayout的高和宽LinearLayout.LayoutParams lLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);// 定义RelativeLayoutRelativeLayout 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);// 定义两个ImageButtonImageButton 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这三个viewrLayout.addView(fresh, freParams);rLayout.addView(tv, lLayoutParams);rLayout.addView(main, mainParams);// LinearLayout添加RelativeLayout和ImageViewlLayout.addView(rLayout, rLayoutParams);lLayout.addView(img, lLayoutParams);// 显示super.setContentView(lLayout, lLayoutParams);}}

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


更多相关文章

  1. android加载gif图片的动画库
  2. Android自定义饼图TTJPieChart
  3. Android(安卓)RatingBar 评分条
  4. Android(安卓)ApiDemos示例解析(154):Views->Layouts->ScrollVie
  5. Android中adapter的原理简单说明
  6. android中onMeasure初看,深入理解布局之一!
  7. ImageView显示图片时,上下出现多余空白。
  8. Android(安卓)布局优化之include与merge
  9. Android(安卓)架构组件之---LifeCycle 详解

随机推荐

  1. 通过网络使用ADB ( Connect to android w
  2. Android(安卓)编译环境配置搭建(Ubuntu 1
  3. 如何成为一个android高手
  4. Android(安卓)studio 删除无用代码
  5. AndroidMenifest.xml中android:sharedUse
  6. Android(安卓)数据存储方式
  7. Android事件处理第一节(View对Touch事件的
  8. Android外设存储设备的访问及测试
  9. android 焦点问题
  10. android:layout_weight之我见