`

Android学习04-----界面编程与视图(view)组件

阅读更多

 

一、视图组件与容器组件:

Android应用的大部分UI组件都放在android.widget包及其子包、android.view包及其子包中,Android应用的所有UI组件都继承了View类,View组件我们可以和Swing编程中的JPanel,它代表了一个空白的矩形区域。

       View类还有一个重要的子类:ViewGroup,但ViewGroup通常作为其他组件的容器使用。

       Android的所有UI组件都是建立在ViewViewGroup基础之上的:

 

 

在前面的介绍中,我们也说了Android推荐使用XML布局文件来定义用户界面,而不是使用Java代码来开发用户界面,因此所有组件都提供了两种方式来控制组件的行为:

       XML布局文件中通过XML属性进行控制;

       Java代码中通过调用方法进行控制;

其实,不管我们使用哪种方式,它们控制Android用户界面行为的本质是完全一样的。大部分时候,控制UI组件的XML属性还有对应的方法。

       对于View类而言,它是所有UI组件的基类,因此它包含了XML属性和方法是所有组件都可以使用的。因为很多,具体方法这里可以查看手册:

 

 

 

ViewGroup继承了View类,当然也可以当成普通View来使用,但ViewGroup主要还是当成容器类来使用,但由于ViewGroup是一个抽象类,因此实际使用中通常是使用ViewGroup的子类来作为容器,例如各种布局管理器。

       ViewGroup容器控制其子组件的分布依赖于ViewGroup.LayoutParamsViewGroup.MarginLayoutParams两个内部类,这两个内部类中都提供了一些XML属性,ViewGroup容器中的子组件可以指定这些XML属性。

 

ViewGroup.LayoutParams支持的属性

XML属性

说明

android.layout_height

指定该子组件的基本高度

android.layout_width

指定该子组件的基本宽度

android.layout_heightandroid.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布局文件加载并构建界面时需要调用该构造器。

 

 

 

 

 

 

 

 

  • 大小: 8.4 KB
  • 大小: 64.2 KB
  • 大小: 14.8 KB
0
0
分享到:
评论

相关推荐

    Android程序界面编程与视图(View)组件.pdf

    Android程序界面编程与视图(View)组件.pdf 学习资料 复习资料 教学资源

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android应用开发揭秘pdf高清版

    《Android应用开发揭秘》内容全面,不仅详细讲解了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 不积跬步...

    Headlines:简单的标题应用程序可在Android中展示具有离线功能的MVVM(Model-View-ViewModel)体系结构

    创建MVVM模式是为了简化事件驱动的用户界面编程。 在MVVM中,ViewModel公开了View可以绑定到的事件流。 因此,ViewModel不再需要保留对View的引用。 这也意味着现在已删除了MVP模式所需的所有接口。 View引用了...

    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 不积跬步...

    android控件及布局.ppt

    Android应用程序界面编程、界面编程与视图(View)组件、使用XML布局控制UI界面、在代码中控制UI界面、使用XML和Java代码共同控制UI界面

    《Google Android开发入门与实战》.pdf

    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...

    android开发揭秘PDF

    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 ...

    Google.Android开发入门与实战

     《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、环境搭建、SDK介绍、Market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个Android平台下的完整综合...

    疯狂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应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言  第一部分 准备篇  第1章 Android开发简介  1.1 Android基本概念  1.1.1 Android简介  1.1.2 Android的系统构架  1.1.3 ...

    Google Android开发入门与实战的代码

    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...

    《Android应用开发揭秘》源码

     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  ...

    疯狂Android讲义.part2

    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 ...

    疯狂Android讲义.part1

    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 ...

Global site tag (gtag.js) - Google Analytics