android常用控件及布局

android常用控件及布局
android常用控件及布局

一、概述

Android的控件体系分为三个类别:

1、基本控件

2、布局

3、容器

这三类控件主要分布在两个包中:

1、android.view 提供抽象接口

2、android.widget 提供系统内置的大部分控件

整个系统得控件都继承自android.view.View ,而布局及容器类继承自android.view.ViewGroup。

基本控件主要包括ImageView、ProgressBar、SurfaceView、TextView、EditText等。

布局

虽然布局跟容器均继承自android.view.ViewGroup,但并不像SWT那样提供了面板+布局

的结构,而是每种Layout就是一中特殊的面板,包括AbsoluteLayout、FrameLayout、

LinearLayout、TableLayout、RelativeLayout等。

容器

这里的容器是指采用了特定的布局并且提供了行为的控件,包含ListView、GridView、Gallery、

Spinner等。

二、android常用控件

android常用控件之TextView、EditView、Button、Menu

示例:一个计算应用程序,输入2个数字,点击按钮进行计算两个数的积并且返回结果。

当点击模拟器右侧的Menu按钮,在输入界面中显示一个有关于和退出的菜单。

项目运行效果图:

开发步骤:

1、新建一个Android项目

2、在布局文件中依次添加EditText、TextView、EditText、Button(一定要按照界面

上控件显示的顺序在布局文件中添加)

3、再新建一个布局文件用来显示计算的结果;在这个布局文件中添加一个LinearLayout

和一个TextView(默认的布局文件中默认就有一个LinearLayout,所以不需要手动添加,

新建的布局文件默认为空,所以需要手动添加)

4、编写第一个Activity

a) 让Activity继承android的Activity

b) 重写Activity的onCreate()方法

c) 设置这个Activity的布局文件

d) 根据控件id获得控件对象

e) 设置控件的值,这个值引用的是string.xml中的值,所以还需要在string.xml文件中

设置(最好是使用string.xml中的值,以便实现国际化);这个在布局文件中也能设置;

5、新建一个Activity,ResultActivity

a) 让Activity继承android的Activity

b) 重写Activity的onCreate()方法

c) 设置这个Activity的布局文件

d) 根据控件id获得控件对象

6、在第一个Activity中编写Button的监听器

a) 取得两个EditText控件的值

b) 创建Intent对象

c) 将这两个值存放到Intent对象当中

d) 使用Intent对象启用ResultActivity

e) 将监听器与Button绑定

7、在第二个Activity(ResultActivity)中获得Intent对象

a) 获得Intent对象中保存的值并强制转换成int类型

b) 计算两个值的积

c) 设置控件值

8、在第一个Activity中,重写onCreateOptionsMenu()方法,这个方法是用于添加菜

单中的菜单项,我们添加两个菜单项

9、再在第一个Activity中重写onOptionsItemSelected()方法,这个方法是当点击菜

单中菜单项时调用。判断,当点击退出的时候调用finish()方法

android常用控件之RadioGroup RadioButton CheckBox Toast的使用

RadioGroup、RadioButton的用法

RadioGroup是RadioButton的组。一个RadioGroup里面可以有多个RadioButton,但是只能选中其中的一个RadioButton。

示例:一个应用程序中有两个单选按钮,用于选择男或女。

开发步骤:

1、新建一个Android应用程序

2、编写main.xml文件,添加一个RadioGroup标签(还可以设置此标签内的布局方向是水平布局还是垂直布局)

3、在RadioGroup标签内添加两个RadioButton

4、编写Activity,先声明3个全局变量,用于接收这三个控件对象

5、在onCreate()方法内,根据控件id获得这三个对象并赋给相应的变量

6、编写监听器,监听器实现的是RadioGroup.OnCheckedChangeListener()提供的接口,需要重写里面的public void onCheckedChanged(RadioGroup group, int checkedId) 方法,这个方法的第一个参数是用来接收RadioGroup对象,第二个参数是用来接收被选中的RadioButton的ID。

在这个方法里面可以做一系列的判断和操作,比如判断RadioButton的id是否等于checkedId,如果等于就可以输出一句话或者使用Toast 显示提示消息。

7、将监听器绑定到RadioGroup上

需要主要的是,

a)、这里绑定监听器的是RadioGroup对象而不是RadioButton对象

b)、这里的监听器实现的是RadioGroup.OnCheckedChangeListener()提供的接口。

CheckBox的用法

CheckBox复选框,相信大家都很了解了,这里就不多说了,直接上示例。

示例:一个应用程序中有三个复选框,可以进行多选操作。

开发步骤:

1、新建一个Android应用程序

2、编写main.xml文件,添加三个CheckBox标签

3、编写Activity,先声明3个全局变量,用于接收这三个控件对象

4、为每一个CheckBox都编写一个监听器,该监听器实现的是CompoundButton.OnCheckedChangeListener()提供的接口,需要重写里面的public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)方法,这个方法的第一个参数是用来接收CompoundButton对象,第二个参数是用来接收是否被选中,

在这个方法里面可以做一系列的判断和操作,比如判断某个CheckBox有没有被选中

5、将监听器绑定在对应的CheckBox上

Toast的用法

Toast主要用于提示信息,用起来很方便,一行代码就OK了。

1、创建Toast对象

makeText(Context context, CharSequence text, int duration);

通过调用这个方法,返回一个Toast对象。

第一个参数是上下文对象,通常是你的应用程序或者Activity对象,

第二个参数就是要显示的文本内容,可以格式化文本

第三个参数是持续多长时间来显示消息,有两个常量:LENGTH_SHORT 或者LENGTH_LONG

2、调用show()方法显示。

Toast toast = Toast.makeText(RadioTest.this, "female", Toast.LENGTH_SHORT);

toast.show();

在前面的RadioButton示例中,当选中"女"的单选框时调用Toast。

有一点需要注意的是:RadioGroup的监听器实现是RadioGroup.OnCheckedChangeListener()提供的接口,而CheckBox的监听器实现的是CompoundButton.OnCheckedChangeListener()提供的接口

为什么RadioGroup和CheckBox实现的不是同一个接口呢?

原因大概是因为:

在RadioGroup.OnCheckedChangeListener()里面的onCheckedChanged(RadioGroup group, int checkedId) 方法它里面需要的是一个RadioGroup参数,而RadioGroup并不是CompoundButton的子类,所以它只能再重新写一个这样的接口。

而CheckBox它本身就是CompoundButton的子类,所以它可以直接使用这个接口。

android常用控件之ProgressBar、ListView

ProgressBar(进度条)的使用

示例:一个应用程序有2个ProgressBar,让进度条显示进度。

开发步骤:

1、新建一个android项目

2、在main.xml布局文件中先添加1个ProgressBar控件(firstProgressBar),设置这个进度条是以水平方式展示的,然后再设置这个控件为不显示(这里暂时不显示,我们在后面的程序中写代码将这个控件设置为显示)

3、在main.xml布局文件中再添加1个ProgressBar控件(secondProgressBar),设置该标签的显示样式为默认的(是一个转动的圆圈),然后再同样设置这个控件暂时为不显示

4、在main.xml布局文件中再添加一个Button控件

5、在Activity中编写代码,先获得这2个ProgressBar和Button对象

6、然后编写一个监听器,设置进度条的进度,当每点击一次Button,进度则增加10

7、将监听器绑定到Button对象上

下图为main.xml布局文件的片段:

最后项目实

现的效果为:

ListView的使用ListView的使用相对于之前使用到的一些控件而言要复杂一点,在这里呢,同样是通过一个示例来讲解。

示例:一个应用程序有一个ListView,显示三行信息。

最后项目实现的效果为:

开发步骤:

1、新建一个Android应用程序

2、在布局文件中再添加一个LinearLayout(应用程序新建的时候默认的布局文件里就已经有了一个LinearLayout,现在再添加一个),设置这个LinearLayout的一些属性。

3、在LinearLayout中添加一个ListView,并设置一些属性。

4、新建一个布局文件,这个布局文件呢,是用来布局和显示ListView里面的内容的(我

是这样理解的,不知道大家能不能理解哈)。先在这个布局文件中添加一个LinearLayout,

然后在LinearLayout中添加两个TextView,表示显示两列数据(如果需要显示多列数据

的话当然就是添加多个TextView了)。

Xml代码

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingTop="1dip"

android:paddingBottom="1dip"

android:paddingLeft="10dip"

android:paddingRight="10dip"

>

android:id="@+id/user_name"

android:layout_width="180dip"

android:layout_height="30dip"

android:textSize="10pt"

android:singleLine="true"

/>

android:id="@+id/user_ip"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="10pt"

android:gravity="right"

/>

5、编写Activity

a) 首先要注意的是,这个Activity他继承的不是Activity,而是ListActivity。

b) 创建一个ArrayList,里面存放的是HashMap,而HashMap的键值对都是String类

型。

c) 分别往3个HashMap中存储值

d) 将3个HashMap添加到ArrayList中

e) 创建适配器

f) 绑定到适配器

g) 编写行的点击事件

Java代码

package android.listview;

import java.util.ArrayList;

import java.util.HashMap;

import android.app.ListActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.ListView;

import android.widget.SimpleAdapter;

//注意:这里继承的是ListActivity,而不是Activity

public class ListViewTest extends ListActivity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.360docs.net/doc/b814248939.html,yout.main);

// 创建一个ArrayList,ArrayList里面存放的是HashMap,而HashMap的键值对都是String类型

ArrayList> list = new ArrayList>();

HashMap map1 = new HashMap();

HashMap map2 = new HashMap();

HashMap map3 = new HashMap();

// 分别往3个HashMap中存储值

map1.put("user_name", "zhangsan");

map1.put("user_ip", "192.168.0.1");

map2.put("user_name", "lisi");

map2.put("user_ip", "192.168.0.2");

map3.put("user_name", "wangwu");

map3.put("user_ip", "192.168.0.3");

// 将3个HashMap添加到ArrayList中

list.add(map1);

list.add(map2);

list.add(map3);

//创建适配器

//第一个参数Content:上下文

//第二个参数List>:ArrayList对象,ArrayList里面存放的是HashMap,而HashMap的键值对都是String类型

//第三个参数int resource:内容显示的布局文件

//第四个参数String[] from:被添加到ArrayList中的HashMap中key的名称,要显示的列

//第五个参数int[] to:内容显示的布局文件中,显示内容的控件id

SimpleAdapter listAdapter = new SimpleAdapter(this, list,

https://www.360docs.net/doc/b814248939.html,er, new String[] { "user_name", "user_ip" },

new int[] { https://www.360docs.net/doc/b814248939.html,er_name, https://www.360docs.net/doc/b814248939.html,er_ip });

//绑定到适配器。

setListAdapter(listAdapter);

}

/**

* 列表当中一行的点击事件

* ListView:ListView对象本身

* View:被选中的那一行的View对象

* position:被选中的那一行的位置

* id:被选中的那一行的id

*/

@Override

protected void onListItemClick(ListView l, View v, int position, long id) {

// TODO Auto-generated method stub

super.onListItemClick(l, v, position, id);

//打印出被选中的那一行的位置和id,计数都是从0开始

System.out.println("-------------"+position);

System.out.println("-------------"+id);

}

}

三、android布局

android有多种布局格式,这里只是详细介绍常用的五种格式。RelativeLayout、

LinearLayout、FrameLayout、AbsoluteLayout、TableLayout.。其中LinearLayout

和RelativeLayout是最常用的格式,他们可以通过xml配置文件进行布局。可以查看相

关api:

https://www.360docs.net/doc/b814248939.html,/reference/android/widget/package-summary.h

tml

我这里这是简单介绍这五种格式.

1、FrameLayout

最简单的布局格式,他可以防止任何空件,但是都只能罗列到左上角,不能进行复杂的布局。

可以明显的看到两个视图重叠到了一起。这种布局很少用到。

2、LinearLayout

LinearLayout以你为它设置的垂直或水平的属性值,来排列所有的子元素。所有的子元素

都被堆放在其它元素之后,因此一个垂直列表的每一行只会有一个元素,而不管他们有多

宽,而一个水平列表将会只有一个行高.

可以进行复杂的布局的编排。他是线性的布局。

它可以排出相当复杂的界面,同时可以嵌套使用,所以大多数选择他来进行布局。

3、AbsoluteLayout

AbsoluteLayout 可以让子元素指定准确的x/y坐标值,并显示在屏幕上。

AbsoluteLayout 没有页边框,允许元素之间互相重叠(尽管不推荐)。他是绝对坐标,

所以在实际中不提倡使用。

4、RelativeLayout

RelativeLayout 允许子元素指定他们相对于其它元素或父元素的位置(通过ID 指定)。

因此,你可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。元素按顺序排

列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其它元素将以屏幕中央的相

对位置来排列。这个是相对于AbsoluteLayout 的,采用的相对坐标,所以在实际中比较

常用。

5、TableLayout

TableLayout 将子元素的位置分配到行或列中。一个TableLayout 由许多的TableRow

组成,每个TableRow 都会定义一个row 。TableLayout 容器不会显示row 、cloumns

或cell 的边框线。每个row 拥有0个或多个的cell ;和html中的table查不多少。在

实际中也经常使用。

Android布局详解

之前对于XML的布局方法一直看着不爽,感觉很乱的样子,但时间长了我渐渐发现,这种

程序代码与界面布局完全分开的方法非常顺手,该布局的地方都到main.xml里去写,甚

至界面中显示的字符串都可以集中到string.xml文件中,而主程序的".java"文件中则完全

用于编写代码,思路非常清晰。

首先按照程序的目录结构大致分析:

res/layout/ 这个目录存放的就是布局用的xml文件,一般默认为main.xml

res/values/ 这个目录存放的是一堆常量的xml文件

res/drawable/ 存放的是一些图片什么的,当然图标也在这里

下面主要对layout下的xml文件做个介绍,顺便也把布局的方法总结一下:

文件的开头:

这是在说明xml版本及字符编码

紧接着到了关键的部分:

android:layout_width="wrap_content"

android:layout_height="wrap_content">

其中开头的"LinearLayout"是布局的方式,可以有很多种,最常用的应该就是Linear了,

其他的布局方法等下在后面总结。

接着android:layout_width(height)="wrap_content"是在设置这部分布局的宽高,也

可以是绝对值,当然设置为绝对值时要标上单位。

就之间可以添加控件了,比如要添加一个名字

为btn的Button控件,并且Button上显示的文字是"Test!",可以这样写:

相关文档
最新文档