Android 开发之旅-view的几种布局方式及实践

合集下载

view的绘制流程

view的绘制流程

view的绘制流程View是Android中最基本的UI组件之一,它负责绘制UI界面并响应用户的交互操作。

View的绘制流程是Android开发中非常重要的一个知识点,下面我们来详细了解一下。

1.测量阶段在View的绘制流程中,首先进行的是测量阶段。

在这个阶段中,系统会根据View的布局参数和父容器的尺寸来计算出View的测量宽度和测量高度。

这个过程是通过调用View的measure()方法来实现的。

2.布局阶段在测量阶段完成后,接下来进行的是布局阶段。

在这个阶段中,系统会根据View的测量宽度和测量高度以及布局参数来确定View在父容器中的位置和大小。

这个过程是通过调用View的layout()方法来实现的。

3.绘制阶段在布局阶段完成后,接下来进行的是绘制阶段。

在这个阶段中,系统会根据View的位置和大小以及其他属性来绘制View的内容。

这个过程是通过调用View的draw()方法来实现的。

4.重绘阶段在View的绘制流程中,如果View的内容发生了变化,那么系统会触发重绘阶段。

在这个阶段中,系统会重新调用View的measure()、layout()和draw()方法来重新计算View的位置和大小以及绘制View 的内容。

总结:View的绘制流程是一个非常重要的知识点,它涉及到Android UI的核心原理。

了解View的绘制流程可以帮助我们更好地理解Android UI的工作原理,从而更好地进行UI开发。

同时,我们还需要注意,View的绘制流程是一个非常复杂的过程,需要我们在开发中仔细思考和调试,才能保证UI的质量和性能。

Android开发——View绘制过程源码解析

Android开发——View绘制过程源码解析

Android开发——View绘制过程源码解析0. 前言View的绘制流程从ViewRoot的performTraversals开始,经过measure,layout,draw三个流程,之后就可以在屏幕上看到View了。

其中measure用于测量View的宽和高,layout用于确定View在父容器中放置的位置,draw则用于将View绘制到屏幕上。

1. MeasureSpec说到measure那么就不得不提MeasureSpec,一旦确定了MeasureSpec,在onMeasure()中就可以确定View的宽高。

MeasureSpec的值由SpecSize(测量值)和SpecMode(测量模式)共同组成。

它是由布局参数和父容器的测量属性一起决定的。

其中测量模式一共有三种类型:(1)EXACTL Y:表示设置了精确的值,一般当childView设置其宽高为精确值、match_parent (同时父容器也是这种模式)的情况。

(2)A T_MOST:表示子布局被限制在一个最大值内,一般当childView设置其宽高为wrap_content、match_parent(同时父容器也是这种模式)的情况。

(3)UNSPECIFIED:表示View可以设置成任意的大小,没有任何限制。

这种情况比较少见。

2. MeasureSpec的生成过程2.1 顶级View的MeasureSpec[java] view plain copy// desiredWindowWidth和desiredWindowHeight为屏幕尺寸// lp.width和lp.height都等于MA TCH_PARENTchildWidthMeasureSpec = getRootMeasureSpec(desiredWindowWidth, lp.width); childHeightMeasureSpec = getRootMeasureSpec(desiredWindowHeight, lp.height);//…private int getRootMeasureSpec(int windowSize, int rootDimension) {int measureSpec;switch (rootDimension) {case youtParams.MATCH_PARENT:measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.EXACTL Y);break;case youtParams.WRAP_CONTENT:measureSpec = MeasureSpec.makeMeasureSpec(windowSize, MeasureSpec.A T_MOST);break;default:measureSpec = MeasureSpec.makeMeasureSpec(rootDimension, MeasureSpec.EXACTL Y);break;}return measureSpec;}从源码中可以看出,这里使用了MeasureSpec.makeMeasureSpec()方法来组装一个MeasureSpec,rootDimension参数等于MA TCH_PARENT,MeasureSpec的SpecMode为EXACTLY。

androidactivityview原理

androidactivityview原理

androidactivityview原理Android的Activity是一种可以包含用户界面的组件,用于与用户交互。

Activity主要负责管理用户界面和协调不同组件之间的交互。

在Android中,Activity的展示是通过View来实现的,而ActivityView就是Activity中关联的View对象。

ActivityView原理主要涉及以下几个方面:1. View的渲染:ActivityView在Activity的生命周期中负责绘制Activity的用户界面,并将其呈现给用户。

View的渲染主要通过View的绘制流程实现,包括测量、布局和绘制,最终将视图内容绘制到屏幕上。

2. Activity生命周期与View的关联:Activity与View之间存在一定的关联关系。

在Activity的生命周期中,当Activity处于可见状态时,Activity会通过调用setContentView方法来设置视图内容,即关联一个View对象。

当Activity被销毁时,View的相关资源也会被释放。

3. View的事件处理:ActivityView可以处理用户的交互事件,例如点击、滑动等。

Android系统通过触摸事件的分发机制将用户的触摸事件传递给具体的View,然后调用View的事件处理方法来响应用户的操作。

4. View的布局管理:ActivityView在布局中可以包含其他View对象,这些View对象形成了一个层次结构,用于展示复杂的用户界面。

Android提供了多种布局管理器,例如线性布局、相对布局、帧布局等,用于帮助开发者灵活地组织和管理View的位置和大小。

5. View的数据绑定:ActivityView可以通过数据绑定来显示和更新数据。

Android的数据绑定库可以将数据和视图进行绑定,当数据发生变化时,视图可以自动更新。

这可以方便开发者在ActivityView中展示动态数据。

view设计方法

view设计方法

view设计方法
View设计方法指的是用于设计并实现视图(View)的一系列方法和步骤。

以下是其中的一些常见的方法:
1. 确定需求和目标:在设计View之前,需要确定所要实现的功能和目标。

2. 分析数据和UI要素:通过分析输入数据、UI要素等来理解数据和UI显示的关系。

3. 分析流程和结构:对UI设计流程和界面结构进行分析,以清晰地理解视图中各个组件的关系及功能。

4. 界面设计:通过软件工具或手绘来进行界面设计,这包括颜色、字体、图标、排版及组件的位置等。

5. 布局设计:根据组件大小、位置及运动的方向来设计界面布局,以达到最佳可视效果。

6. 界面堆栈管理:管理在View中的各个界面的层级关系和相关联的逻辑关系。

7. 风格和样式定义:根据公司或客户需求来定义Logo、图标等的风格和样式。

8. 组件定制和重用:根据需求设计出组件库,并对其进行定制和重用,以确保在各个View设计上的统一性。

9. 功能和性能测试:对设计的View进行功能和性能测试,以确保其稳定运行和满足用户需求。

以上是View设计方法的一些常见步骤和方法,但实际的View设计流程可以因UI要素、开发技术和功能需求等因素而有所不同。

view 的绘制流程

view 的绘制流程

view 的绘制流程View 是 Android 开发中的一个重要概念,它负责用户界面的绘制和交互。

本文将详细介绍 View 的绘制流程,帮助读者更好地理解和使用 View。

一、View 的绘制流程概述在 Android 应用程序中,View 的绘制流程主要分为三个阶段:测量(Measure)、布局(Layout)和绘制(Draw)。

下面将详细介绍每个阶段的具体流程。

二、测量阶段(Measure)1. 测量阶段的入口是 View 的 measure() 方法。

在该方法中,View 会根据自身的布局参数(LayoutParams)来确定自身的宽度和高度。

2. 在 measure() 方法中,View 会先通过 getMeasuredWidth() 和getMeasuredHeight() 方法获取自身的宽度和高度。

如果宽度和高度都大于0,则说明该 View 已经完成了测量,测量流程结束。

否则,继续进行测量。

3. 如果View 的宽度或高度为0,则需要根据测量模式(MeasureSpec)来确定其测量值。

MeasureSpec 是一个由测量模式和测量值组成的 32 位整数,其中测量模式占高 2 位,测量值占低30 位。

4. 在确定测量值之前,测量模式会被解析为三种模式:EXACTLY、AT_MOST 和 UNSPECIFIED。

EXACTLY 表示精确的尺寸,AT_MOST 表示最大尺寸,UNSPECIFIED 表示不受限制的尺寸。

5. 根据测量模式的不同,View 的测量值也会相应地发生变化。

如果测量模式为 EXACTLY,则测量值就是精确的尺寸;如果测量模式为AT_MOST,则测量值不能超过最大尺寸;如果测量模式为UNSPECIFIED,则测量值可以任意大小。

6. 测量值确定后,会通过 setMeasuredDimension() 方法将测量值保存起来,供后续的布局和绘制使用。

三、布局阶段(Layout)1. 布局阶段的入口是 View 的 layout() 方法。

Android布局方式总结

Android布局方式总结

Android布局⽅式总结Android的布局分别是:线性布局LinearLayout、相对布局RelativeLayout、帧布局FrameLayout、⽹格布局GridLayout、约束布局ConstraintLayout、百分⽐布局PercentLayout、表格布局TableLayout、绝对布局AbsoluteLayout。

其中,表格布局是线性布局的⼦类。

在⼿机程序设计中,绝对布局和框架布局基本上不⽤,⽤得相对较多的是线性布局和相对布局。

1.布局管理器类图2.布局管理器⾥⾯既可以添加多个布局管理器⼜可以添加多个控件,⽽控件⾥⾯不能在添加布局或控件了。

3.各个布局的特点线性布局:开发中使⽤最多,具有垂直⽅向与⽔平⽅向的布局⽅式相对布局:最灵活的⼀种布局⽅式,可以让⼦控件相对于兄弟控件或⽗控件进⾏布局,可以设置⼦控件相对于兄弟控件或⽗控件进⾏上下左右对齐。

RelativeLayout能替换⼀些嵌套视图,当我们⽤LinearLayout来实现⼀个简单的布局但⼜使⽤了过多的嵌套时,就可以考虑使⽤RelativeLayout重新布局。

相对布局就是⼀定要加Id才能管理。

帧布局:⽤于⽐较简单的布局,从屏幕左上⾓按照层次堆叠⽅式布局,后⾯的控件覆盖前⾯的控件。

该布局在开发中设计地图经常⽤到,因为是按层次⽅式布局,我们需要实现层⾯显⽰的样式时就可以⽤这种布局⽅式,⽐如我们要实现⼀个类似百度地图的布局,我们移动的标志是在⼀个图层的上⾯。

在普通功能的软件设计中⽤得也不多。

帧布局主要应⽤就是地图和引导页。

⽹格布局:可以取代表格布局,作为android 4.0 后新增的⼀个布局,与前⾯介绍过的TableLayout(表格布局)其实有点⼤同⼩异;不过新增了⼀些东东①跟LinearLayout(线性布局)⼀样,他可以设置容器中组件的对齐⽅式②容器中的组件可以跨多⾏也可以跨多列(相⽐TableLayout直接放组件,占⼀⾏相⽐较)因为是android 4.0新增的,API Level 14,在这个版本以前的sdk都需要导⼊项⽬。

Android应用界面设计的创意思路和实践

Android应用界面设计的创意思路和实践

Android应用界面设计的创意思路和实践一、引言Android应用界面设计是移动应用开发中至关重要的一环,能够直接影响用户体验和用户对应用的印象。

本文将从创意思路和实践两个方面,分享一些关于Android应用界面设计的经验和技巧。

二、创意思路1. 用户调研在设计Android应用界面之前,我们首先要了解目标用户的需求和喜好。

通过用户调研,可以深入了解用户的偏好、习惯以及群体特点,以便在界面设计中更好地迎合用户的需求。

2. 风格选择Android应用的界面设计风格有多种选择,包括扁平化、骨架屏、卡片式等。

我们可以根据应用的定位和用户群体选择适合的风格,以达到良好的用户体验和界面美感。

3. 布局创新创新的布局能够让应用界面显得与众不同。

例如,可以尝试非传统的布局方式,如瀑布流布局、环形布局等,使得应用界面在视觉上更有吸引力和创意。

4. 动画效果适当的动画效果能够为应用界面增添生动感和交互性。

可以运用淡入淡出、缩放、旋转等动画效果,为用户提供良好的交互体验和视觉享受。

三、实践技巧1. 界面简洁在设计Android应用界面时,要追求简洁而不失重要信息。

过于复杂的界面会给用户带来困扰,因此要尽量避免过多的按钮、文字等冗余信息,使得界面清晰明了。

2. 色彩搭配色彩搭配是界面设计中一个非常重要的方面。

要选择适合应用定位和用户情感的色彩搭配,使得界面既美观又能传达正确的情感和氛围。

3. 排版设计合理的排版设计能够提高用户的阅读体验和界面的可读性。

要注意合理的字体大小、行间距、段落划分等,以及合适的标题和副标题的使用,让用户能够快速浏览和理解界面内容。

4. 图标设计图标是Android应用界面设计中不可或缺的一部分,可以用来增加界面的可识别性和美感。

要选择直观易懂的图标,避免过于复杂或模糊的设计,以免影响用户的使用体验。

5. 响应速度用户对于应用的响应速度有很高的期望,因此在界面设计中,要确保应用的操作流畅、反应迅速,以提供良好的用户体验。

源码解析Android中View的layout布局过程

源码解析Android中View的layout布局过程
if (li != null && li.mOnLayoutChangeListeners != null) { //首 先对mOnLayoutChangeListeners中 的 事 件监听 器进行 拷贝
ArrayList<OnLayoutChangeListener> listenersCopy = (ArrayList<OnLayoutChangeListener>)li.mOnLayoutChangeListeners.clone();
对View进行布局的目的是计算 出View的尺寸以及在其父控件中的位置,具体来说就 是计算 出View的 四条边界 分别到其父控件左边界、上 边界的距离, 即计算View的left、top、right、bottom的值。
layout
layout()方法是View布局的入口,其源码如下所示:
public void layout(int l, int t, int r, int b) { //成员 变量mPrivateFlags3中的一些比特位存储着和layout相关的 信 息
//如 果isLayoutModeOptical()返 回true, 那么就会执行setOpticalFrame()方 法 , //否则会执行setFrame()方 法 。并且setOpticalFrame()内部会调用setFrame(), //所 以无论如 何 都会执行setFrame()方 法 。 //setFrame()方 法会 将View新 的left、top、right、bottom存储到View的 成员 变量 中 //并且 返 回 一个boolean值,如果返回true表 示View的位置或尺寸发生 了变化 , //否则表 示 未发生变化 boolean changed = isLayoutModeOptical(mParent) ?

Android培训之五大布局讲解

Android培训之五大布局讲解

Android培训之五大布局讲解Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。

组件按照布局的要求依次排列,就组成了用户所看见的界面。

Android的五大布局分别是LinearLayout(线性布局)、FrameLayout(单帧布局)、RelativeLayout(相对布局)、AbsoluteLayout(绝对布局)和TableLayout(表格布局)。

LinearLayout:LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。

如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。

如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。

LinearLayout中的子元素属性android:layout_weight生效,它用于描述该子元素在剩余空间中占有的大小比例。

加入一行只有一个文本框,那么它的默认值就为0,如果一行中有两个等长的文本框,那么他们的android:layout_weight值可以是同为1。

如果一行中有两个不等长的文本框,那么他们的android:layout_weight值分别为1和2,那么第一个文本框将占据剩余空间的三分之二,第二个文本框将占据剩余空间中的三分之一。

FrameLayout:FrameLayout是五大布局中最简单的一个布局,在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。

显示效果如下,第一个TextView被第二个TextView完全遮挡,第三个TextView遮挡了第二个TextView的部分位置。

android 常见view的用法

android 常见view的用法

android 常见view的用法常见的Android View的用法有:1. TextView(文本视图):用于显示文本内容,可以设置字体、颜色、字体大小等属性。

2. ImageView(图片视图):用于显示图片,可以设置图片资源、缩放类型、背景等属性。

3. Button(按钮):用于触发点击事件,可以设置文本、背景、点击效果等属性。

4. EditText(编辑文本视图):用于输入文本内容,可以设置提示文本、输入类型、最大长度等属性。

5. RadioButton(单选按钮):用于在多个选项中选择一个,可以设置文本、选中状态等属性。

6. CheckBox(复选框):用于在多个选项中选择多个,可以设置文本、选中状态等属性。

7. ProgressBar(进度条):用于显示操作进度,可以设置进度值、样式、颜色等属性。

8. SeekBar(滑动条):用于选择数值范围,可以设置最小值、最大值、当前值等属性。

9. ListView(列表视图):用于显示大量数据列表,可以自定义每一项的布局和交互。

10. GridView(网格视图):用于显示数据的表格布局,可以自定义每个单元格的布局和交互。

11. RecyclerView(可复用列表视图):Android的推荐使用的列表视图,功能更强大、性能更优。

12. WebView(网页视图):用于显示网页内容,可以加载本地或远程网页。

13. ScrollView(滚动视图):用于包裹超出屏幕大小的内容,并通过滑动来查看全部内容。

14. LinearLayout(线性布局):用于按照水平或垂直方向排列子视图。

15. RelativeLayout(相对布局):用于按照相对位置摆放子视图,灵活性更高。

16. FrameLayout(帧布局):用于叠加子视图,通常用于显示单个子视图或切换视图。

这些是Android中常见的View,开发者可以根据实际需求选择合适的View并设置相应的属性,实现各种不同的界面效果。

如何使用Android Studio进行布局设计和界面编写(三)

如何使用Android Studio进行布局设计和界面编写(三)

使用Android Studio进行布局设计和界面编写是开发Android应用的重要步骤之一。

Android Studio是一款强大的开发工具,它提供了丰富的布局组件和功能,方便开发者快速设计并实现界面。

一、了解布局管理器在Android Studio中,布局管理器负责控制视图组件在界面中的排列和布局。

常见的布局管理器包括线性布局、相对布局、网格布局等。

了解布局管理器的特点和使用方式对于实现所需的界面效果非常重要。

二、使用线性布局线性布局是最基本且常用的布局管理器之一。

它可以实现控件的水平或垂直排列,方便快速布局。

在Android Studio中,可以通过拖拽组件来进行线性布局的设计,也可以通过XML代码手动实现。

三、掌握相对布局相对布局相对于线性布局更加灵活和强大。

它可以使组件按照相对关系进行布局,使界面具有更好的适应性。

在相对布局中,我们可以使用多个属性来设置组件之间的相对位置和对齐方式,如alignParentTop、alignParentBottom等。

四、利用网格布局网格布局适用于需要以网格形式排列组件的场景。

通过设置行数和列数,可以实现组件在界面上的均匀分布。

在Android Studio中,可以使用网格布局来创建类似九宫格的布局,或者展示列表等。

五、使用约束布局约束布局是Android Studio提供的一种新型布局管理器,它通过定义组件之间的约束关系来进行布局。

约束布局可以根据屏幕的大小和方向,灵活地调整组件的位置和大小。

通过在编辑器中拖拉组件边界,可以非常直观地设置约束关系。

六、合理使用布局组件Android Studio提供了丰富的布局组件,如按钮、文本框、图片等。

在设计界面时,要充分利用这些组件,选择合适的组件来呈现所需的界面效果。

同时,还可以通过修改组件的属性来进一步调整样式和布局。

七、注意布局的层次和结构设计复杂的界面时,合理的布局层次和结构非常重要。

通过合理的嵌套布局,可以更好地控制组件的位置和大小,提高界面的灵活性和可维护性。

安卓游戏开发教程基础篇-View框架

安卓游戏开发教程基础篇-View框架

游戏开发一直是各个平台上不可或缺的一部分,也是软件开发中最令人感兴趣的部分之一,Android平台也不例外。

如果说基本控件的使用是在一个框架里搭积木的话,游戏开发的框架就像是用画笔在画布上作画。

游戏开发涉及的范围很广,内容十分丰富,本文只对开发所需的基本元素及其操作方法做一些介绍。

View框架既然是要绘画,就要准备好一个架子,铺上画布,然后用画笔作画。

在Android平台中,view框架是最基础也是最常用的架子。

通过下面的小例子,可以看到如何最简单的使用view 框架。

流程非常简单:准备一个继承了view的子类,在上面写一段文字,然后在Activity 中调用。

首先是自定义的view文件,代码如下:public class MyView extends View{public Myview(-Context context){super(context)j //调用父类构造函数)public void onDraw(Canvas canvas){ //自动调用描绘方法Paint mPaint=new Paint();//实例化PaintmPaint.setColor(Color.RED);//定义Paint对象颜色mPaint.setTextSize(28);//定义Paint对象文字大小mPaint.setAntiAlias(true);//开启文字抗锯齿canvas.drawRGB(255,255,255),//Canvas对象描绘背景色canvas.drawText(”Hello World!”,20,120,mPaint);//描绘文字).}代码说明:口要使用view框架,需要自定义一个类来继承android.view.View类,并且调用父类的构造函数。

口白定义的类要重写父类的onDrawO方法,将描绘内容的代码写在里面。

口onDraw0方法带有一个android.graphics.Canvas类的对象做参数。

分享五种Android常用布局方式

分享五种Android常用布局方式

分享五种Android常⽤布局⽅式现在Android⾮常疯狂,所以⽹上关于Android学习的资料如⾬后春笋般冒起来,像这些基础的东西更是多如⽜⽑,我会把⽤过的东西碰到的困难和怎么解决的记录下来,⼀来可以供⾃⼰复习万⼀以后⼜碰到类似的问题就可以直接拿来看下。

⼆来可以给初学者⼀点⼩⼩的帮助。

Android布局是应⽤界⾯开发的重要⼀环,在Android中,共有五种布局⽅式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)⼀、FrameLayout这个布局可以看成是墙脚堆东西,有⼀个四⽅的矩形的左上⾓墙脚,我们放了第⼀个东西,要再放⼀个,那就在放在原来放的位置的上⾯,这样依次的放,会盖住原来的东西。

这个布局⽐较简单,也只能放⼀点⽐较简单的东西。

⼆、LinearLayout线性布局,这个东西,从外框上可以理解为⼀个div,他⾸先是⼀个⼀个从上往下罗列在屏幕上。

每⼀个LinearLayout⾥⾯⼜可分为垂直布局(android:orientation="vertical")和⽔平布局(android:orientation="horizontal")。

当垂直布局时,每⼀⾏就只有⼀个元素,多个元素依次垂直往下;⽔平布局时,只有⼀⾏,每⼀个元素依次向右排列。

linearLayout中有⼀个重要的属性 android:layout_weight="1",这个weight在垂直布局时,代表⾏距;⽔平的时候代表列宽;weight值越⼤就越⼤。

三、AbsoluteLayout绝对布局犹如div指定了absolute属性,⽤X,Y坐标来指定元素的位置android:layout_x="20px"android:layout_y="12px" 这种布局⽅式也⽐较简单,但是在垂直随便切换时,往往会出问题,⽽且多个元素的时候,计算⽐较⿇烦。

Android艺术开发探索第四章——View的工作原理(上)

Android艺术开发探索第四章——View的工作原理(上)

Android艺术开发探索第四章——View的工作原理(上)一.初识ViewRoot和DecorView在正式介绍View的三大流程之前,我们还是要了解一些基本的概念,所以本章会说下ViewRoot和DecorViewViewRoot对应于ViewRootImpl类,他是连接WindowManager和DecorView的纽带,View 的三大流程都是通过ViewRoot来完成的,在ActivityThread中,当Activity被创建完毕后,会将DecorView添加到Window值班费,同时会创建ViewRootImpl对象,并将ViewRootImpl 对象和DecorView建立联系,这个可以参照官网:root = new ViewRootImpl(view.getContext(),display);root.setView(view,wparams,panelParentView);View的绘制流程从ViewRoot的perfromTraversals方法开始,他警告measure,layout和draw 三个过程才能将View画出来,,其中measure测量,layout确定view在容器的位置,draw 开始绘制在屏幕上,针对perfromTraversals的大致流程,可以看图图中的perfromTraversals会依次调用perfromMeasure,perfromLayout,perfromDraw,他们分别完成顶级View的measure,layout和draw这三大流程,其中在perfromMeasure中会调用measure方法,在measure方法中又调用onMeasure,这个时候measure流程就从父容器传递到子元素了,这样就完成了一次measure过程,接着子元素会重复父容器的measure过程,如此反复的完成了整个View树的遍历,同理,其他两个也是如此,唯一有点区别的是perfromDraw的传递过程是在draw反复中通过dispatchDraw来实现的,不过这并没有什么本质的区别measure過程决定了View的宽高,Measure完成之后可以通过getMeasureWidth和getMeasureHeight来获取View测量后的高宽,在所有的情况下塔几乎都是等于最终的宽高,但是特殊情况除外,这点以后说,layout过程决定了view的四个顶点的坐标和实际View的宽高,完成之后,通过getTop,getLeft,getRight,getBottom获得,,Draw决定了View的显示,只有draw方法完成了之后,view才会显示在屏幕上如下图,顶级View DecorView,一般情况下他内部会包含一个竖直方向的LinearLayout,这里面有上下两部分,上面是标题栏,下面是内容,在Activity中,我们可用通过setContentView 设置布局文件就是放在内容里,而内容栏的id为content,因此我們可以理解为实际上是在setView,那如何得到content呢?你可以ViewGroup content = findviewbyid(android.R.id.content),如何得到我们设置的View呢:content.getChildAt(0),同时,通过源码我们可用知道,DeaorView其实就是一个FrameLayout,View层事件都先经过DecorView,然后传递给View二.理解MeasureSpec为了更好的理解View的测量过程,我们还需要理解MeasureSpec,从名字上看,MeasureSpec 看起来像“测量规格”或者“测量说明书”,不管怎么翻译,他看起来就好像是或多或少的决定了View的测量过程,通过源码可以发现,MeasureSpec的确参与了View的测量过程,读者可能有疑问,MeasureSpec是干什么的呢?MeasureSpec在很大程度上决定了一个View 的尺寸规格,之所以说很大程度上是因为这个过程还收到了父容器的影像,因为父容器影像MeasureSpec的创建过程,在测量过程中,系统会将View的LayoutParams根据父容器所施加的规则转换成对应的MeasureSpec,然后再根据这个measureSpec来测量出View的宽高,MeasureSpec看起来有点复杂,其实他的实现很简单,我们来详细分解一下1.MeasureSpecMeasureSpec代表一个32位int值,高两位代表SpecMode,低30位代表SpecSize,SpecMode 是指测量模式,而SpecSize是指在某个测量模式下的规格大小,下面先看一下,MeasureSpec 内部的一些常量定义,通过这些就不难理解MeasureSpec的工作原理了private static final int MODE_SHIFT = 30;private static final int MODE_MASK = 0x3 << MODE_SHIFT;public static final int UNSPECIFIED = 0 << MODE_SHIFT;public static final int EXACTL Y = 1 << MODE_SHIFT;public static final int AT_MOST = 2 << MODE_SHIFT;public static int makeMeasureSpec(@IntRange(from = 0, to = (1 <<MeasureSpec.MODE_SHIFT) - 1) int size,@MeasureSpecMode int mode) {if (sUseBrokenMakeMeasureSpec) {return size + mode;} else {return (size & ~MODE_MASK) | (mode & MODE_MASK);}}@MeasureSpecModepublic static int getMode(int measureSpec) {//noinspection ResourceTypereturn (measureSpec & MODE_MASK);}public static int getSize(int measureSpec) {return (measureSpec & ~MODE_MASK);}MeasureSpec通过将SpecMode和SpecSize打包成一个int值来避免过多的对象内存分配,为了方便操作,其提供了打包和解包的作用,SpecMode和specSize也是一个int值,一直SpecMode和specSize可以打包成一个MeasureSpec,一个MeasureSpec可以通过解包的形式来得出其原始的SpecMode和SpecSize,需要注意的是这里提到的MeasureSpec是指MeasureSpec所代表的int值,而非MeasureSpec本身。

Android开发view的几种布局方式

Android开发view的几种布局方式

Android开发:view的几种布局方式1、view的布局显示概述:我们知道,在一个Android应用程序中,用户界面通过View和ViewGroup对象构建。

Android中有很多种View和ViewGroup,他们都继承自View类。

View对象是Android平台上表示用户界面的基本单元。

View的布局显示方式直接影响用户界面,View的布局方式是指一组View元素如何布局,准确的说是一个ViewGroup中包含的一些View怎样布局。

ViewGroup类是布局(layout)和视图容器(View container)的基类,此类也定义了youtParams类,它作为布局参数的基类,此类告诉父视图其中的子视图想如何显示。

我们要介绍的View的布局方式的类,都是直接或间接继承自ViewGroup类,如下图所示:其实,所有的布局方式都可以归类为ViewGroup的5个类别,即ViewGroup的5个直接子类。

其它的一些布局都扩展自这5个类。

2、线性布局(Linear Layout)线性布局:是一个ViewGroup以线性方向显示它的子视图(view)元素,即垂直地或水平地。

(android:orientation="vertical/horizontal")Tips:android:layout_height="1"(默认为0)3、相对布局(Relative Layout)相对布局:是一个ViewGroup以相对位置显示它的子视图(view)元素,一个视图可以指定相对于它的兄弟视图的位置或相对于RelativeLayout的特定区域的位置。

相对布局是设计用户界面的有力工具,因为它消除了嵌套视图组。

4、表格布局(Table Layout)表格布局:是一个ViewGroup以表格显示它的子视图(view)元素,即行和列标识一个视图的位置。

其实Android的表格布局跟HTML中的表格布局非常类似,TableRow就像HTML表格的<<CODE>tr>标记。

android程序界面编程与视图(View)组件

android程序界面编程与视图(View)组件

android程序界面编程与视图(View)组件android应用开发一个主要内容就是界面开发。

随着移动设备的不断普及,android应用几乎无处不在,设计到各个领域。

对于用户来说,除了看重一个应用的功能外,图形界面也是最关注的对象。

如果一个应用没有提供友好的图形界面,那么将很难吸引最终的用户;相反,如果为应用程序提供一个友好的图形界面(GUI),那么用户可以轻松的通过手指去点击各种事件爱你,来操作这个应用程序,用户就会感觉到”很爽“。

就像windows系统一样,最初能很快吸引大量用户,就是因为它有丰富的图形界面,才几乎独占整个市场。

可想而知,友好的图形界面是多么的重要。

对于程序员来说,除了要开发出友好的图形界面,还好去思考用什么方式去实现比较好。

android提供了大量功能丰富的UI组件,这些组件功能都具有一定的规律且具有很多相似之处,程序开发人员只需要掌握这些规律,就可以实现出漂亮、友好的图形界面了。

在接下的一段时间里,将会陆续介绍。

今天我们就先介绍一下界面编程与视图组件之间的联系吧!1、视图组件与容器组件在一个activity文件中,我们会看到很多包:[java]view plaincopy1.import android.widget.EditText;2.import android.widget.ImageButton;3.import android.widget.ImageView;4.import android.widget.LinearLayout;5.import android.widget.PopupWindow;6.import android.widget.RadioButton;7.import android.widget.RadioGroup;8.import android.widget.RelativeLayout;9.import android.widget.SeekBar;10.import poundButton.OnCheckedChangeListener;11.import android.widget.SeekBar.OnSeekBarChangeListener;12.import android.widget.TextView;13.import android.widget.Toast;14.import android.widget.ViewSwitcher;android应用的绝大多数UI组件都是放在android.widget包中以及其子包中、android.view包中以及其子包中。

android gridview的用法

android gridview的用法

android gridview的用法Android GridView的用法在Android应用程序开发中,GridView是一个非常有用的组件,用于显示类似表格的数据,并提供了许多自定义选项。

本文将介绍GridView的用法,并逐步讲解如何使用它来创建一个基本的网格布局。

1. 创建一个新的Android项目首先,打开Android Studio并创建一个新的Android项目。

选择一个项目名称和位置,然后选择适当的API级别和设备配置。

2. 准备布局文件在res/layout目录下创建一个新的布局文件,命名为activity_main.xml。

在此文件中,使用GridLayout作为根布局,并添加一些必要的属性。

xml<GridLayoutxmlns:android="android:id="@+id/gridLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:columnCount="3"android:rowCount="3"></GridLayout>在此布局中,我们使用GridLayout作为根布局,并指定了columnCount 和rowCount属性来定义网格的行数和列数。

3. 创建GridView适配器创建一个新的Java类文件,命名为GridAdapter。

在该类中,继承BaseAdapter并实现必要的方法。

javapublic class GridAdapter extends BaseAdapter {private Context context;private List<Integer> data;public GridAdapter(Context context, List<Integer> data) {this.context = context;this.data = data;}@Overridepublic int getCount() {return data.size();}@Overridepublic Integer getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView imageView;if (convertView == null) {imageView = new ImageView(context);imageView.setLayoutParams(newyoutParams(150, 150));imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);} else {imageView = (ImageView) convertView;}imageView.setImageResource(data.get(position));return imageView;}}在此适配器中,我们使用了一个ImageView作为网格中的单个项,通过设置布局参数和缩放模式来自定义它。

Android开发之UI布局篇

Android开发之UI布局篇

Android开发之UI布局篇Android应用的第一个任务就是如何布局用户界面,Android系统提供了多种Layout布局方案,开发者可以根据应用特点的不同酌情选择,下面就逐一介绍每种Layout方案的使用方法和应用场景。

Android 2.2以上版本就自带了一个很好的UI可视化设计器,开发者通过拖拽及每个对象的属性设置就可以完成95%以上UI设计工作,建议选择Android 3.0以上版本界面,这个是目前最接近手机实际效果的可视化界面。

一、Android可视化UI编辑器简介这个设计工具和其他基于客户端软件开发的可视化UI编辑器类似,当打开layout目录下的xml文档时,系统自动打开这个UI编辑器,这个编辑器既支持全文本的编辑方式,也支持图形化的编辑方式,具体功能块如图所示。

屏幕尺寸屏幕方向样式编辑器版本图形化方式编辑文本化方式编辑分类组建可视化效果二、线性布局(LinearLayout)这种布局方式是最常见的一种,顾名思义就是每个组件是按照从前到后或者从上到下的方向逐个排列的,这种布局适合上下,左右对齐的相同数量组件以表格方式布局的情况。

通常采用多重嵌套的方式实现更为灵活的布局方式,即第一层采用纵向排列,第二层采用横向排列等等,这样类似于excel表格设计。

通过编辑器的Outline区域就可以很容易看到一个树形的嵌套关系,单击其中任何一个LinearLayout,然后通过设置其排列方向为横向还是纵向就能够改变位于该layout内的组件的排列方式,再通过设置每个组件的属性(Properties)就能够改变这个组件在这个Layout中的对齐方式。

这个例子对应的xml文档如下:<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:id="@+id/main"android:orientation="vertical"android:background="@drawable/blue"android:layout_height="match_parent"android:layout_width="match_parent"><LinearLayout android:id="@+id/linearLayout1" android:layout_height="wrap_content"android:layout_width="match_parent"><Button android:layout_width="wrap_content" android:text="@string/buttonDisplay"android:id="@+id/buttonDisplay"android:layout_height="wrap_content"></Button><Button android:layout_width="wrap_content" android:text="@string/buttonText"android:id="@+id/buttonText" android:layout_height="wrap_content"></Button><Button android:layout_width="wrap_content" android:id="@+id/buttonSliding"android:layout_height="wrap_content"android:text="@string/buttonSliding"></Button><Button android:layout_height="wrap_content" android:text="@string/buttonBrowser"android:layout_width="wrap_content"android:id="@+id/buttonBrowser"></Button></LinearLayout><LinearLayout android:id="@+id/linearLayout2" android:layout_height="wrap_content"android:layout_width="match_parent"><Button android:layout_width="wrap_content" android:id="@+id/buttonOtherActivity"android:layout_height="wrap_content"android:text="@string/buttonOtherActivity"></Button><Button android:layout_width="wrap_content" android:text="@string/buttonThread"android:id="@+id/buttonThread" android:layout_height="wrap_content"android:background="@layout/weight"></Button><Button android:layout_width="wrap_content" android:id="@+id/buttonClock"android:layout_height="wrap_content" android:text="@string/buttonClock"></Button></LinearLayout><LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent"android:id="@+id/linearLayout3"><Button android:layout_height="wrap_content" android:layout_width="wrap_content"android:id="@+id/buttonListView"android:text="@string/buttonListView"></Button><Button android:layout_width="wrap_content" android:layout_height="wrap_content"android:id="@+id/buttonNotify"android:text="@string/buttonNotify"></Button><Button android:layout_width="wrap_content" android:layout_height="wrap_content"android:id="@+id/buttonGallery"android:text="@string/buttonGallery"></Button><Button android:layout_height="wrap_content" android:layout_width="wrap_content"android:id="@+id/buttonSMS" android:text="@string/buttonSMS"></Button></LinearLayout><LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent"android:id="@+id/linearLayout4"><Button android:layout_height="wrap_content" android:layout_width="wrap_content"android:id="@+id/buttonGoogleApi"android:text="@string/buttonGoogleApi"></Button><Button android:id="@+id/buttonPassometer" android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/buttonPassometer"></Button><Button android:layout_height="wrap_content" android:id="@+id/buttonRecorder"android:layout_width="wrap_content"android:text="@string/buttonRecorder"></Button></LinearLayout></LinearLayout>三、相对关系布局(RelativeLayout)这种布局是针对不同手机屏幕自动适应的一个非常好的布局方式,系统能够根据屏幕的大小自动调整界面各个组件的距离和位置,使得组件的相对位置比较固定,而不至于因为屏幕大小的差异导致界面元素布局混乱。

android开发_ViewGroup(组视图)--五大布局

android开发_ViewGroup(组视图)--五大布局

android开发_ViewGroup(组视图)--五⼤布局view组--ViewGroup(组视图)ViewGroup的作⽤:在view中添加⼦控件。

ViewGroup的5个⼦类,就是五⼤布局:(1) LinearLayout 线性布局(常⽤)(2) RelativeLayout 相对布局(常⽤)(3) FrameLayout 帧布局(4) AbsoluteLayout 绝对布局(5) TableLayout 表格布局1 LinearLayout 线性布局:在该布局下包含的⼦布局列表为横向或纵向排布1.1 LinearLayout 默认是横向布局,即:从左到右布局控件指定布局⽅向: android:orientation=“ ”1 <!-- 指定布局⽅向的属性:orientation,2 属性值:horizontal(横向)3 vertical(纵向)4 -->56 <!--横向布局-->7 <LinearLayout xmlns:android="/apk/res/android"8 android:layout_width="match_parent"9 android:layout_height="match_parent"10 android:orientation="horizontal" >1112 <!--纵向布局-->13 <LinearLayout xmlns:android="/apk/res/android"14 android:layout_width="match_parent"15 android:layout_height="match_parent"16 android:orientation="vertical" >1.2 权重(只有在⼦控件中才有的属性)android:layout_weight=" "例1:没添加权重属性之前:1 <?xml version="1.0" encoding="utf-8"?>23 <!-- 指定布局⽅向的属相为:orientation,属性值:horizontal(横向)或vertical(纵向) -->4 <LinearLayout xmlns:android="/apk/res/android"5 android:layout_width="match_parent"6 android:layout_height="match_parent"7 android:orientation="horizontal" >89 <TextView10 android:id="@+id/textView1"11 android:layout_width="wrap_content"12 android:layout_height="wrap_content"13 android:text="TextView" />1415 <TextView16 android:id="@+id/textView2"17 android:layout_width="wrap_content"18 android:layout_height="wrap_content"19 android:text="TextView" />2021 <TextView22 android:id="@+id/textView3"23 android:layout_width="wrap_content"24 android:layout_height="wrap_content"25 android:text="TextView" />2627 </LinearLayout>添加权重属性 android:layout_weight=" " 之后1 <?xml version="1.0" encoding="utf-8"?>23 <!-- 指定布局⽅向的属相为:orientation,属性值:horizontal(横向)或vertical(纵向) -->4 <LinearLayout xmlns:android="/apk/res/android"5 android:layout_width="match_parent"6 android:layout_height="match_parent"7 android:orientation="horizontal" >89 <TextView10 android:id="@+id/textView1"11 android:layout_width="wrap_content"12 android:layout_height="wrap_content"13 android:layout_weight="1"14 android:text="TextView" />1516 <TextView17 android:id="@+id/textView2"18 android:layout_width="wrap_content"19 android:layout_height="wrap_content"20 android:layout_weight="1"21 android:text="TextView" />2223 <TextView24 android:id="@+id/textView3"25 android:layout_width="wrap_content"26 android:layout_height="wrap_content"27 android:layout_weight="1"28 android:text="TextView" />2930 </LinearLayout>纵向布局同理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android 开发之旅:view的几种布局方式及实践/1943397/3635522010-06-06 14:14:00标签:布局 View 实践移动开发 Android原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。

否则将追究法律责任。

/1943397/363552引言通过前面两篇:1.Android 开发之旅:又见Hello World!2.Android 开发之旅:深入分析布局文件&又是“Hello World!”我们对Android应用程序运行原理及布局文件可谓有了比较深刻的认识和理解,并且用“Hello World!”程序来实践证明了。

在继续深入Android开发之旅之前,有必要解决前两篇中没有介绍的遗留问题:View的几种布局显示方法,以后就不会在针对布局方面做过多的介绍。

View的布局显示方式有下面几种:线性布局(Linear Layout)、相对布局(Relative Layout)、表格布局(Table Layout)、网格视图(Grid View)、标签布局(Tab Layout)、列表视图(List View)、绝对布局(AbsoluteLayout)。

本文虽然是介绍View的布局方式,但不仅仅是这样,其中涉及了很多小的知识点,绝对能给你带来Android大餐!本文的主要内容就是分别介绍以上视图的七种布局显示方式效果及实现,大纲如下:1.1、View布局概述2.2、线性布局(Linear Layout)1. 2.1、Tips:android:layout_weight="1"3.3、相对布局(Relative Layout)4.4、表格布局(Table Layout)5.5、列表视图(List View)1. 5.1、一个小的改进2. 5.2、补充说明6.6、网格视图(Grid View)7.7 、绝对布局()8.8、标签布局(Tab Layout)1、view的布局显示概述通过前面的学习我们知道:在一个Android应用程序中,用户界面通过View和ViewGroup对象构建。

Android中有很多种View和ViewGroup,他们都继承自View类。

View对象是Android平台上表示用户界面的基本单元。

View的布局显示方式直接影响用户界面,View的布局方式是指一组View元素如何布局,准确的说是一个ViewGroup中包含的一些View怎么样布局。

ViewGroup类是布局(layout)和视图容器(View container)的基类,此类也定义了youtParams类,它作为布局参数的基类,此类告诉父视图其中的子视图想如何显示。

例如,XML布局文件中名为layout_something的属性(参加上篇的4.2节)。

我们要介绍的View的布局方式的类,都是直接或间接继承自ViewGroup类,如下图所示:图1、继承自ViewGroup的一些布局类其实,所有的布局方式都可以归类为ViewGroup的5个类别,即ViewGroup的5个直接子类。

其它的一些布局都扩展自这5个类。

下面分小节分别介绍View的七种布局显示方式。

2、线性布局(Linear Layout)线性布局:是一个ViewGroup以线性方向显示它的子视图(view)元素,即垂直地或水平地。

之前我们的Hello World!程序中view的布局方式就是线性布局的,一定不陌生!如下所示res/layour/main.xml:1.<?xml version="1.0"encoding="utf-8"?>2.<LinearLayout xmlns:android="/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent"5.android:orientation="horizontal"><!-- have an eye on ! -->6.<Button android:id="@+id/button1"7.android:layout_width="wrap_content"8.android:layout_height="wrap_content"9.android:text="Hello, I am a Button1"10.android:layout_weight="1"11./>12.<Button android:id="@+id/button2"13.android:layout_width="wrap_content"14.android:layout_height="wrap_content"15.android:text="Hello, I am a Button2"16.android:layout_weight="1"17./>18.<Button android:id="@+id/button3"19.android:layout_width="wrap_content"20.android:layout_height="wrap_content"21.android:text="Hello, I am a Button3"22.android:layout_weight="1"23./>24.<Button android:id="@+id/button4"25.android:layout_width="wrap_content"26.android:layout_height="wrap_content"27.android:text="Hello, I am a Button4"28.android:layout_weight="1"29./>30.<Button android:id="@+id/button5"31.android:layout_width="wrap_content"32.android:layout_height="wrap_content"33.android:text="Hello, I am a Button5"34.android:layout_weight="1"35./>36.</LinearLayout>从上面可以看出根LinearLayout视图组(ViewGroup)包含5个Button,它的子元素是以线性方式(horizontal,水平的)布局,运行效果如下图所示:图2、线性布局(水平或者说是横向)如果你在android:orientation="horizontal"设置为vertical,则是是垂直或者说是纵向的,如下图所示:图3、线性布局(垂直或者说是纵向)2.1、Tips:android:layout_weight="1"这个属性很关键,如果你没有显示设置它,它默认为0。

把上面布局文件(水平显示的那个)中的这个属性都去掉,运行会得出如下结果:图4、layout_weight属性没有了这个属性,我们本来定义的5个Button运行后却只显示了2个Button,为什么呢??"weight"顾名思义是权重的意思,layout_weight 用于给一个线性布局中的诸多视图的重要程度赋值。

所有的视图都有一个layout_weight值,默认为零,意思是需要显示多大的视图就占据多大的屏幕空间。

这就不难解释为什么会造成上面的情况了:Button1~Button5都设置了layout_height和layout_width属性为wrap_content即包住文字内容,他们都没有设置layout_weight 属性,即默认为0.,这样Button1和Button2根据需要的内容占据了整个屏幕,别的就显示不了啦!若赋一个高于零的值,则将父视图中的可用空间分割,分割大小具体取决于每一个视图的layout_weight值以及该值在当前屏幕布局的整体layout_weight值和在其它视图屏幕布局的layout_weight值中所占的比率而定。

举个例子:比如说我们在水平方向上有一个文本标签和两个文本编辑元素。

该文本标签并无指定layout_weight值,所以它将占据需要提供的最少空间。

如果两个文本编辑元素每一个的layout_weight值都设置为1,则两者平分在父视图布局剩余的宽度(因为我们声明这两者的重要度相等)。

如果两个文本编辑元素其中第一个的layout_weight值设置为1,而第二个的设置为2,则剩余空间的三分之二分给第一个,三分之一分给第二个(数值越小,重要度越高)。

3、相对布局(Relative Layout)相对布局:是一个ViewGroup以相对位置显示它的子视图(view)元素,一个视图可以指定相对于它的兄弟视图的位置(例如在给定视图的左边或者下面)或相对于RelativeLayout的特定区域的位置(例如底部对齐,或中间偏左)。

相对布局是设计用户界面的有力工具,因为它消除了嵌套视图组。

如果你发现你使用了多个嵌套的LinearLayout视图组后,你可以考虑使用一个RelativeLayout 视图组了。

看下面的res/layour/main.xml:1.<?xml version="1.0"encoding="utf-8"?>2.<RelativeLayout xmlns:android="/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent">5.<TextView6.android:id="@+id/label"7.android:layout_width="fill_parent"8.android:layout_height="wrap_content"9.android:text="Type here:"/>10.<EditText11.android:id="@+id/entry"12.android:layout_width="fill_parent"13.android:layout_height="wrap_content"14.android:background="@android:drawable/editbox_background"15.android:layout_below="@id/label"/><!-- have an eye on ! -->16.<Button17.android:id="@+id/ok"18.android:layout_width="wrap_content"19.android:layout_height="wrap_content"20.android:layout_below="@id/entry"<!-- have an eye on ! -->21.android:layout_alignParentRight="true"<!-- have an eye on ! -->22.android:layout_marginLeft="10dip"23.android:text="OK"/>24.<Button25.android:layout_width="wrap_content"26.android:layout_height="wrap_content"27.android:layout_toLeftOf="@id/ok"<!-- have an eye on ! -->28.android:layout_alignTop="@id/ok"<!-- have an eye on ! -->29.android:text="Cancel"/>30.</RelativeLayout>从上面的布局文件我们知道,RelativeLayout视图组包含一个TextView、一个EditView、两个Button,注意标记了<!-- have an ey e on ! -->的属性,在使用相对布局方式中就是使用这些类似的属性来定位视图到你想要的位置,它们的值是你参照的视图的id。

相关文档
最新文档