【Android开发日记】妙用 RelativeLayout 实现3 段布局

在设计过程中,我们经常会遇到这样的需求:

把一条线3控制,左对齐左控制,右侧控制右对齐,中间控制,以填补剩余空间。

或者一列内放3个控件,上面的与顶部对齐,以下的沉在最底部,中间控件是弹性的。充满剩余空间。

情况一:水平布局

图示:

这是第一种情形。因为涉及到ImageView。想保持图片原比例不便使用LinearLayout的weight属性。

解决的方法:

1.外层套一个RelativeLayout

2.三个控件分别装进3个LinearLayout中。假如id分别为leftlayout,midlayout,rightlayout

leftlayout属性:android:layout_width="wrap_content"

rightlayout属性:android:layout_width="wrap_content"

midlayout属性: android:layout_width="match_parent"

android:layout_toLeftOf="@+id/rightlayout"

android:layout_toRightOf="@+id/leftlayout"

这样就能够达到两端控件分别左右对齐。中部控件填充剩余空间的效果。

上图效果的布局图示:

上图效果的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="34dp"
    android:background="#FFFFFF"
    android:orientation="horizontal" >

      <LinearLayout
    	android:id="@+id/choosetags_listview_item_leftlayout"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:layout_alignParentLeft="true">

   		 <ImageView
   		     android:id="@+id/taglistview_item_ico"
   		     android:layout_width="30dp"
   		     android:layout_height="30dp"
   		     android:layout_gravity="center_vertical"
   		     android:layout_marginBottom="2dp"
   		     android:layout_marginLeft="5dp"
   		     android:layout_marginRight="5dp"
   		     android:layout_marginTop="2dp"
   		     android:contentDescription="@string/app_name"
   		     android:src="@drawable/tag_ico_movie" />

		</LinearLayout>

		<LinearLayout
		    android:id="@+id/choosetags_listview_item_midlayout"
		    android:layout_width="match_parent"
		    android:layout_height="fill_parent"
		    android:layout_centerVertical="true"
		    android:layout_toLeftOf="@+id/choosetags_listview_item_rightlayout"
		    android:layout_toRightOf="@+id/choosetags_listview_item_leftlayout" >

			<com.coolletter.util.MarqueeTextView
			    android:id="@+id/taglistview_item_name"
			    android:layout_width="fill_parent"
			    android:layout_height="fill_parent"
			    android:layout_gravity="center_vertical"
			    android:checkMark="?android:attr/textCheckMark"
			    android:ellipsize="marquee"
			    android:focusableInTouchMode="true"
			    android:gravity="center_vertical"
			    android:marqueeRepeatLimit="marquee_forever"
			    android:paddingEnd="5dp"
			    android:paddingStart="5dp"
			    android:scrollHorizontally="true"
			    android:singleLine="true"
			    android:textColor="#000000"
			    android:textSize="15dp" />

	    </LinearLayout> 

		<LinearLayout
		    android:id="@+id/choosetags_listview_item_rightlayout"
		    android:layout_width="wrap_content"
		    android:layout_height="wrap_content"
		    android:layout_alignParentRight="true"
		    android:layout_centerVertical="true" >

		    <TextView
		        android:id="@+id/taglistview_item_newnum"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:layout_gravity="center_vertical"
		        android:text="253"
		        android:textColor="#000000" >

			</TextView>   

		</LinearLayout>

</RelativeLayout>

情形二:垂直布局

图示:

垂直布局方案:

1.外层放一个RealtiveLayout

2.内部三个控件分别装进3个LinearLayout中,id设为topayout。midlayout,bottomlayout

toplayout属性:android:layout_width="wrap_content"

bottomlayout属性:android:layout_width="wrap_content"

midlayout属性: android:layout_width="match_parent"

android:layout_below="@+id/toplayout"

android:layout_above="@+id/bottomlayout"

布局:

代码:

<?xml version="1.0" encoding="utf-8"?

>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#DCDCDC"
    android:orientation="vertical" >

    <LinearLayout
    	android:id="@+id/letter_newtext_toplayout"
    	android:layout_width="fill_parent"
    	android:layout_height="45dp"
    	android:layout_alignParentTop="true"
    	android:background="#FFFAF0"
    	android:orientation="horizontal" >

    		    <TextView
    		        android:id="@+id/letter_newtext_cancel"
    		        android:layout_width="wrap_content"
    		        android:layout_height="wrap_content"
    		        android:layout_gravity="center_vertical"
    		        android:layout_marginBottom="5dp"
    		        android:layout_marginTop="5dp"
    		        android:layout_weight="1"
    		        android:gravity="center_horizontal"
    		        android:text="Cancel"
    		        android:textColor="#000000"
    		        android:textSize="16dp" />

    			<TextView
    			    android:id="@+id/letter_newtext_submit"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:layout_gravity="center_vertical"
    			    android:layout_marginBottom="5dp"
    			    android:layout_marginTop="5dp"
    			    android:layout_weight="1"
    			    android:gravity="center_horizontal"
    			    android:text="Submit"
    			    android:textColor="#000000"
    			    android:textSize="16dp" />

    </LinearLayout>

      <LinearLayout
          android:id="@+id/letter_newtext_mainlayout"
          android:layout_width="fill_parent"
          android:layout_height="match_parent"
          android:layout_above="@+id/letter_newtext_deliver"
          android:layout_below="@+id/letter_newtext_toplayout"
          android:orientation="vertical"
         >

    		<EditText
    		    android:id="@+id/letter_newtext_content"
    		    android:layout_width="fill_parent"
    		    android:layout_height="fill_parent"
    		    android:layout_marginBottom="5dp"
    		    android:layout_marginLeft="5dp"
    		    android:layout_marginRight="5dp"
    		    android:layout_marginTop="5dp"
    		    android:background="@drawable/corners_bg"
    		    android:gravity="top"
    		    android:inputType="textMultiLine"
    		    android:textColor="#000000" />

		</LinearLayout>

       	<View
       	    android:id="@+id/letter_newtext_deliver"
       	    android:layout_above="@+id/letter_newtext__bottomlayout"
            android:layout_width="fill_parent"
            android:layout_height="0.5dp"
            android:background="#00BFFF" />

		<LinearLayout
		    android:id="@+id/letter_newtext__bottomlayout"
		    android:layout_width="fill_parent"
		    android:layout_height="wrap_content"
		    android:layout_alignParentBottom="true"
		    android:layout_marginBottom="5dp"
		    android:layout_marginTop="5dp"
		    android:gravity="bottom"
		    android:orientation="horizontal" >

                <ImageView
                    android:id="@+id/letter_newtext_ico_tag"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_marginLeft="5dp"
                    android:background="@drawable/letter_new_ico_maintag" />

                <TextView
                    android:id="@+id/letter_newtext_tag_content"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp"
                    android:textColor="#000000"
                    android:textSize="15dp" />

       </LinearLayout>

</RelativeLayout>

当这样的情况中间的控件是一个ScrollView时,也使用这样的办法。

就能实现ScrollView充满上下两个控件中间的区域。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

【Android开发日记】妙用 RelativeLayout 实现3
段布局

时间: 2024-10-11 11:38:35

【Android开发日记】妙用 RelativeLayout 实现3 段布局的相关文章

【Android开发日记】妙用 RelativeLayout 实现3段式布局

在设计的过程中我们一定经常会遇到这样的需求: 一行内放3个控件,左边控件左对齐,右面控件右对齐,中间控件来填充剩下的空间. 或者一列内放3个控件,上面的与顶部对齐,下面的沉在最底部,中间控件是弹性的,充满剩余空间. 情况一:水平布局 图示: 这是第一种情形.由于涉及到ImageView,想保持图片原比例不便使用LinearLayout的weight属性. 解决办法: 1.外层套一个RelativeLayout 2.三个控件分别装进3个LinearLayout中,假如id分别为leftlayout

【Android开发日记】Popupwindow 完美demo

Popupwindow 完美demo实现 图示: 关键代码说明: 1.弹出popupwindow,背景变暗 ColorDrawable cd = new ColorDrawable(0x000000); popuWindow1.setBackgroundDrawable(cd); WindowManager.LayoutParams lp=getWindow().getAttributes(); lp.alpha = 0.4f; getWindow().setAttributes(lp); 2.

【家庭记账本】Android开发日记(二)

昨天对Button组件进行了一定的学习,实际上学习的东西相当少,今天加大了学习量,主要学习了android的六个布局:RelativeLayout[相对布局],LinearLayout[线性布局],GridLayout[网格布局],FrameLayout[帆布局],TableLayout[表格布局],AbsoluteLayout[绝对布局]. 其中我重点测试了相对布局和线性布局.在编写过程中,我按照网上的实例进行测试,起初直接写上RelativeLayout或LinearLayout报错,后来找

【Android开发日记】初次探秘Android Service!Service开机启动+重力感应+弹窗+保持运行

前言: 最近在写一个小程序,需求是手机摇一摇就弹窗出来.第一次使用了Service,学习了两天,实现了Service弹窗,开机启动,Activity启动和销毁.满足了自己的需求.现记录学习心得.希望能给你带来一些帮助. 1.Service创建:重写4个方法 onBind():返回一个IBinder对象,这个对象可以使应用程序与Service通信.如果用startService.stopService启动和关闭Service的话,Service和访问者是无法通信交换数据的.onBind()返回值设

Android开发日记(四)

在服务器端数据库新建一个表ad 在DataInfo.edxm模型中点击从数据库更新模型,发布. 就新建了一个实体ad 然后新建cs文件 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 using Newtonsoft.Json; 7 using Newtonsoft.Json.Linq; 8 9 namesp

vio微博(Android)开发日记之SSO授权篇

在网上找了很久也没有发现比较好的android微博客户端可以提供学习-有的也是非常老旧了-摩擦摩擦-完全跟不上时代的步伐.一怒之下,vio微博应运而生. duang- 言归正传-新浪微博目前所采用的授权机制,已经完全抛弃了OAuth1.0 ,转向OAuth2.0.那么怎么进行OAuth2.0的认证呢? 首先,我们了解一下OAuth2.0: OAuth2.0是一个全新的协议,对之前的版本不进行向后兼容,但OAuth2.0的整体架构与之前的OAuth架构却是相同的. OAuth2.0的认证流程: (

【Android开发日记】第一个任务Android Service!Service靴+重力感应器+弹出窗口+保持执行

前言: 近期在写一个小程序,需求是手机摇一摇就弹窗出来.第一次使用了Service,学习了两天,实现了Service弹窗,开机启动,Service启动和销毁,Service保持一直执行. 满足了自己的需求.现记录学习心得. 希望能给你带来一些帮助. 1.Service创建:重写4个方法 onBind():返回一个IBinder对象,这个对象能够使应用程序与Service通信.假设用startService.stopService启动和关闭Service的话.Service和訪问者是无法通信交换数

Android开发日记(一)

实现点击一个图片按钮跳转到一个动作ImageViewSchoolCard = (ImageView) view.findViewById(R.id.ImageViewLostThings); ImageViewSchoolCard.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ Intent intent = new Intent(); // intent.putExtra("ind

Android开发学习之基于相机扫描二维码、条形码等

蛰伏半月有余,一直在准备期末考试,期间抽空研究了一些Android的源代码,现在我就把在这其中的一些收获分享给大家. 今天想分享给大家的是二维码扫描.说起二维码,大家一定不会陌生,尤其是微信火了以后,在我们的生活中几乎随处都可以看到二维码的影 子.相关科技媒体甚至把二维码当成是未来移动互联网的入口,因此研究二维码的相关技术就显得意义非凡.目前在移动开发领域,使用最为广泛的二 维码库有两个,分别是ZXing和ZBar,其中ZXing在Android开发中较为常见,而ZBar则在IOS开发中较为常见