- 浏览: 664955 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
一、视图组件与容器组件:
Android应用的大部分UI组件都放在android.widget包及其子包、android.view包及其子包中,Android应用的所有UI组件都继承了View类,View组件我们可以和Swing编程中的JPanel,它代表了一个空白的矩形区域。
View类还有一个重要的子类:ViewGroup,但ViewGroup通常作为其他组件的容器使用。
Android的所有UI组件都是建立在View、ViewGroup基础之上的:
在前面的介绍中,我们也说了Android推荐使用XML布局文件来定义用户界面,而不是使用Java代码来开发用户界面,因此所有组件都提供了两种方式来控制组件的行为:
在XML布局文件中通过XML属性进行控制;
在Java代码中通过调用方法进行控制;
其实,不管我们使用哪种方式,它们控制Android用户界面行为的本质是完全一样的。大部分时候,控制UI组件的XML属性还有对应的方法。
对于View类而言,它是所有UI组件的基类,因此它包含了XML属性和方法是所有组件都可以使用的。因为很多,具体方法这里可以查看手册:
ViewGroup继承了View类,当然也可以当成普通View来使用,但ViewGroup主要还是当成容器类来使用,但由于ViewGroup是一个抽象类,因此实际使用中通常是使用ViewGroup的子类来作为容器,例如各种布局管理器。
ViewGroup容器控制其子组件的分布依赖于ViewGroup.LayoutParams、ViewGroup.MarginLayoutParams两个内部类,这两个内部类中都提供了一些XML属性,ViewGroup容器中的子组件可以指定这些XML属性。
ViewGroup.LayoutParams支持的属性
XML属性 |
说明 |
android.layout_height |
指定该子组件的基本高度 |
android.layout_width |
指定该子组件的基本宽度 |
android.layout_height和android.layout_width两个属性支持如下三个属性值:
fill_parent:指定子组件的高度、宽度与父容器组件的宽度、高度相同(实际上还要减去填充的空白距离)。
match_parent:该属性值与fill_parent完全相同,而且从Android2.2开始就推荐使用该属性来替代fill_parent,但由于ADT生成的UI组件总是使用fill_parent属性值的,所以很多时候还是使用fill_parent。
wrap_content:指定子组件的大小恰好能包裹它的内容即可。
ViewGroup.MarginLayoutParams用于控制子组件周围的页边距:
XML属性 |
相关方法 |
说明 |
android:layout_marginBottom |
setMargins(int,int,int,int) |
指定该子组件下边的页边距 |
android:layout_marginLeft |
setMargins(int,int,int,int) |
指定该子组件左边的页边距 |
android:layout_marginRight |
setMargins(int,int,int,int) |
指定该子组件右边的页边距 |
android:layout_marginTop |
setMargins(int,int,int,int) |
指定该子组件上边的页边距 |
二、使用XML布局文件控制UI界面:
上面也说了Android推荐我们使用XML布局文件来控制视图,这样一来简单明了,二来可以将应用的视图控制逻辑从Java代码中分离出来,放入XML文件中控制,从而更好的体现MVC。
当我们在Android应用的res/layout目录下定义一个主文件名任意的XML布局文件之后(R.java会自动收录该布局资源),java代码可以通过如下方法在Activity中显示该视图:
setContentView(R.layout.<资源文件名称>); |
当在布局文件中添加多个UI组件时,都可以为该UI组件指定android.id属性,该属性的属性值代表该组件的唯一标识,接下来如果希望在Java代码中访问指定UI组件,可以通过如下代码来访问它:
findViewById(R.id.<android.id 属性值>); |
一旦在程序中获得指定UI组件之后,接下来就可以通过代码来控制各UI组件的外观行为了,包括为UI组件绑定事件监听器等;
三、在代码中控制UI界面:
当然我们说了,如果你愿意的话,完全可以在Java代码中控制UI界面,如果希望在代码中控制UI界面,那么所有的UI组件都将通过new关键字创建出来,然后再以合适的方式搭建在一起。但是建议不要这样使用,因为这样不利于高层次的解耦,而且由于通过new关键字来创建UI组件,需要调用方法来设置UI组件的行为,因此代码也显得是否臃肿。
四、使用XML布局文件和Java代码混合控制UI界面:
前面说了Java控制UI过于繁琐不利于解耦,而XML布局文件的有难免有些失灵活,因此可能有些时候我们需要混合使用。当我们混合使用的时候一般习惯上把变化小,行为比较固定的组件放在XML布局文件中管理,而那些变化较多,行为控制比较复杂的组件则交给Java代码来管理。
Demo:
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > </LinearLayout>
HunHeUIActivity.java:
package com.iflytek.activity; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.LinearLayout; public class HunHeUIActivity extends Activity { /** Called when the activity is first created. */ // 定义一个访问图片的数组 int[] images = new int[] { R.drawable.news, R.drawable.pc, R.drawable.time }; int currentImg = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取LinearLayout布局容器 LinearLayout main = (LinearLayout) findViewById(R.id.root); // 程序创建ImageView组件 final ImageView image = new ImageView(this); // 将ImageView组件添加到LinearLayout布局容器中 main.addView(image); // 初始化时,显示第一张图片 image.setImageResource(images[0]); image.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if (currentImg >= 2) { currentImg = -1; } // 改变ImageView里显示的图片 image.setImageResource(images[++currentImg]); } }); } }
运行效果:
五、开发自定义View:
前面我们说了View的作用类似于JPanel,它只是一个矩形的空白区域,View组件没有任何内容,对于Android应用的其他UI组件来说,他们都继承View组件,然后在View组件提供的空白区域上绘制外观。
基于Android UI组件的实现原理,当Android系统提供的UI组件不能满足项目需要时,我们可以通过继承View来派生自定义组件。
当我们自定义UI组件时,首先需要定义一个继承View基类的子类,然后重写View类的一个或多个方法,通常可以被用户重写的方法如下:
构造器:重写构造器是定制View的最基本方式,当Java代码创建一个View实例,或根据XML布局文件加载并构建界面时需要调用该构造器。
发表评论
-
This version of ADT requires android SDK
2013-07-25 16:45 1546Windows系统下用Eclipse开发工具开发An ... -
Android学习13-----网络通信(4) WebView组件
2012-11-27 09:18 2460WebView 是一个开发的浏览 ... -
Android学习13-----网络通信(3) 与Web Service进行通讯
2012-11-26 09:40 1864这里我们的WebService使用xFire开发。 ... -
Android学习13-----网络通信(2) 与Socket交换数据
2012-11-23 09:11 3276对于网络开发而言,最常用的交互模式:WebService、We ... -
Android学习13-----网络通信(1) 与WEB服务器交换数据
2012-11-22 09:11 2163与Web服务器交互: 如果手机要想与 web ... -
Android学习11-----多媒体技术(5) 媒体录制
2012-11-16 08:10 1852在Android中通过android.media ... -
Android学习11-----多媒体技术(4) 使用摄像头拍照,多点触控
2012-11-15 08:37 2843一、摄像头拍照 前面说媒体播放 时了解了 ... -
Android学习11-----多媒体技术(3) 媒体播放
2012-11-14 08:25 1385在 Androi ... -
Android学习11-----多媒体技术(2) Animation
2012-11-13 08:47 1963一、渐变动画, Tweened Animation ... -
Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix
2012-11-12 08:48 1574一、绘制简单图 ... -
Android学习12-----手机服务(4) 传感器
2012-11-19 09:13 1995传感器一般用于游戏中,在 Android 系统中为 ... -
Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager
2012-11-18 11:18 3438一、取得电池电量信息 ... -
Android学习10-----Android组件通信 (8) 桌面显示组件:AppWidget
2012-11-02 08:36 2011一、 AppWidget 在使用 Androi ... -
Android学习10-----Android组件通信 (7) 广播机制:Broadcast
2012-11-01 08:43 1484一、 广播: 广播也是一种信息的发送机制,在 ... -
Android学习10-----Android组件通信 (6) PendingIntent
2012-10-31 08:20 2210Intent 的主要功能是表示用 ... -
Android学习10-----Android组件通信 (5) Service
2012-10-30 08:25 1695Service 基本组成: ... -
Android学习10-----Android组件通信 (4) 消息机制
2012-10-29 08:22 1521在 Android 操作系统中存在着消息队列的操作 ... -
Android学习10-----Android组件通信 (3) ActivityGroup
2012-10-26 08:23 2271导航栏在 Android 中的应用是很常见的,前面 ... -
Android学习10-----Android组件通信 (2) Activity生命周期
2012-10-25 08:16 1254Activity 是整个 Android 平台的基 ... -
Android学习10-----Android组件通信 (1) Intent
2012-10-24 08:43 1942在一个项目之中,会由多个 Activity ...
相关推荐
Android程序界面编程与视图(View)组件.pdf 学习资料 复习资料 教学资源
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...
7.1.1 视图组件(View) 7.1.2 视图容器组件(Viewgroup) 7.1.3 布局组件(Layout) 7.1.4 布局参数(LayoutParams) 7.2 我的美丽我做主——Android中应用界面布局 7.2.1 实例操作演示 7.2.2 实例编程实现 7.3 不积跬步...
创建MVVM模式是为了简化事件驱动的用户界面编程。 在MVVM中,ViewModel公开了View可以绑定到的事件流。 因此,ViewModel不再需要保留对View的引用。 这也意味着现在已删除了MVP模式所需的所有接口。 View引用了...
7.1.1 视图组件(View) 7.1.2 视图容器组件(Viewgroup) 7.1.3 布局组件(Layout) 7.1.4 布局参数(LayoutParams) 7.2 我的美丽我做主——Android中应用界面布局 7.2.1 实例操作演示 7.2.2 实例编程实现 7.3 不积跬步...
Android应用程序界面编程、界面编程与视图(View)组件、使用XML布局控制UI界面、在代码中控制UI界面、使用XML和Java代码共同控制UI界面
7.1.1 视图组件(view) 63 7.1.2 视图容器组件(viewgroup) 63 7.1.3 布局组件(layout) 64 7.1.4 布局参数(layoutparams) 64 7.2 我的美丽我做主——android中应用界面布局 64 7.2.1 实例操作演示 65...
6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享(ContentProviders) 6.7 小结 第7 章多媒体开发 7.1 多媒体开发详解 7.1.1 Open Core 7.1.2 MediaPlayer ...
《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、环境搭建、SDK介绍、Market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个Android平台下的完整综合...
2.1 界面编程与视图(View)组件 36 2.1.1 视图组件与容器组件 36 2.1.2 使用XML布局文件控制UI 界面 40 2.1.3 在代码中控制UI界面 41 2.1.4 使用XML布局文件和Java 代码混合控制UI界面 42 2.1.5 ...
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 ...
7.1.1 视图组件(View) 63 7.1.2 视图容器组件(Viewgroup) 63 7.1.3 布局组件(Layout) 64 7.1.4 布局参数(LayoutParams) 64 7.2 我的美丽我做主——Android中应用界面布局 64 7.2.1 实例操作演示 65...
6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享(ContentProviders) 6.7 小结 第7 章多媒体开发 7.1 多媒体开发详解 7.1.1 Open Core ...
2.1 界面编程与视图(View)组件 36 2.1.1 视图组件与容器组件 36 2.1.2 使用XML布局文件控制UI 界面 40 2.1.3 在代码中控制UI界面 41 2.1.4 使用XML布局文件和Java 代码混合控制UI界面 42 2.1.5 开发自定义View 43 ...
2.1 界面编程与视图(View)组件 36 2.1.1 视图组件与容器组件 36 2.1.2 使用XML布局文件控制UI 界面 40 2.1.3 在代码中控制UI界面 41 2.1.4 使用XML布局文件和Java 代码混合控制UI界面 42 2.1.5 开发自定义View 43 ...