`
hklongshao
  • 浏览: 73677 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

关于RelativeLayout的一些看法,欢迎拍砖。

阅读更多

如需转载请著名

作者:倚风听雪         来源:http://hklongshao.iteye.com



首先,交代情况,以前很少用RelativeLayout,但是这次项目用到了,就拿来用,发现这东西太灵活了。很容易给人造成一些错误。

下面谈谈听雪的看法。

引用

From Tutorials:

If you find yourself using several nested LinearLayout groups, you may be able toreplace them with a single RelativeLayout


以上来自Tutorials,听雪理解的观点是,当有过个ViewGroup嵌套的时候,再去考虑用RelativeLayout,听雪觉得既然官方这么写,很程度是因为,RelativeLayout太灵活了,它的灵活性给我们对UI的控制多少回造成一定影响。

曾经有人跟听雪说过,RelativeLayout跟FrameLayout有一些相似,给人的感觉是分层的。有层的这个概念。
听雪觉得不是这样的,是没有层的概念的。从官方的解释上可以看出这东西就是可以设置相对布局的一个布局而已。没有层的概念。

先上段代码,更直观的看看。

<?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="#CCFFFF">
	<LinearLayout
		android:id="@+id/linearLayout"
		android:layout_width="fill_parent"
		android:layout_height="200dp"
		android:background="#32000033"
		android:orientation="vertical">
		<Button
			android:id="@+id/button1"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:background="#FF3300"
			android:text="Button" />
		<TextView
			android:id="@+id/textView"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:layout_weight="1"
			android:text="Base"
			android:textColor="#6633FF"
			android:gravity="center" />
		<Button
			android:id="@+id/button2"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:background="#FF3300"
			android:text="Button" />
	</LinearLayout>
	<Button
        android:id="@+id/button3"
		android:layout_width="100dp"
		android:layout_height="50dp"
		android:layout_centerInParent="true"
		android:layout_alignBottom="@id/linearLayout"
		android:text="button" />
</RelativeLayout>


只贴xml,activity没什么东西,就显示一下罢了。


运行效果图



很明显可以看出button3的下边缘是跟lineLayout的下边缘在一条水平线上的。

android:layout_alignBottom="@id/button1"

但是当像上面一样设置的时候,我们可能会是想让button3的下边缘跟button1的下边缘在一个水平线,但是这些写的效果却不是按我们所想的显示,如此设置根本不起作用。



这其中的原因,听雪是这样认为的,首先,linearLayout,Button这些组件都是在android.widget这个包中的。他们是同一级别的。只是说linearLayout是一个ViewGroup可以再包含其他的View而已。不存在其他的优先级关系。

所以,听雪的理解是,如果Button3这个控件要同其他控件产生相互关系的话,首先他们是要位于同一级别的。(此处说的级别不是说组件级别,而是在xml文件里面设置的级别,如:linearLayout和button3是一级的话,那button2,textView,button3既是二级)
只有同一级别的才能设置关系,否则的话设置相互之间的位置关系就不会起作用。

这就是听雪的理解,根本不存在层的概念。

欢迎各位拍砖。
  • 大小: 9.2 KB
  • 大小: 9.4 KB
分享到:
评论
6 楼 无愧衾影 2011-04-22  
作用什么样的控件,要看当前的需求会是什么样的,LinearLayout 和RelativeLayout 的使用只要灵活的使用,效果都是一样的。
5 楼 sniffer123 2011-03-05  
个人觉得,relative layout会造成代码的可读性很差,而且修改起来也很麻烦,你必须一个个组件查看位置,在脑海中构造一副图,才能正确拜访位置。而带来的性能提高却并不明显。在大多数情况,我宁愿用linear layout和table layout
4 楼 hklongshao 2011-03-03  
nciky1984 写道
Relative就是给你一个基准值(上下左右中),然后其他组件根据这个基准值或者已有组件的相对位置来布局

至于好处嘛。。。。可以大量减少组件树的深度(太深会出stackoverflowException)



是的,而且如果Tree 的深度太深的话会在计算view显示大小的时候耗费过多资源,

如果多层layout嵌套的话,最好是直接用RelativeLayout布局来实现,这样可以减少对view大小的二次计算
3 楼 Teok 2011-03-02  
也许这个有点帮助。
fyi: http://stackoverflow.com/questions/2990882/android-and-layouts/2991213#2991213
2 楼 nciky1984 2011-03-02  
Relative就是给你一个基准值(上下左右中),然后其他组件根据这个基准值或者已有组件的相对位置来布局

至于好处嘛。。。。可以大量减少组件树的深度(太深会出stackoverflowException)
1 楼 c2002509 2011-02-28  
View根据xml分层,嵌套  有钻研精神,佩服

相关推荐

    RelativeLayout

    Android 开发入门 对 RelativeLayout的基本属性的讲解和用法 ,更容易的帮你理解和使用

    自定义RelativeLayout圆角图片背景

    在Android开发中,有时我们需要为应用的界面增添一些个性化的元素,比如圆角图片背景。在本教程中,我们将深入探讨如何自定义一个`RelativeLayout`,使其具备圆角图片背景的功能。这涉及到自定义属性、设置圆角以及...

    相对布局之RelativeLayout

    在Android应用开发中,`RelativeLayout`是Android布局体系中非常重要的一种布局方式,它以其灵活性和强大的定位能力受到开发者们的喜爱,特别是在游戏开发、相机应用以及增强现实(AR)项目中,`RelativeLayout`更是...

    android RelativeLayout属性介绍

    介绍一下RelativeLayout的一些属性,针对于刚学习android开发的朋友

    RelativeLayout布局入门实例

    本教程将聚焦于两种常见的布局管理器:LinearLayout和RelativeLayout,它们都是Android SDK中的基础组件,用于组织和定位UI元素。我们将会深入理解这两种布局的工作原理,并通过一个名为"MyInfo2"的实例来探讨它们的...

    Android RelativeLayout 的应用

    ### Android RelativeLayout 的应用 在Android开发中,布局是构建用户界面的基础部分。`RelativeLayout`作为常用的布局之一,提供了相对于其他视图或父容器定位视图的能力。本文将深入探讨`RelativeLayout`的关键...

    RelativeLayout相对布局属性

    ### RelativeLayout相对布局属性详解 在Android开发中,`RelativeLayout`是一种非常常见的布局方式,它允许开发者根据父容器或兄弟视图来定义子视图的位置。本文将详细介绍`RelativeLayout`的各种属性及其使用方法...

    android_relativeLayout_demo

    在Android开发中,布局管理器是构建用户界面的关键部分,其中`RelativeLayout`是常见的布局之一。`RelativeLayout`允许开发者以相对的方式安排各个视图(View)元素,这意味着一个视图的位置可以相对于另一个视图,...

    android LinearLayout与RelativeLayout混用

    在"3.10"这个文件中,可能包含了关于LinearLayout与RelativeLayout混用的示例代码或教程,建议进一步查看以加深理解。在学习和实践过程中,不断尝试和优化布局设计,将有助于提升Android开发技能。

    RelativeLayout demo

    RelativeLayout 上 下 中 左 右布局 demo

    android RelativeLayout

    介绍了android 中 RelativeLayout 下的各种属性。linux下打开.

    Android 相对布局 RelativeLayout 属性

    其中,`RelativeLayout`是一种非常灵活的布局方式,它允许子视图根据其他视图的位置或者相对于其父容器的位置进行定位。通过使用一系列属性,开发者可以轻松地控制各个控件的排列方式,从而创造出复杂且美观的界面...

    RelativeLayout点击效果

    在Android开发中,`RelativeLayout`是一种常见的布局管理器,它允许子视图相对彼此或相对于父视图进行定位。在用户交互中,为`RelativeLayout`添加点击效果是提高用户体验的重要手段之一。本节将深入探讨如何实现`...

    界面布局之相对布局RelativeLayout(代码)

    在Activity_07这个示例文件中,很可能包含了更多关于相对布局的实践案例和代码示例,包括如何处理嵌套的相对布局、响应点击事件、动态添加和删除组件等。通过学习和实践这些例子,开发者可以更深入地理解和掌握相对...

    Android应用源码之12.RelativeLayout.zip

    在Android应用开发中,RelativeLayout是一种常用的布局管理器,它允许我们根据相对位置来安排View组件。这个"Android应用源码之12.RelativeLayout.zip"压缩包很可能是为了教学或研究目的,提供了一个使用...

    android布局属性RelativeLayout详解.

    Android 布局属性 RelativeLayout 详解 Android 布局属性 RelativeLayout 是 Android 中常用的布局方式之一,通过它可以实现复杂的界面布局。下面是 RelativeLayout 的主要属性详解: 第一类:属性值为 true 或 ...

    动态控制RelativeLayout的组件

    在Android开发中,`RelativeLayout`是一种常用的布局管理器,它允许开发者通过相对位置来安排UI组件,而不是基于绝对坐标。这种布局方式对于创建复杂且适应性强的用户界面非常有用。本篇文章将深入探讨如何在运行时...

    android实现自定义RelativeLayout可拖动、缩放、旋转TextView

    在这个类中,我们将重写一些关键方法以实现拖动、缩放和旋转的功能。这个类可能命名为`DraggableScaleRotateRelativeLayout`。 1. **拖动功能**: - 实现拖动的关键在于处理触摸事件。我们需要重写`onTouchEvent()...

    Android-DragView可拖拽的view继承自RelativeLayout

    "Android-DragView可拖拽的view继承自RelativeLayout"是一个专为实现拖拽功能而设计的自定义视图类,它扩展了Android原生的RelativeLayout,使得用户可以自由地在屏幕上拖动视图元素。这一特性在许多应用中都有广泛...

    仿ios自带滑动删除的relativelayout

    这个“仿ios自带滑动删除的relativelayout”就是一个这样的实现,它允许用户通过在条目上滑动来显示一个删除按钮,从而可以方便地删除项目。 首先,我们要理解`RelativeLayout`在Android中的角色。`RelativeLayout`...

Global site tag (gtag.js) - Google Analytics