Android核心技术与实例详解—Android布局管理器
Android组件---四大布局的属性详解
Android组件---四⼤布局的属性详解【声明】欢迎转载,但请保留⽂章原始出处→_→Android常见布局有下⾯⼏种:LinearLayout:线性布局。
所有的控件都是串在⼀条线上的。
RelativeLayout:相对布局。
所有的控件的位置,都是相对于⽗控件的。
FrameLayout:帧布局。
FrameLayout布局中的控件都是⼀层⼀层的。
帧布局每次添加的控件都显⽰在最上⾯,最后显⽰在界⾯上的是最后添加的⼀个控件。
TableLayout:表格布局。
表格布局可以实现的.⼀般可以使⽤线性布局实现。
AbsoluteLayout:绝对布局。
已经是废弃的状态,很少⽤了。
orientation:属性是指定线性布局的排列⽅向。
horizontal ⽔平。
线性布局默认的朝向是⽔平的。
vertical 垂直例如:android:orientation="vertical"gravity:指定当前控件⾥⾯的内容容显⽰位置。
(四⼤layout中均可使⽤)left 左边right 右边top 上边bottom 底边例如:android:gravity="center"gravity中的属性可以组合使⽤。
例如:android:gravity="bottom|right"layout_gravity:指定当前控件在⽗元素的位置。
(只在 LinearLayout 和 FrameLayout 中有效)left 左边right 右边top 上边bottom 底边centercenter_horizontalcenter_vertical例如:android:layout_gravity="center"另外,需要提⽰的是,对于 LinearLayout :当 android:orientation="vertical" 时,只有⽔平⽅向的设置才起作⽤,垂直⽅向的设置不起作⽤。
[精品]02Layout布局管理器
通过如下方法访问指定的UI组件:
findViewById(R.id.<组件id>);
使用XML布局文件定义视图
Xml布局文件是android系统中定义的视图常用方法,所有的布 局文件必须包含在res/layout目录中。定义XML布局的命名和定 义注意事项如下: xml布局文件必须是以xml文件名结束,命名必须是符合java的 规范 每一个xml布局文件的根节点可以是任意的控件标签 xml布局文件的根节点必须是包含android的命名空间,命名空 间必须是 xmlns:android=/apk/res/android 为xml文件布局中的控件指定的id需要使用这样的格式: android:id=“@+id/控件名称“该标记会保存在R文件中,即生 成 android:id="@id/控件名称"表示该控件的id名称已经在R文件生 成了,可以引用了 每一个视图的id都会在R类中生成与之对应的变量,因此视图ID 的值必须是符合java规范的
为了适应各种界面风格,Android提供了6种布局,这6种布局分别是: FrameLayout(帧布局)、LinearLayout(线性布局)、RelativeLayout(相 对布局)、TableLayout(表格布局)、GridLayout(网格布局)、 AbsoluteLayout(绝对布局)(已过时,故此不讲)等。 利用以上6种布局我们可以再手机屏幕上随心所欲的摆放各种控件。 布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以 适配不同手机屏幕的分辨率,尺寸大小;
若有可能,横向拉伸以填满容器
学云 |”分隔即可 为您提供高品质课件、学习督导服务、即时答疑、知识交易平台 当需要设置多个值时,用“
Android-UI布局管理相关知识
• • • • • • • • •
其对应strings.xml内容如下: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, UIActivity!</string> <string name="app_name">用户界面</string> <string name="name_text">请输入用户名</string> <string name="ok_button">确定</string> <string name="cancle_button">取消</string> </resources>
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="0,1,2,3" > <TableRow> <TextView android:text="@string/name" android:gravity="center" android:padding="3dip" /> <TextView android:text="@string/gender" android:gravity="center" android:padding="3dip" /> <TextView android:text="@string/age" android:gravity="center" android:padding="3dip" /> <TextView android:text="@string/phonenum" android:gravity="center" android:padding="3dip" /> </TableRow> <TableRow>
安卓之布局总结
安卓之布局总结Adroid布局有⼈形象地⽐喻,Android开发中的布局就相当于⼀栋建筑的外观架构。
布局⽤得好,这栋建筑的外观才美观⾼⼤上。
Android布局管理器Android布局管理器本⾝是⼀个界⾯控件,所有的布局管理器都是ViewGroup类的⼦类,都是可以当做容器类来使⽤的。
因此⼀个布局管理器中可以嵌套其他的布局管理器。
这是⾕歌上找的⼀张布局管理器层级图每⼀个ViewGroup都可以嵌套其他的ViewGroup和View(视图)。
⼀个ViewGroup的⼤⼩是相对的,它即可以是其他ViewGroup的⽗容器,也可以是其他ViewGroup的⼦容器。
在Android中,ViewGroup指代的是布局管理器,也就是下⾯要讲的布局样式,View指代的是布局管理器中的⼀个个控件。
在Android中,控件可以在XML⽂件中定义,也可以程序员根据⾃⼰的需要去定义⼀个类。
本⽂重点先不讨论视图中的控件,还是回归到布局。
Android六⼤基本布局管理器分别是:线性布局(LinearLayout)、表格布局(TableLayout)、⽹格布局(GridLayout)、相对布局(RelativeLayout)、绝对布局(AbsoluteLayout)、层布局(FrameLayout)其中,表格布局是线性布局的⼦类。
⽹格布局是android 4.0后新增的布局。
(1)线性布局线性布局会将容器内的所有控件⼀个挨着⼀个地排列。
属性:1. 排列⽅向android:orienation = “ horizontal/vertical”⽔平排列和垂直排列,Android中默认为垂直排列vertical注意:默认情况下⽔平和垂直⽅向的排列只占⼀⾏,如果⽤android:layout_width来设定控件的宽度,如果控件宽度太⼤,超出屏幕的显⽰范围,屏幕是不会显⽰超出的范围的。
2. 对齐⽅式⽤于控制元素(例如⽂字)在该控件⾥的显⽰位置。
Android移动应用开发实用第4章 Android布局管理器
4.4.2 AbsoluteLayout实例
下面用一个例子来展示绝对布局的实现方法,实现结果如 图4-4所示。
图4-4
4.4.2 AbsoluteLayout实例
图4-4所示界面设计的基本思想主要分为以下几步:
如果使用AbosoluteLayout布局需根据所需屏幕样式计算 各个控件的横纵坐标,上例中的TextView没有为layout_x 和layout_y指定具体值,那么这两个属性值默认都为0即绝 对坐标(0, 0),使TextView控件显示在屏幕的最左上角。
4.1.1 LinearLayout介绍
线性布局是最常用的布局方式。线性布局在XML布局文件 中使用<LinearLayout>标签进行配置。
线性布局可分为水平线性布局和垂直线性布局。通过 android:orintation属性设置线性布局的方向,该属性的 可取值是horizontal和vertical,默认值是horizontal。
整个TableLayout第一部分包含3个TableRow,每个 TableRow中包括2个TextView。整个TableLayout第二部 分包含2个TableRow,每个TableRow中包括2个TextView 。整个TableLayout第三部分包含1个TableRow。
实例中<TextView>控件中的padding属性值为容器内内容 与容器的边距,这里使用的单位是dip。在android中使用 的单位主要包括dip、dp、px和sp。dip的含义与dp相同, 代表设备独立像素,不依赖像素不同设备有不同的显示效 果,一般当为了支持WVGA、HVGA和QVGA时推荐使用这 两种单位。px即pixels(像素),属于绝对像素,在不同的 设备上显示效果是相同的。sp为scaled pixels(放大像素 ),主要用于字体显示。
5Android布局管理器(1)共17页文档
本节目标
控件类概述
• “人靠衣装,佛靠金装” • View类 • ViewGroup类
View类简介
•
可视化控件的基类
View类常用属性及方法
属性名称 android:background android:clickable
android:visibility android:focusable
谢 谢!
谢谢
11、越是没有本领的就越加自命不凡。——邓拓 12、越是无能的人,越喜欢挑剔别人的错儿。——爱尔兰 13、知人者智,自知者明。胜人者有力,自胜者强。——老子 14、意志坚强的人能把世界放在手中像泥块一样任意揉捏。——歌德 15、最具挑战性的挑战莫过于提升自我。——迈克尔·F·斯特利
描述
设置指定列号的列为 是否隐藏
设置指定的列号列为 宽度是否可进行收缩
设置指定列号的列为 宽度是否可进行拉伸
表格布局实例
TextView
TextView被拉伸
TextView
TextView 被收缩
TextView
表格一 表格二
表格三
小结
• 介绍了View类以及子类ViewGroup
• 通过实例介绍了线性布局以及表格布局的 用法
– 继承自LinearLayout类
• 发行和列的开形式管理控件
– 第行为一个TableRow对 – 也可做为View对象
表格布局
常用属性及对应方法说明
属性名称 android:colapseColumns android:shrinkColumns android:stretchColumns
对应方法 setColumnCollapsed(int,bolean) setShrinkAllColumns(boolean) setStretchAllColumns(boolean)
Android布局及布局属性
Android布局及布局属性1、帧布局FrameLayout:是最简单的一个布局对象。
在他里面的的所有显示对象爱你过都将固定在屏幕的左上角,不能指定位置,但允许有多个显示对象,只是后一个会直接覆盖在前一个之上显示,会把前面的组件部分或全部挡住。
下图的例子里,FrameLayout中放了3个ImageView组件,第一个是蓝色的,第二个是绿色的,第三个是树状图(透明的png格式)。
ImageView就相当于Html中的img标签,接下来会讲到这个组件。
下面看一个FrameLayout的例子:<?xml version="1.0" encoding="utf-8"?><FrameLayout android:id="@+id/FrameLayout01"android:layout_width="fill_parent" android:layout_height="fill_parent"xmlns:android="/apk/res/android"><ImageView android:id="@+id/ImageView01" android:src="@drawable/p1"android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView><ImageView android:id="@+id/ImageView02" android:src="@drawable/p2"android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView><ImageView android:id="@+id/ImageView03" android:src="@drawable/p3"android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView></FrameLayout>2、线性布局LinearLayout:线性布局是所有布局中最常用的类之一,也是RadioGroup, TabWidget, TableLayout, TableRow, ZoomControls类的父类。
Android应用程序中的布局设计
Android应用程序中的布局设计Android应用中的布局设计是开发中最重要并且最需要注意的事情之一。
一个良好的布局设计可以使应用程序更加直观和易用,而一个糟糕的布局则会让用户感到不舒服并降低程序的易用性,因此在进行Android应用程序开发之前,设计者应该认真思考和规划布局设计。
Android的布局设计可分为两大类:线性布局和相对布局,每种布局都有其独有的优点和缺点。
同时,需要考虑用户界面设计的规范性和一致性。
线性布局线性布局是一种简单而灵活的设计方式,其根据水平或垂直方向进行布局。
线性布局很容易控制,使开发者可以更加容易地管理和维护布局。
优点线性布局简单易用,可以轻松地控制元素的位置和大小,因此对于初学者来说是一种非常有利的布局方式。
其还可以按比例控制元素,从而适应多种不同大小的设备。
其次,线性布局可以让开发者快速地检查视图的位置和大小,从而进一步简化布局调整的难度。
缺点线性布局也有些缺陷。
当布局变得非常复杂时,线性布局会变得非常繁琐。
此外,当元素数量增加后,屏幕空间开始变得紧张,这会使得描述布局的XML变得明显更长。
同时,由于所有元素都需要进行细微的控制,因此更加可能会出现错误。
相对布局相对布局是一种更加灵活的布局方式,可以根据元素之间的相对位置来确定布局。
此方式较线性布局更加复杂,但是其在一些情况下可以提供更好的灵活性。
优点相对布局可以根据需要动态地调整布局,使得其能够适应多种不同的设备。
同时,相对布局可支持同时存在多个元素,并且可以在这些元素之间形成各种关系。
这些关系可以是垂直或水平的,甚至可以是根据其他元素的位置而定的。
缺点相对布局也有一定的缺点。
由于关系比较复杂,因此需要更加仔细地进行布局控制,否则就会导致元素相互干扰和布局错误的问题。
此外,相对布局的调整也比较困难,因为调整一个元素的位置通常会影响整个布局,因此一定要更加谨慎地操作。
用户界面设计的规范性和一致性良好的用户界面设计应该具有一定的规范性和一致性。
02 布局管理器
表格布局
在XML布局文件中定义表格布局管理器的基本的语法格式如下:
<TableLayout xmlns:android="/apk/res/android" 属性列表 > <TableRow 属性列表> 需要添加的UI组件 </TableRow> 多个<TableRow> </TableLayout>
android:foregroundGravity
相对布局
相对布局是指按照组件之间的相对位置来进行布局,如某个组件在 另一个组件的左边、右边、上方或下方等。
在XML布局文件中,定义相对布局管理器可以使用<RelativeLayout>标记, 其基本的语法格式如下:
<RelativeLayout xmlns:android="/apk/res/android" 属性列表 > </RelativeLayout>
线性布局
线性布局是将放入其中的组件按照垂直或水平方向来布局,也就是 控制放入其中的组件横向排列或纵向排列。在线性布局中,每一行(针 对垂直排列)或每一列(针对水平排列)中只能放一个组件。并且 Android的线性布局不会换行,当组件一个挨着一个排列到窗体的边缘后, 剩下的组件将不会被显示出来。
在Android中,可以在XML布局文件中定义线性布局管理器,也可以使用 Java代码来创建。推荐使用在XML布局文件中定义线性布局管理器。在XML布局 文件中定义线性布局管理器,需要使用<LinearLayout>标记,其基本的语法格式 如下:
XML属性
android:gravity
描述
用于设置布局管理器中各子组件的对齐方式 用于指定哪个组件不受gravity属性的影响
Android中关于CoordinatorLayout的一些实用布局技巧
Android中关于CoordinatorLayout的⼀些实⽤布局技巧介绍CoordinatorLayout是⼀个“加强版”的 FrameLayout,它主要有两个⽤途:(1)⽤作应⽤的顶层布局管理器(2)通过为⼦View指定 behavior 实现⾃定义的交互⾏为。
在我们做 Material Design 风格的app时通常都使⽤ CoordinatorLayout 作为布局的根节点,以便实现特定的UI交互⾏为。
那么现在我们来看看如何⽤已有的⼀些控件实现⼀些常见的布局。
Toolbar + TabLayout 实现 TabLayout 置顶效果很常见的⼀种模式是 TabLayout 放在 ToolBar 布局中与其⼀起置顶在界⾯上⽅,⽽现在的效果是将ToolBar 隐藏⽽TabLayout⼀直置顶在界⾯上⽅。
tablayout如何实现呢?⾸先所在的 Activity 要使⽤ AppTheme.NoActionBar 风格主题,之后再编写布局⽂件。
<android.support.design.widget.CoordinatorLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><android.support.design.widget.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/AppTheme.AppBarOverlay"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"app:layout_scrollFlags="scroll|enterAlways|snap"app:popupTheme="@style/AppTheme.PopupOverlay"><!-- toolbar内部布局⽂件 --></android.support.v7.widget.Toolbar><android.support.design.widget.TabLayoutandroid:id="@+id/tab_layout"android:layout_width="match_parent"android:layout_height="@dimen/tab_height"app:tabIndicatorColor="@color/white"app:tabTextColor="@color/white_normal"></android.support.design.widget.TabLayout></android.support.design.widget.AppBarLayout><!-- 主界⾯布局⽂件 --></android.support.design.widget.CoordinatorLayout>很重要的两点:设置 Toolbar 的layout_scrollFlags="scroll|enterAlways|snap"保证 Toolbar 能随界⾯滑动向上隐藏。
android布局技巧
Android布局技巧Android平台提供了大量的UI构件,你可以将这些小的视觉块(构件)搭建在一起,呈现给用户复杂且有用的画面。
然而,应用程序有时需要一些高级的视觉组件。
为了满足这一需求,并且能高效的实现,你可以把多个标准的构件结合起来成为一个单独的、可重用的组件。
例如,你可以创建一个可重用的组件包含一个进度条和一个取消按钮,一个Panel包含两个按钮(确定和取消动作),一个Panel包含图标、标题和描述等等。
简单的,你可以通过书写一个自定义的View来创建一个UI组件,但更简单的方式是仅使用XML来实现。
在Android XML布局文件里,一般,每个标签都对应一个真实的类实例(这些类一般都是View的子类)。
UI工具包还允许你使用三个特殊的标签,它们不对应具体的View实例:、、。
这篇文章将描述如何使用来创建一个单纯的XML视觉组件。
了解更多关于如何使用的资料,请参看《合并布局》文章,尤其是它与结合起来使用体现出来的强大威力。
元素的作用如同它的名字一样;它用于包含其它的XML布局。
使用这个标签如下面的例子所示:<uncher.Workspaceandroid:id="@+id/workspace"android:layout_width="fill_parent"android:layout_height="fill_parent"launcher:defaultScreen="1"><include android:id ="@+id/cell1"layout ="@layout/workspace_screen" /><include android:id ="@+id/cell2"layout ="@layout/workspace_screen" /><include android:id ="@+id/cell3"layout ="@layout/workspace_screen" /></uncher.Workspace> 在中,只需要layout 特性。
AndroidUI设计之 布局管理器
AndroidUI设计之布局管理器- 详细解析布局实现写完博客的总结 : 以前没有弄清楚的概念清晰化父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器都有一个LayoutParams内部类, android:... 是父容器用来控制子组件的属性. 如android:layout_gravity 是控制组件本身的对齐方式, android:gravity是控制本容器子组件的对齐方式;布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小;布局管理器之间的继承关系 :在上面的UML图中可以看出, 绝对布局帧布局网格布局相对布局线性布局是直接继承ViewGroup,表格布局是继承的LinearLayout;一. 线性布局(LinearLayout)1. 线性布局作用作用 : 线性布局会将容器中的组件一个一个排列起来, LinearLayout可以控制组件横向或者纵向排列, 通过android:orientation属性控制;不换行属性 : 线性布局中的组件不会自动换行, 如果组件一个一个排列到尽头之后, 剩下的组件就不会显示出来;2. LinearLayout常用属性(1)基线对齐xml属性 : android:baselineAligned;设置方法 : setBaselineAligned(boolean b);作用 : 如果该属性为false, 就会阻止该布局管理器与其子元素的基线对齐;(2)设分隔条xml属性 : android:divider;设置方法 : setDividerDrawable(Drawable);作用 : 设置垂直布局时两个按钮之间的分隔条;(3)对齐方式(控制内部子元素)xml属性 : android:gravity;设置方法 : setGravity(int);作用 : 设置布局管理器内组件(子元素)的对齐方式,支持的属性 :top, bottom, left, right,center_vertical(垂直方向居中), center_horizontal(水平方向居中),fill_vertical(垂直方向拉伸), fill_horizontal(水平方向拉伸),center, fill,clip_vertical, clip_horizontal;可以同时指定多种对齐方式 : 如 left|center_vertical 左侧垂直居中;(4)权重最小尺寸xml属性 : android:measureWithLargestChild;设置方法 : setMeasureWithLargestChildEnable(boolean b);作用 : 该属性为true的时候, 所有带权重的子元素都会具有最大子元素的最小尺寸; (5) 排列方式xml属性 : android:orientation;设置方法 : setOrientation(int i);作用 : 设置布局管理器内组件排列方式, 设置为horizontal(水平),vertical(垂直), 默认为垂直排列;3. LinearLayout子元素控制LinearLayout的子元素, 即LinearLayout中的组件, 都受到youtParams控制, 因此LinearLayout包含的子元素可以执行下面的属性.(1) 对齐方式xml属性 : android:layout_gravity;作用 : 指定该元素在LinearLayout(父容器)的对齐方式, 也就是该组件本身的对齐方式, 注意要与android:gravity区分, ;(2) 所占权重xml属性 : android:layout_weight;作用 : 指定该元素在LinearLayout(父容器)中所占的权重, 例如都是1的情况下, 那个方向(LinearLayout的orientation方向)长度都是一样的;4. 控制子元素排列与在父元素中排列控制本身元素属性与子元素属性 :设备组件本身属性 : 带layout的属性是设置本身组件属性, 例如android:layout_gravity设置的是本身的对其方式;设置子元素属性 : 不带layout的属性是设置其所包含的子元素, 例如android:gravity 设置的是该容器子组件的对齐方式;LayoutParams属性 : 所有的布局管理器都提供了相应的LayoutParams内部类, 这些内部类用于控制该布局本身, 如对齐方式 layout_gravity, 所占权重layout_weight, 这些属性用于设置本元素在父容器中的对齐方式;容器属性 : 在android:后面没有layout的属性基本都是容器属性,android:gravity作用是指定指定本元素包含的子元素的对齐方式, 只有容器才支持这个属性;5. 常见用法(1) 获取LinearLayout的宽高a. 组件外无法获取组件宽高下面的两种情况都是针对 View.getHeight() 和 View.getWidth() 方法 :组件外无法获取 : 调用View.getHeight()和View.getWidth()方法是获取不到组件的宽度和高度的, 这两个方法返回的是0, Android的运行机制决定了无法在组件外部使用getHeight()和getWidth()方法获取宽度和高度;组件内可以获取 : 在自定义的类中可以在View的类中通过调用这两个方法获取该View 子类组件的宽和高;b. 组件外部获取View对象宽高方法外部获取 : 使用View.getMeasuredWidth()和View.getMeasuredHeight()方法可以获取组件的宽和高, 在调用这个方法之前, 必须先调用View.measure()方法, 才可以, 否则也获取不到组件的宽高;注意(特例) : 如果组件宽度或高度设置为 fill_parent, 使用getMeasuredHeight() 等方法获取宽度和高度的时候, 并且组件中含有子元素时, 所获取的实际值是这些组件所占的最小宽度和最小高度.(没看懂)示例:[java]view plaincopy1.View view = getLayoutInflater().inflate(yout.main, null);2.LinearLayout layout = (LinearLayout) view.findViewById(R.id.linearlayout);3.//调用测量方法, 调用了该方法之后才能通过getMeasuredHeight()等方法获取宽高yout.measure(0, 0);5.//获取宽度6.int width = layout.getMeasuredWidth();7.//获取高度8.int height = layout.getMeasuredHeight();c. 获取布局文件中组件的宽高从LayoutParams中获取 : 调用View.getLayoutParams().width 和View.getLayoutParams().height 获取宽高, 如果宽高被设定为 fill_parent, match_parent, warp_content 时, 这两个两边直接回返回 FILL_PARENT,MATCH_PARENT, WARP_CONTENT常量值;规律 : 从View.getLayoutParams()中获取 width, height 值, 在布局xml文件中设置的是什么, 获取的时候就得到的是什么;(2) 在LinearLayout中添加分隔线a. 使用ImageView添加(低版本3.0以下)垂直布局横向宽度填满 : 如果布局是vertical, 那么设置一个ImageView宽度fill_parent, 高度2dp, 设置一个背景色;水平布局纵向高度填满 : 如果布局时horizontal, 那么设置一个ImageView宽度2dp, 高度fill_parent, 设置一个背景色;[java]view plaincopy1.<ImageView2. android:layout_width="fill_parent"3. android:layout_height="2dp"4. android:background="#F00"/>b. 使用xml属性添加(3.0以上版本)设置LinearLayout标签的android:showDividers属性, 该属性有四个值 : none :不显示分隔线;beginning : 在LinearLayout开始处显示分隔线;middle : 在LinearLayout中每两个组件之间显示分隔线;end : 在LinearLayout结尾处显示分隔线;设置android:divider属性, 这个属性的值是一个Drawable的id;c. 使用代码添加(3.0以上版本)设置显示分隔线样式 : linearLayout.setShowDividers(), 设置android:showDividers属性;设置分隔线图片 : linearLayout.setDividerDrawable(), 设置android:divider属性;6. 实际案例(1) 按钮排列要点 :底部 + 水平居中对齐属性 : 左边的LinearLayout的android:gravity 属性为bottom|center_horizontal;右部 + 垂直居中对齐属性 : 右边的LinearLayout的android:gravity 属性为right|center_vertical;代码 :[html]view plaincopy1.<?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="vertical"6.android:gravity="bottom|center_horizontal">7.<Button8.android:layout_width="wrap_content"9.android:layout_height="wrap_content"10.android:text="按钮1"/>11.<Button12.android:layout_width="wrap_content"13.android:layout_height="wrap_content"14.android:text="测试按钮2"/>15.<Button16.android:layout_width="wrap_content"17.android:layout_height="wrap_content"18.android:text="按钮3"/>19.<Button20.android:layout_width="wrap_content"21.android:layout_height="wrap_content"22.android:text="测试按钮4"/>23.<Button24.android:layout_width="wrap_content"25.android:layout_height="wrap_content"26.android:text="按钮5"/>27.</LinearLayout>子元素对齐 : 通过修改android:gravity 属性来控制LinearLayout中子元素的排列情况;左边的图的属性为 bottom|center_horizontal , 右边的android:gravity的属性值为 right|center_vertical;(2) 三个按钮各自对齐三个水平方向的按钮, 分别左对齐, 居中对齐, 右对齐 :要点 :水平线性布局 : 最顶层的LinearLayout的orientation是horizontal水平的;等分三个线性布局 : 第二层的LinearLayout的orientation是vertical垂直的, 并且宽度是fill_parent , 依靠权重分配宽度;设置按钮对齐方式 : 按钮的android:layout_gravity属性根据需求 left, center, right, 默认为left;代码 :[html]view plaincopy1.<?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">6.7.<LinearLayout8.android:layout_width="fill_parent"9.android:layout_weight="1"10.android:layout_height="wrap_content"11.android:orientation="vertical"12.android:background="#f00">13.<Button android:layout_width="wrap_content"14.android:layout_height="wrap_content"15.android:text="按钮1"/>16.</LinearLayout>17.18.<LinearLayout19.android:layout_width="fill_parent"20.android:layout_weight="1"21.android:layout_height="wrap_content"22.android:orientation="vertical"23.android:background="#0f0">24.<Button android:layout_width="wrap_content"25.android:layout_height="wrap_content"26.android:text="按钮2"27.android:layout_gravity="center"/>28.</LinearLayout>29.30.<LinearLayout31.android:layout_width="fill_parent"32.android:layout_weight="1"33.android:layout_height="wrap_content"34.android:orientation="vertical"35.android:background="#00f">36.<Button android:layout_width="wrap_content"37.android:layout_height="wrap_content"38.android:text="按钮3"39.android:layout_gravity="right"/>40.</LinearLayout>41.42.</LinearLayout>二. 相对布局RelativeLayout相对布局容器中, 子组件的位置总是相对兄弟组件,父容器来决定的;1. RelativeLayout支持的属性(1) 对齐方式xml属性 : android:gravity;设置方法 : setGravity(int);作用 : 设置布局容器内子元素的对齐方式, 注意与android:layout_gravity区分, 后者是设置组件本身元素对齐方式;(2) 忽略对齐方式xml属性 : android:ignoreGravity;设置方法 : setIgnoreGravity(int);作用 : 设置该组件不受gravity属性影响, 因为gravity属性影响容器内所有的组件的对齐方式, 设置了之后, 该组件就可以例外;2. LayoutParams属性(1) 只能设置boolean值的属性这些属性都是相对父容器的, 确定是否在父容器中居中(水平, 垂直), 是否位于父容器的上下左右端;是否水平居中 : android:layout_centerHorizontal;是否垂直居中 : android:layout_centerVertical;是否位于中央 : android:layout_centerInParent;是否底端对齐 : android:layout_align ParentBottom;是否顶端对齐 : android:layout_align ParentTop;是否左边对齐 : android:layout_align ParentLeft;是否右边对齐 : android:layout_align ParentRight;(2) 只能设置其它组件id的属性位于所给id组件左侧 : android:layout_toLeftOf;位于所给id组件右侧 : android:layout_toRightOf;位于所给id组件的上边 : android:layout_above;位于所给id组件的下方 : android:layout_below;与所给id组件顶部对齐 : android:layout_align Top;与所给id组件底部对齐 : android:layout_align Bottom;与所给id组件左边对齐 : android:layout_align Left;与所给id组件右边对齐 : android:layout_align Right;3. 梅花布局效果五个按钮排成梅花形状, 梅花处于正中心, 效果图如下 :两个按钮, 如果只有 android:layout_above="@+id/bt1" 会是这种情况 :加上 android:layout_alignLeft="@+id/bt1"就会成为这种情况 :要点 :注意每个组件的属性, 先要确定方位, 在进行对齐, 组件左边界对齐, 组件上边界对齐;代码 :[html]view plaincopy1.<?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.6.<Button7.android:id="@+id/bt1"8.android:layout_width="wrap_content"9.android:layout_height="wrap_content"10.android:text="按钮1"11.android:layout_centerInParent="true"/>12.13.<Button14.android:id="@+id/bt2"15.android:layout_width="wrap_content"16.android:layout_height="wrap_content"17.android:text="按钮2"18.android:layout_above="@+id/bt1"19.android:layout_alignLeft="@+id/bt1"/>20.21.<Button22.android:id="@+id/bt3"23.android:layout_width="wrap_content"24.android:layout_height="wrap_content"25.android:text="按钮3"26.android:layout_centerInParent="true"27.android:layout_below="@+id/bt1"28.android:layout_alignLeft="@+id/bt1"/>29.30.<Button31.android:id="@+id/bt4"32.android:layout_width="wrap_content"33.android:layout_height="wrap_content"34.android:text="按钮4"35.android:layout_centerInParent="true"36.android:layout_toLeftOf="@+id/bt1"37.android:layout_alignTop="@+id/bt1"/>38.39.<Button40.android:id="@+id/bt5"41.android:layout_width="wrap_content"42.android:layout_height="wrap_content"43.android:text="按钮5"44.android:layout_centerInParent="true"45.android:layout_toRightOf="@+id/bt1"46.android:layout_alignTop="@+id/bt1"/>47.48.</RelativeLayout>4. 相对布局常用方法(1) 获取屏幕中一个组件的位置创建数组 : 要先创建一个整型数组, 数组大小2位; 这个数组传入getLocationOnScreen()方法;将位置信息传入数组 : 可以调用View.getLocationOnScreen()方法, 返回的是一个数组 int[2], int[0] 是横坐标, int[1] 是纵坐标;[java]view plaincopy1.//获取组件2.Button b = (Button) this.findViewById(R.id.Button01);3.//创建数组, 将该数组传入getLocationOnScreen()方法4.int locations[] = new int[2];5.//获取位置信息6. b.getLocationOnScreen(locations);7.//获取宽度8.int width = locations[0];9.//获取高度10.int height = locations[1];(2) LayoutParams的使用设置所有属性属性设置方法少 : Android SDK中View类只提供了很少用于设置属性的方法,大多数属性没有直接对应的获得和设置属性值的方法, 看起来貌似不是很好用;使用LayoutParams设置属性值 : Android中可以对任何属性进行设置, 这里我们需要一个LayoutParams对象, 使用这个LayoutParams.addRule()方法, 可以设置所有组件的属性值; 设置完之后调用View.setLayoutParams()方法, 传入刚才创建的LayoutParams对象, 并更新View的相应的LayoutParams属性值, 向容器中添加该组件;代码中动态设置布局属性 :a. 创建LayoutParams对象b. 调用LayoutParams对象的addRule()方法设置对应属性;c. 调用View.setLayoutParams()方法将设置好的LayoutParams对象设置给组件;d. 调用addView方法将View对象设置到布局中去;使用代码设置android:layout_toRightOf 和 android:layout_below属性 :[java]view plaincopy1.//装载布局文件2.RelativeLayout relativeLayout = (RelativeLayout) getLayoutInflater().inflate(yout.relative, null);3.//装载要动态添加的布局文件4.Button button = (Button) relativeLayout.findViewById(R.id.bt1);5.//创建一个LayoutParams对象youtParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);7.//设置android:layout_toRightOf属性youtParams.addRule(RelativeLayout.RIGHT_OF, R.id.bt2);9.//设置android:layout_belowyoutParams.addRule(RelativeLayout.BELOW, R.id.bt2);11.//更新Button按钮的属性12.button.setLayoutParams(layoutParams);13.//向布局中动态添加按钮14.relativeLayout.addView(button);三. 帧布局FrameLayout帧布局容器为每个组件创建一个空白区域, 一个区域成为一帧, 这些帧会根据FrameLayout中定义的gravity属性自动对齐;1. 绘制霓虹灯布局绘制一个霓虹灯效果的层叠布局, 如下图 :要点 :后挡前 : 后面的View组件会遮挡前面的View组件,越在前面, 被遮挡的概率越大;界面居中 : 将所有的TextView组件的对齐方式 android:layout_gravity设置为center;正方形 : 所有的TextView都设置android:height 和 android:width 属性, 用来设置其宽高, 这里设置成正方形, 宽高一样, 后面的组件比前面的边长依次少40;颜色 : 每个TextView的背景都设置成不一样的;代码 :[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<FrameLayout xmlns:android="/apk/res/android"3.android:layout_width="match_parent"4.android:layout_height="match_parent">5.6.<TextView7.android:id="@+id/tv_1"8.android:layout_width="wrap_content"9.android:layout_height="wrap_content"10.android:layout_gravity="center"11.android:width="320px"12.android:height="320px"13.android:background="#f00"/>14.<TextView15.android:id="@+id/tv_2"16.android:layout_width="wrap_content"17.android:layout_height="wrap_content"18.android:layout_gravity="center"19.android:width="280px"20.android:height="280px"21.android:background="#0f0"/>22.<TextView23.android:id="@+id/tv_3"24.android:layout_width="wrap_content"25.android:layout_height="wrap_content"26.android:layout_gravity="center"27.android:width="240px"28.android:height="240px"29.android:background="#00f"/>30.<TextView31.android:id="@+id/tv_4"32.android:layout_width="wrap_content"33.android:layout_height="wrap_content"34.android:layout_gravity="center"35.android:width="200px"36.android:height="200px"37.android:background="#ff0"/>38.<TextView39.android:id="@+id/tv_5"40.android:layout_width="wrap_content"41.android:layout_height="wrap_content"42.android:layout_gravity="center"43.android:width="160px"44.android:height="160px"45.android:background="#f0f"/>46.<TextView47.android:id="@+id/tv_6"48.android:layout_width="wrap_content"49.android:layout_height="wrap_content"50.android:layout_gravity="center"51.android:width="120px"52.android:height="120px"53.android:background="#0ff"/>54.55.</FrameLayout>.作者 :万境绝尘转载请注明出处 : /shulianghan/article/details/18964835 .2. 使用代码使上面的霓虹灯效果动起来(1) 图片效果(2) 颜色资源创建颜色资源, 在跟节点<resources>下面创建<color>子节点, color属性标签name 自定义, 子文本为颜色代码;(3) 定时器控制handler创建Handler对象, 实现handleMessage()方法, 在这个方法中循环设置 TextView 对象的颜色变量, 使用color[(i + currentColor)%colors.length]每调用一次, 就将所有的TextView颜色依次调换一次;在onCreate()方法中, 开启一个定时器Timer, 每隔0.2s就调用一个handler中的方法, 这样动态的霓虹灯代码就显示出来了.(4) 代码颜色资源代码 :[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<resources>3.<color name = "color1">#f00</color>4.<color name = "color2">#0f0</color>5.<color name = "color3">#00f</color>6.<color name = "color4">#ff0</color>7.<color name = "color5">#f0f</color>8.<color name = "color6">#0ff</color>9.</resources>代码 :[java]view plaincopy1.package com.example.framelayout;2.3.import java.util.Timer;4.import java.util.TimerTask;5.6.import android.app.Activity;7.import android.os.Bundle;8.import android.os.Handler;9.import android.os.Message;10.import android.widget.TextView;11.12.public class MainActivity extends Activity {13.14.//这个变量用来控制霓虹灯颜色变化15.private int currentColor = 0;16.//颜色对应的资源id17.final int[] colors = new int[]{18. R.color.color1,19. R.color.color2,20. R.color.color3,21. R.color.color4,22. R.color.color5,23. R.color.color624. };25.//View组件对应的资源id26.final int[] names = new int[]{27. _1,28. _2,29. _3,30. _4,31. _5,32. _633. };34.35.//组件数组36. TextView[] views = new TextView[names.length];37.38.//定义这个Handler, 为了在定时器中固定调用handleMessage方法39. Handler handler = new Handler(){40.public void handleMessage(Message msg) {41.if(msg.what == 0x123){42.for(int i = 0; i < names.length; i ++){43. views[i].setBackgroundResource(colors[(i + currentColor)% names.length]);44. }45. currentColor ++;46. }47. };48. };49.50.@Override51.public void onCreate(Bundle savedInstanceState) {52.super.onCreate(savedInstanceState);53. setContentView(yout.frame);54.//初始化组件数组55.for(int i = 0; i < names.length; i ++){56. views[i] = (TextView) findViewById(names[i]);57. }58.//每隔0.2秒更换一次颜色59.new Timer().schedule(new TimerTask() {60.@Override61.public void run() {62. handler.sendEmptyMessage(0x123);63. }64. }, 0, 200);65. }66.}3. 三个水平方向的按钮分别左对齐,居中对齐,右对齐要点 : 给FrameLayout中的三个按钮分别设置不同的layout_gravity,left ,center_horizontal,right, 就能设置成上图的样式;代码 :[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<FrameLayout xmlns:android="/apk/res/android"3.android:layout_width="match_parent"4.android:layout_height="match_parent">5.6.<Button7.android:layout_width="wrap_content"8.android:layout_height="wrap_content"9.android:text="按钮1"10.android:layout_gravity="left"/>11.12.<Button13.android:layout_width="wrap_content"14.android:layout_height="wrap_content"15.android:text="按钮2"16.android:layout_gravity="center_horizontal"/>17.18.<Button19.android:layout_width="wrap_content"20.android:layout_height="wrap_content"21.android:text="按钮3"22.android:layout_gravity="right"/>23.24.</FrameLayout>四. 表格布局TableLayout1. 表格布局的一些概念继承关系 : 表格布局继承了LinearLayout, 其本质是线性布局管理器;控制组件 : 表格布局采用行, 列形式管理子组件, 但是并不需要声明有多少行列, 只需要添加TableRow 和组件就可以控制表格的行数和列数, 这一点与网格布局有所不同, 网格布局需要指定行列数;增加行的方法 :a. TableRow增加行列 : 向TableLayout中添加一个TableRow,一个TableRow就是一个表格行, 同时TableRow也是容器, 可以向其中添加子元素, 每添加一个组件, 就增加了一列;b. 组件增加行 : 如果直接向TableLayout中添加组件, 就相当于直接添加了一行;列宽 : TableLayout中, 列的宽度由该列最宽的单元格决定, 整个表格的宽度默认充满父容器本身;2. 单元格行为方式(1) 行为方式概念a. 收缩 :Shrinkable, 如果某列被设为Shrinkable, 那么该列所有单元格宽度可以被收缩, 保证表格能适应父容器的宽度;b. 拉伸 :Stretchable, 如果某列被设为Stretchable, 那么该列所有单元格的宽度可以被拉伸, 保证表格能完全填满表格剩余空间;d. 隐藏 :Collapsed, 如果某列被设置成Collapsed, 那么该列所有单元格会被隐藏;(2) 行为方式属性a. 隐藏xml属性 : android:collapsedColumns;设置方法 : setColumnCollapsed(int, boolean);作用 : 设置需要被隐藏的列的序号, 在xml文件中, 如果隐藏多列, 多列序号间用逗号隔开;b. 拉伸xml属性 : android:stretchColumns;设置方法 : setStretchAllColumns(boolean);作用 : 设置允许被拉伸的列的序列号, xml文件中多个序列号之间用逗号隔开;c. 收缩xml属性 : android:shrinkableColumns;设置方法 : setShrinkableAllColumns(boolean);作用 : 设置允许被收缩的列的序号, xml文件中, 多个序号之间可以用逗号隔开; 3. 表格布局实例实现要点 :独自一行按钮 : 向TableLayout中添加按钮, 这个按钮就会独自占据一行;收缩按钮: 在TableLayout标签中,设置android:stretchable属性标签, 属性值是要收缩的列,注意,列标从0开始;拉伸按钮 : 在TableLayout标签中,设置android:shrinkable属性标签, 属性值是要拉伸的列, 注意, 列表从0开始;代码 :[html]view plaincopy1.<LinearLayout xmlns:android="/apk/res/android"2.xmlns:tools="/tools"3.android:orientation="vertical"4.android:layout_width="match_parent"5.android:layout_height="match_parent">6.<!-- LinearLayout默认是水平的, 这里设置其方向为垂直 -->7.8.<!-- 表格布局, 第2列允许收缩, 第3列允许拉伸, 注意这里行列的计数都是从0开始的 -->9.<TableLayout10.android:layout_width="fill_parent"11.android:layout_height="wrap_content"12.android:shrinkColumns="1"13.android:stretchColumns="2">14.15.<!-- 向TableLayout中直接添加组件, 独占一行 -->16.<Button17.android:layout_width="fill_parent"18.android:layout_height="wrap_content"19.android:text="独自一行的按钮"/>20.21.<TableRow>22.<Button23.android:layout_width="wrap_content"24.android:layout_height="wrap_content"25.android:text="普通的按钮"/>26.<Button27.android:layout_width="wrap_content"28.android:layout_height="wrap_content"29.android:text="收缩的按钮"/>30.<Button31.android:layout_width="wrap_content"32.android:layout_height="wrap_content"33.android:text="拉伸的按钮"/>34.</TableRow>35.36.</TableLayout>37.38.<!-- 第二个按钮会隐藏掉 -->39.<TableLayout40.android:layout_width="fill_parent"41.android:layout_height="wrap_content"42.android:collapseColumns="1">43.44.<Button45.android:layout_width="fill_parent"46.android:layout_height="wrap_content"47.android:text="独自一行的按钮"/>48.49.<TableRow>50.<Button51.android:layout_width="wrap_content"52.android:layout_height="wrap_content"53.android:text="普通按钮1"/>54.<Button55.android:layout_width="wrap_content"56.android:layout_height="wrap_content"57.android:text="普通按钮2"/>58.<Button59.android:layout_width="wrap_content"60.android:layout_height="wrap_content"61.android:text="普通按钮3"/>62.</TableRow>63.64.</TableLayout>65.66.<!-- 指定第二列和第三列可以被拉伸 -->67.<TableLayout68.android:layout_height="wrap_content"69.android:layout_width="fill_parent"70.android:stretchColumns="1,2">71.72.<Button73.android:layout_width="fill_parent"74.android:layout_height="wrap_content"75.android:text="独自占一行的按钮"/>76.77.<TableRow>78.79.<Button80.android:layout_width="wrap_content"81.android:layout_height="wrap_content"82.android:text="普通按钮1"/>83.<Button84.android:layout_width="wrap_content"85.android:layout_height="wrap_content"86.android:text="拉伸的按钮"/>87.<Button88.android:layout_width="wrap_content"89.android:layout_height="wrap_content"90.android:text="拉伸的按钮"/>91.92.</TableRow>93.94.<TableRow>95.96.<Button97.android:layout_width="wrap_content"98.android:layout_height="wrap_content"99.android:text="普通的按钮"/>100.<Button101.android:layout_width="wrap_content"102.android:layout_height="wrap_content"103.android:text="拉伸的按钮"/>104.105.</TableRow>106.107.</TableLayout>108.109.110.</LinearLayout>五. 网格布局1. 网格布局介绍网格布局时Android4.0版本才有的, 在低版本使用该布局需要导入对应支撑库;GridLayout将整个容器划分成rows * columns个网格, 每个网格可以放置一个组件. 还可以设置一个组件横跨多少列, 多少行. 不存在一个网格放多个组件情况;2. 网格布局常用属性(1) 设置对齐模式xml属性 : android:alignmentMode;设置方法 : setAlignmentMode(int);作用 : 设置网格布局管理器的对齐模式(2) 设置列数xml属性 : android:columnCount;设置方法 : setColumnCount(int);作用 : 设置该网格布局的列数;(3) 设置是否保留列序列号xml属性 : android:columnOrderPreserved;设置方法 : setColumnOrderPreserved(boolean);作用 : 设置网格容器是否保留列序列号;(4) 设置行数xml属性 : android:rowCount;设置方法 : setRowCount(int);作用 : 设置该网格的行数;(5) 设置是否保留行序列号xml属性 : android:rowOrderPreserved;设置方法 : setRowOrderPreserved(int);作用 : 设置该网格容器是否保留行序列号;(6) 页边距xml属性 : android:useDefaultMargins;设置方法 : setUseDefaultMargins(boolean);作用 : 设置该布局是否使用默认的页边距;3. GridLayout的LayoutParams属性(1) 设置位置列xml属性 : android:layout_column;作用 : 设置子组件在GridLayout的哪一列;(2) 横向跨列xml属性 : android:layout_columnSpan;作用 : 设置该子组件在GridLayout中横向跨几列;(3) 占据空间方式xml属性 : android:layout_gravity;设置方法 : setGravity(int);作用 : 设置该组件采用何种方式占据该网格的空间;(4) 设置行位置xml属性 : android:layout_row;作用 : 设置该子组件在GridLayout的第几行;(5) 设置横跨行数xml属性 : android:layout_rowSpan;作用 : 设置该子组件在GridLayout纵向横跨几行;4. 实现一个计算机界面(1) 布局代码设置行列 : 设置GridLayout的android:rowCount为6, 设置android:columnCount为4, 这个网格为 6行 * 4列的;设置横跨四列 : 设置TextView和按钮横跨四列android:layout_columnSpan 为4, 列的合并就是占了一行;textView的一些设置:设置textView中的文本与边框有5像素间隔 : android:padding = "5px";代码 :[html]view plaincopy1.<GridLayout xmlns:android="/apk/res/android"2.xmlns:tools="/tools"3.android:layout_width="match_parent"4.android:layout_height="match_parent"5.android:rowCount="6"6.android:columnCount="4"7.android:id="@+id/root">8.9. <!--10.定义一个 6行 * 4列 GridLayout, 在里面定义两个组件11.两个组件都横跨4列, 单独占一行12. -->13.<TextView14.android:layout_width="match_parent"15.android:layout_height="wrap_content"16.android:layout_columnSpan="4"17.android:textSize="50sp"18.android:layout_marginLeft="4px"19.android:layout_marginRight="4px"20.android:padding="5px"21.android:layout_gravity="right"22.android:background="#eee"23.android:textColor="#000"24.android:text="0"/>25.26.<Button27.android:layout_width="match_parent"28.android:layout_height="wrap_content"29.android:layout_columnSpan="4"30.android:text="清除"/>31.32.</GridLayout>(2) Activity代码将组件设置给GridLayout网格流程 :指定组件所在行 : GridLayout.Spec rowSpec = GridLayout.spec(int);指定组件所在列 : GridLayout.Spec columnSpec = GridLayout.spec(int);创建LayoutParams对象 : youtParams params =newyoutParams(rowSpec, columnSpec);指定组件占满容器 : params.setGravity(Gravity.FILL);将组件添加到布局中 : gridLayout.addView(view, params);代码 :[java]view plaincopy1.package com.example.caculator;2.3.import android.app.Activity;4.import android.os.Bundle;5.import android.view.Gravity;6.import android.widget.Button;7.import android.widget.GridLayout;8.import youtParams;9.import android.widget.GridLayout.Spec;10.11.public class MainActivity extends Activity {12.13.private GridLayout gridLayout;14.//需要放到按钮上的字符串15. String chars[] = new String[]{16."7", "8", "9", "/",17."4", "5", "6", "*",18."1", "2", "3", "-",19.".", "0", "=", "+"20. };21.。
Android入门之布局篇
Android简单入门最近Android挺火的,可惜刚毕业,温饱才刚刚解决,还没能力买台Android手机,所以目前的开发只能用模拟器来做。
就目前Android SDK 1.5 + Eclipse + ADT的开发方式来说,跟J2ME最大的区别在于UI的不同,当然Android比J2ME多出很多东西,多出的是J2ME无法作对比的。
刚开始做Android开发,很多人都是先写个简单的界面,再加点控制代码,本文就是这样。
本文所讲到的是LinearLayout + Button + EditText + AlertDialog的简单使用。
Activity以LinearLayout排列,共用到两个LinearLayout,第一个是用于全窗体,第二个用于存放两个Button,第二个LinearLayout放在EditText控件下面,以下给出main.xml 的代码:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><EditTextandroid:text="EditText01"android:layout_height="wrap_content"android:layout_width="fill_parent"android:id="@+id/edtInput"></EditText><LinearLayoutandroid:id="@+id/LinearLayout01"android:layout_height="wrap_content"android:layout_width="fill_parent"android:gravity="center"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Show"android:id="@+id/btnShow"></Button><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Clear"android:id="@+id/btnClear"></Button></LinearLayout></LinearLayout>main.xml用于Activity的UI设计,目前设计起来的速度,比J2ME上的LWUIT略快(两者类似,Android提供了GUI设计工具),比WM上的.NET CF略慢(.NETCF 是RAD)。
移动应用程序开发实验指导书_第三课_Anroid布局管理器
移动应用程序开发课程实验指导书课次 3 课时 2 课型□理论课□讨论课√实验课□习题课□其他授课题目(教学章、节或主题):Anroid布局管理器教学目的、要求(分掌握、熟悉、了解三个层次):掌握:线性布局管理器的使用;掌握:相对布局管理器的使用教学重点及难点:重点、难点:线性布局管理器及相对布局管理器及其嵌套使用教学方法及手段:(1)案例讲解,(2)多媒体讲解,(3)案例教学教学基本内容本节学习内容:局管理器的常用类型;线性布局管理器的使用;相对布局管理器的使用;补充知识:xml的基本使用;具体内容:1.简单线性布局❖LinearLayout 常用属性(布局参数):●andriod:orientation:设置排列方向●android:layout_width:设置宽●android:layout_height:设置高●android:layout_weight:设置控件的重要程度。
所有控件都有一个weight值,默认为零,意思是需要显示多大的控件视图就占据多大的屏幕空间。
❖实验步骤:(1)在res-layout目录下新建testSimplelinearlayout.xml文件,代码如下:<?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation=" horizontal"><Button android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Button1"android:layout_weight="1"/><Button android:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Button2"android:layout_weight="1"/></LinearLayout>(2)在Activity的onCreate方法中设置布局:setContentView(yout.test Simple linearlayout);(3)Run as – Android Application,启动虚拟手机,运行结果如下:(4)将第二个按钮的android:layout_weight="2"属性修改为2,运行结果如下:(5)修改android:orientation属性为"vertical",重新运行,结果如下:❖实验结论:android:orientation属性决定了Activity内控件的排布方向,设置为vertical时为垂直排布,设置为horizontal时为水平排布;android:layout_weight 属性表示控件在android:orientation方向上的权重比例。
第3章 Android布局管理器
第3章Android 布局管理器Android 的布局管理器有:线性布局、表格布局、现对布局、帧布局和绝对布局3.1控件类概述所有的控件的父类——View所有可以充当容器的控件类的父类——ViewGroup● 3.1.1 View 类简介该类为所有可视化控件的基类,主要提供了控件绘制和事件处理的方法。
创建用户界面所使用的控件都继承自View,如TextView、Button、等。
关于View 及其子类的相关属性,既可以在布局XML文件中进行设置,也可以通过成员方法在代码中动态设置,View 类常用的属性和方法如表3-1.● 3.1.2 ViewGroup 类简介它也是View 的子类,但是可以充当其他控件的容器。
ViewGroup 的子控件可以是普通的View 控件也可以是ViewGroup。
3.2 线性布局(LinearLayout)线性布局是最简单的布局之一,它提供了控件水平和垂直两种布局模式。
同时,使用次布局时可以通过设置控件的weight 参数控制各个控件在容器中的现对大小。
表3-2 给出LinearLayout 常用的属性及这些属性的对应设置方法。
3.3 表格布局(TableLayout)TableLayout 类以行列的形式管理控件,没行为一个TableRow 对象,也可以为一个View 对象,当为View 对象时,该View 对象将跨越改行的所有列。
在TableRow 中可以添加字控件,没添加一个子控件为一列。
TableLayout 继承自LinearLayout 类,除的继承来自父类的属性和方法,TableLayout 类中还包含表格布局特有的属性和方法,这些方法和属性如表3-4所示。
3.4 现对布局(RelativeLayout)在现对布局中,子控件的位置是现对兄弟控件或父控件容器而决定的。
出于性能考虑,在设计现对布局时要按照控件之间的依赖关系排列。
在现对布局中用到的属性很多:表3-5 的属性值只有true 或false。
安卓app开发-05-Androidxml布局详细介绍
安卓app开发-05-Androidxml布局详细介绍安卓app开发-05-Android xml布局详细介绍虽然说有墨⼑,墨客这些图形化开发⼯具来做 Android 的界⾯设计,但是我们还是离不开要去学习做安卓原⽣app,学习 xml 布局还是必要的(1)准备⾸先我们要了解 android 到底有那些布局,和每个布局类型的区别学习时最好打开 Android Studio 打开 xml ⽂件对应看⼀下配置参数的详细含义不⽤着急全部理解,放在⽂章后⾯,可收藏做查阅【可通过⽬录跳转】(2)学习⽬标学习下xml的布局⽂件具体写法。
这⼀节我们要绘制如下图所⽰的界⾯(3)线性布局 LinearLayout线性布局分两种。
⼀种是⽔平布局,⼀种是垂直布局。
下⾯我们根据上图举例⼦上图代码:<?xml version="1.0" encoding="utf-8"?><LinearLayout android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"xmlns:android="/apk/res/android"><TextView android:layout_height="wrap_content" android:text="@string/note_title"android:layout_width="wrap_content" android:padding="10dp"></TextView><LinearLayout android:layout_height="fill_parent"android:layout_width="fill_parent" android:layout_weight="1"><EditText android:id="@+id/EditText02" android:layout_width="fill_parent"android:layout_height="fill_parent" android:gravity="left"android:hint="@string/edithint"></EditText></LinearLayout><LinearLayout android:layout_height="fill_parent"android:layout_width="fill_parent" android:layout_weight="2"android:gravity="center"android:orientation="horizontal"><ImageButton android:id="@+id/ImageButton01" android:layout_width="72dp" android:layout_height="72dp" android:src="@drawable/sketchy_paper_003" android:layout_margin="3dp"></ImageButton> <ImageButton可以看到,上图是由三部分组成。
Android 布局详解【图文】
Android 布局详解【图文】原文分四篇在这里我将其整理方便大家学习下载:下载地址:/forum.php?mod=viewthread&tid=7922&extra=page%3D1 Android 布局是开发中非常重要的一个知识部分,它的布局分为以下几种:Linear Layout:线性布局Relative Layout:相对布局Table Layout:表格布局Grid View:网格布局Tab Layout:选项卡布局List View:列表布局一、Linear Layout简单来说,直着排,横着排都可以,还可以嵌套,此布局运用的非常多。
下面直接上示例代码及截图:接下来,看一下布局XML文件:<!--l version="<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"><LinearLayout android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"><TextView android:text="red" android:gravity="center_horizontal" android:background="#aa0000" android:layout_width="wrap_content"android:layout_height="fill_parent" android:layout_weight="1" /><TextView android:text="green" android:gravity="center_horizontal" android:background="#00aa00" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" /><TextView android:text="blue" android:gravity="center_horizontal" android:background="#0000aa" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" /><TextView android:text="yellow" android:gravity="center_horizontal" android:background="#aaaa00" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" /></LinearLayout><LinearLayout android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"><TextView android:text="row one" android:textSize="15pt"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1" /><TextView android:text="row two" android:textSize="15pt"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1" /><TextView android:text="row three" android:textSize="15pt" android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1" /><TextView android:text="row four" android:textSize="15pt"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1" /></LinearLayout></LinearLayout>下面详细详解这些配置的含义:LinearLayout 标签的常用属性android:orientation="horizontal":定义方向水平或垂直(horizontal/vertical )android:layout_width="fill_parent" :宽度填充满父控件的宽度android:layout_height="fill_parent":宽度填充满父控件的高度android:layout_weight="1":重量?可解释为权重,这是个什么意思呢,请看下图我将这里的配置变了一下,<LinearLayout android:orientation="horizontal"android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"><TextView android:text="red" android:gravity="center_horizontal"android:background="#aa0000" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" /> <TextView android:text="green" android:gravity="center_horizontal"android:background="#00aa00" android:layout_width="wrap_content"android:layout_height="fill_parent" android:layout_weight="2" /><TextView android:text="blue" android:gravity="center_horizontal"android:background="#0000aa" android:layout_width="wrap_content"android:layout_height="fill_parent" android:layout_weight="3" /><TextView android:text="yellow" android:gravity="center_horizontal"android:background="#aaaa00" android:layout_width="wrap_content"android:layout_height="fill_parent" android:layout_weight="4" /></LinearLayout>可以看到我设置成了1,2,3,4,这四TextView显示的宽度不一样了,具体是怎么算的,这个我究了,意思清楚就行,都设置为1则平分,否则数给的越大,占的位置就越多。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实战Android编程——手把手教你做出商用软件34第3章Android布局管理器本章要介绍的内容为Android平台下的布局管理器。
Android中的布局包括线性布局、表格布局、相对布局、帧布局和绝对布局。
下面将分别对每个布局管理器进行详细的介绍。
3.1 控件类概述3.1.1 View类简介在介绍Android的布局管理器之前,有必要让读者了解Android平台下的控件类。
首先要了解的是View类,该类为所有可视化控件的基类,主要提供了控件绘制和事件处理的方法。
创建用户界面所使用的控件都继承自View,如TextView、Button、CheckBox等。
关于View及其子类的相关属性,既可以在布局XML文件中进行设置,也可以通过成员方法在代码中动态设置。
View类常用的属性及其对应方法如表3-1所示。
表3-1 View类常用属性及对应方法说明属性名称对应方法描述android:background setBackgroundResource(int) 设置背景android:clickable setClickable(boolean) 设置View是否响应点击事件android:visibility setVisibility(int) 控制View的可见性android:focusable setFocusable(boolean) 控制View是否可以获取焦点android:id setId(int) 为View设置标识符,可通过findViewById方法获取android:longClickable setLongClickable(boolean) 设置View是否响应长点击事件android:soundEffectsEnabled setSoundEffectsEnabled(boolean) 设置当View触发点击等事件时是否播放音效android:saveEnabled setSaveEnabled(boolean) 如果未作设置,当View被冻结时将不会保存其状态android:nextFocusDown setNextFocusDownId(int)定义当向下搜索时应该获取焦点的View,如果该View 不存在或不可见,则会抛出RuntimeException异常android:nextFocusLeft setNextFocusLeftId(int) 定义当向左搜索时应该获取焦点的Viewandroid:nextFocusRight setNextFocusRightId(int) 定义当向右搜索时应该获取焦点的View续表属性名称对应方法描述android:nextFocusUp setNextFocusUpId(int) 定义当向上搜索时应该获取焦点的View,如果该View第3章 Android 布局管理器35不存在或不可见,则会抛出RuntimeException 异常说明:任何继承自View 的子类都将拥有View 类的以上属性及对应方法。
3.1.2 ViewGroup 类简介另外一个需要了解的是ViewGroup 类,它也是View 类的子类,但是可以充当其他控件的容器。
ViewGroup 的子控件既可以是普通的View ,也可以是ViewGroup ,实际上,这是使用了Composite 的设计模式。
Android 中的一些高级控件如Galley 、GridView 等都继承自ViewGroup 。
与Java SE 不同,Android 中并没有设计布局管理器,而是为每种不同的布局提供了一个ViewGroup 的子类,常用的布局及其类结构如图3-1所示。
3.2 线性布局 本节将会对线性布局进行简单的介绍。
首先向读者介绍LinearLayout 类的相关知识,然后通过一个实例说明LinearLayout 的用法。
3.2.1 LinearLayout 类简介线性布局是最简单的布局之一,它提供了控件水平或者垂直排列的模型。
同时,使用此布局时可以通过设置控件的weight 参数控制各个控件在容器中的相对大小。
LinearLayout 布局的属性既可以在布局文件(XML )中设置,也可以通过成员方法进行设置。
表3-2给出了LinearLayout 常用的属性及这些属性的对应设置方法。
表3-2 LinearLayout 常用属性及对应方法 属性名称 对应方法 描 述android:orientation setOrientation(int) 设置线性布局的朝向,可取horizontal 和vertical 两种排列方式android:gravity setGravity(int) 设置线性布局的内部元素的布局方式在线性布局中可使用gravity 属性来设置控件的对齐方式,gravity 可取的值及说明如表3-3所示。
提示:当需要为gravity 设置多个值时,用“|”分隔即可。
表3-3 gravity 可取的属性及说明属 性 值说 明top 不改变控件大小,对齐到容器顶部 续表属 性 值说 明bottom 不改变控件大小,对齐到容器底部 图3-1 布局管理器的类结构实战Android 编程——手把手教你做出商用软件36 left不改变控件大小,对齐到容器左侧right不改变控件大小,对齐到容器右侧 center_vertical不改变控件大小,对齐到容器纵向中央位置 center-horizontal不改变控件大小,对齐到容器横向中央位置 center不改变控件大小,对齐到容器中央位置 fill_vertical若有可能,纵向拉伸以填满容器 fill_horizontal若有可能,横向拉伸以填满容器 fill 若有可能,纵向横向同时拉伸以填满容器3.2.2 线性布局案例在前面的章节中介绍了LinearLayout 类的相关知识,本节将通过一个案例来说明LinearLayout 的用法。
本案例的开发步骤如下。
在Eclipse 中新建一个项目Sample_3_1,首先打开项目文件夹下res/values 目录下的strings.xml ,在其中输入如下代码。
1 <?xml version="1.0" encoding="utf-8"?>2 <resources>3 <string name="app_name">LinearExample</string>4 <string name="button">按钮</string>5 <string name="add">添加</string>6 </resources> 代码位置:见随书光盘中源代码/第3章/Sample_3_1/res/values 目录下的strings.xml 。
说明:在strings.xml 中主要声明了程序中要用到的字符串资源,这样将所有字符串资源统一管理有助于提高程序的可读性及可维护性。
打开项目文件夹下的res/layout 目录下的main.xml ,将其中已有的代码替换为如下代码。
1 <?xml version="1.0" encoding="utf-8"?>2 <LinearLayout xmlns:android="/apk/res/android"3 android:orientation="vertical"4 android:layout_width="fill_parent"5 android:layout_height="fill_parent"6 android:id="@+id/lla"7 android:gravity="right"8 > <!-- 声明一个LinearLayout 布局,并设置其属性 -->9 <Button10 android:text="@string/add"11 android:id="@+id/Button01"12 android:layout_width="wrap_content"13 android:layout_height="wrap_content">14 </Button> <!-- 声明一个Button 布局,并设置其id 为Button01 --> 15 </LinearLayout>代码位置:见随书光盘中源代码/第3章/Sample_3_1/res/layout 目录下的main.xml 。
¾ 第2~8行声明了一个线性布局,第3行设置线性布局的朝向为垂直排列。
¾ 第4~5行设置该线性布局在其所属的父容器中的布局方式为横向和纵向填充父容器。
¾ 第6行为该线性布局声明了ID 。
第7行设置该线性布局内部元素的布置方式为向右对齐。
第3章 Android 布局管理器37¾ 第9~14行声明了一个Button 控件,其ID 为Button01,第10行设置Button 控件显示的文本内容为资源文件strings.xml 中的属性值。
¾ 第12~13行设置Button 控件在父容器中的布局方式为只占据自身大小的空间。
打开项目的Activity 文件LinearActivity.java ,将其中已有的代码替换为如下的代码。
1 package wyf.jc; //声明包语句2 import android.app.Activity; //引入相关类3 import android.os.Bundle; //引入相关类4 import android.view.View; //引入相关类5 import android.widget.Button; //引入相关类6 import android.widget.LinearLayout; //引入相关类7 public class LinearActivity extends Activity {8 int count=0; //计数器,记录按钮个数 9 @Override10 public void onCreate(Bundle savedInstanceState) { //重写onCreate 方法11 super.onCreate(savedInstanceState);12 setContentView(yout.main);13 Button button = (Button) findViewById(R.id.Button01);//获取屏幕中的按钮控件对象14 button.setOnClickListener( //为按钮添加OnClickListener 接口实现 15 new View.OnClickListener(){16 public void onClick(View v){17 LinearLayout ll=(LinearLayout)findViewById(R.id.lla); //获取线性布局对象18 String msg=LinearActivity.this.getResources().getString(R. string.button);19 Button tempbutton=new Button(LinearActivity.this); //创建一个Button 对象20 tempbutton.setText(msg+(++count)); //设置Button 控件显示的内容 21 tempbutton.setWidth(80); //设置Button 的宽度22 ll.addView(tempbutton); //向线性布局中添加View 23 }24 });25 }26 }代码位置:见随书光盘中源代码/第3章/Sample_3_1/src/wyf/jc 目录下的main.xml 。