Android中文翻译组

Android中文API合集（7）

前言

Android中文翻译组是一个非盈利性质的开源组织，至今已超过300人报名参与，关于翻译组的介绍，请看这里。欢迎更多朋友加入，发邮件到over140@gmail.com申请加入。

Android中文翻译组WIKI网站：http://wikidroid.sinaapp.com/。不管是否加入我们，请与我们一起自由编辑和分享相关中文资料。

Android中文翻译组官方网站：http://androidbox.sinaapp.com/。有在线的中文API、开发者指南、开源项目以及Android视频专栏。

本合集发布日期：2012年1月31日，涵盖历次合集内容，最新版请关注翻译组微博：http://weibo.com/android2。

组员作品

译者署名：ritter

译者博客： http://blog.csdn.net/ritterliu

译者作品：

a) Android电池插件V2.1

桌面电池插件，下载地址：

http://www.anzhi.com/soft_85904.html

b) 屏幕多点触摸测试

一个简单的用来 测试你的屏幕支持多少 触摸点的软件

下载地址： http://www.anzhi.com/soft_94050.html

译者署名：answer-huang

译者链接： http://blog.csdn.net/IrishDiamondAnswer

译者作品：

名称：密码箱

简介：PasswordBox可以安全地把你的个人账号和密码保存在你的手机里，互联网发展迅速地今天，需要注册的东西太多了,随之而来的便是太多的：用户名，密码。是否还在烦恼昨天刚刚注册的账号，今天便忘了密码？赶快给你的手机装上它吧，从此不再忘记密码。

下载地址： http://static.apk.hiapk.com/html/2011/11/351657.html


android

类

Manifest

Manifest.permission

Manifest.permission_group


Manifest

译者署名：cofice

译者链接：http://java-cofi.javaeye.com

版本：Android 2.2 r1

结构

继承关系

public final class Manifest extends Object

java.lang.Object

android.Manifest

内部类

class Manifest.permission

权限

class Manifest.permission_group

权限组

构造函数

public Manifest ()

构造函数

补充

文章精选

android Manifest.xml选项


Manifest.permission

译者署名：cofice

译者链接：http://java-cofi.javaeye.com

版本：Android 2.2 r1

结构

继承关系

public static final class Manifest.permission extends Object

java.lang.Object

android. Manifest.permission

常量

ACCESS_CHECKIN_PROPERTIES | 允许在登入数据库的时候读写其中的属性表，并上传改变的值
ACCESS_COARSE_LOCATION | 允许应用访问范围(如WIFI)性的定位
ACCESS_FINE_LOCATION | 允许应用访问精确(如GPS)性的定位
ACCESS_LOCATION_EXTRA_COMMANDS | 允许应访问额外的提供定位的指令
ACCESS_MOCK_LOCATION | 允许应用创建用于测试的模拟定位提供者
ACCESS_NETWORK_STATE | 允许应用访问网络上的信息
ACCESS_SURFACE_FLINGER | 允许应用使用低版本视图的特征
ACCESS_WIFI_STATE | 允许应用访问关羽Wi-Fi网络的信息
ACCOUNT_MANAGER | 允许应用进入帐户认证
AUTHENTICATE_ACCOUNTS | 允许应用为ACCOUNT_MANAGER扮演一个帐户认证系统
BATTERY_STATS | 允许应用去统计电源信息
BIND_APPWIDGET | 允许应用告诉AppWidget哪个应用能够访问该AppWidget的数据
BIND_DEVICE_ADMIN | 必须通过关机接收者的请求来确保只有系统能够与之交互
BIND_INPUT_METHOD | 必须通过InputMethodService的请求来确保只有系统能够与之绑定
BIND_WALLPAPER | 必须通过WallpaperService的请求来确保只有系统能够与之绑定
BLUETOOTH | 允许应用去连接蓝牙设备
BLUETOOTH_ADMIN | 允许应用找到与之连接的蓝牙设备
BRICK | 被请求废止设备(非常危险)
BROADCAST_PACKAGE_REMOVED | 允许应用发出一个程序包被移除的广播消息
BROADCAST_SMS | 允许应用发出一个收到短信的消息
BROADCAST_STICKY | 允许应用发出一个与intent相连的消息
BROADCAST_WAP_PUSH | 允许应用发出一个收到WAP PUSH的广播消息
CALL_PHONE | 允许应用启动一个用户确认电话被拨打而不通过拨打电话的用户界面的的拨打程序
CALL_PRIVILEGED | 允许应用启动一个用户确认电话被拨打而不通过拨打电话的用户界面的的任意号码的拨打，包括紧急号码.
CAMERA | 能够启动照相机设备的请求
CHANGE_COMPONENT_ENABLED_STATE | 允许应用去改变一个应用是否是激活状态
CHANGE_CONFIGURATION | 允许应用修改当前的配置，如本地设置
CHANGE_NETWORK_STATE | 允许应用改变网络的连接状态
CHANGE_WIFI_MULTICAST_STATE | 允许应用进入Wi-Fi的组播方式
CHANGE_WIFI_STATE | 允许应用改变Wi-Fi的连接状态
CLEAR_APP_CACHE | 允许应用清除所有安装在设备上的应用的缓存
CLEAR_APP_USER_DATA | 允许应用清除使用者的信息资料
CONTROL_LOCATION_UPDATES | 允许从广播设备来更新或不更新本地的消息
DELETE_CACHE_FILES | 允许应用删除掉缓存文件
DELETE_PACKAGES | 允许应用删除掉程序包
DEVICE_POWER | 允许低权限的访问电源管理项
DIAGNOSTIC | 允许应用诊断程序资源
DISABLE_KEYGUARD | 允许应用禁用键盘锁
DUMP | 允许应用从系统服务中恢复转储的信息
EXPAND_STATUS_BAR | 允许应用扩大或缩小状态栏
FACTORY_TEST | 如制造商测试的应用一样用终极权限用户运行
FLASHLIGHT | 允许访问手电筒
FORCE_BACK | 允许应用强制的返回操作而不论是不是最终的activity
GET_ACCOUNTS | 允许应用访问账目服务中的统计清单
GET_PACKAGE_SIZE | 允许应用查找出任何程序包使用的空间
GET_TASKS | 允许应用找到关于当前或最近运行的任务和在哪些acitivities里运行
GLOBAL_SEARCH | 这个权限可以被内容提供者用来允许使用全程搜索他们的数据
HARDWARE_TEST | 允许访问硬件及周边设备.
INJECT_EVENTS | 允许应用注入用户事件（键盘、触摸）到事件中然后提供给任意的窗口
INSTALL_LOCATION_PROVIDER | 允许应用安装一个位置提供商到位置管理器中
INSTALL_PACKAGES | 允许应用安装程序包.
INTERNAL_SYSTEM_WINDOW | 允许应用打开被部分系统用户接口使用的窗口
INTERNET | 允许应用打开网络套接口
KILL_BACKGROUND_PROCESSES | 允许应用去呼叫killBackgroundProcesses(String).方法
MANAGE_ACCOUNTS | 允许应用去管理帐户管理者中的重要清单
MANAGE_APP_TOKENS | 允许应用去管理(创建、销毁、顺序)在窗口管理者中的应用
MASTER_CLEAR |
MODIFY_AUDIO_SETTINGS | 允许应用修改全局音频设定
MODIFY_PHONE_STATE | 允许改变拨打电话的状态-电源等
MOUNT_FORMAT_FILESYSTEMS | 允许格式化可移除的存储仓库的文件系统
MOUNT_UNMOUNT_FILESYSTEMS | 允许装备或解除可移除的存储仓库的文件系统
PERSISTENT_ACTIVITY | 允许应用使它的activities更持久稳固
PROCESS_OUTGOING_CALLS | 允许应用监督、限定或终止呼出的电话
READ_CALENDAR | 允许应用读取用户的日历数据
READ_CONTACTS | 允许应用读取用户的联系人数据
READ_FRAME_BUFFER | 允许应用抓取屏幕和更多可获得的缓冲数据
READ_HISTORY_BOOKMARKS | 允许应用去读取(非写)用户浏览历史和书签
READ_INPUT_STATE | 允许应用去的当前键盘和控制的状态
READ_LOGS | 允许应用读取低级别的系统日志文件
READ_OWNER_DATA | 允许应用读取所有者的数据
READ_PHONE_STATE | 允许读取电话的状态
READ_SMS | 允许应用读取短信息.
READ_SYNC_SETTINGS | 允许应用读取同步的设置
READ_SYNC_STATS | 允许应用读取同步的统计数据
REBOOT | 重新启动设备的请求
RECEIVE_BOOT_COMPLETED | 允许应用接收在系统完成启动后发出的ACTION_BOOT_COMPLETED广播信息
RECEIVE_MMS | 允许应用去监听多媒体信息并记录和对起进行处理
RECEIVE_SMS | 允许应用去监听短消息并记录和对起进行处理
RECEIVE_WAP_PUSH | 允许应用监听WAP push信息
RECORD_AUDIO | 允许应用记录音频信息
REORDER_TASKS | 允许应用改变任务的关系位置
RESTART_PACKAGES | 已废弃使用
SEND_SMS | 允许应用发送短消息.
SET_ACTIVITY_WATCHER | 允许应用查看和控制activities是怎样在系统中运行的
SET_ALWAYS_FINISH | 允许应用去控制当activities被覆盖后是否是立即接触结束
SET_ANIMATION_SCALE | 改变动画的比例因子
SET_DEBUG_APP | 设置一个应用为调试模式
SET_ORIENTATION | 允许低级别的设置屏幕的方向
SET_PREFERRED_APPLICATIONS | 已废弃
SET_PROCESS_LIMIT | 允许应用设置可以运行的最大数的应用进程
SET_TIME | 允许应用设置系统时间
SET_TIME_ZONE | 允许应用设置系统时区时间
SET_WALLPAPER | 允许应用设置壁纸
SET_WALLPAPER_HINTS | 允许应用设置锁定的壁纸
SIGNAL_PERSISTENT_PROCESSES | 允许应用发出一个给所有稳定进程信号的请求
STATUS_BAR | 允许应用打开、关闭或使状态栏或图标失去作用
SUBSCRIBED_FEEDS_READ | 允许应用访问内容提供者的签署认证
SUBSCRIBED_FEEDS_WRITE |
SYSTEM_ALERT_WINDOW | 允许应用使用TYPE_SYSTEM_ALERT来打开窗口，并将窗口显示于其他应用的顶端
UPDATE_DEVICE_STATS | 允许应用更新设备资料信息
USE_CREDENTIALS | 允许应用从管理器得到授权请求
VIBRATE | 允许应用访问震动器
WAKE_LOCK | 允许使用电源锁定管理以使进程休眠或屏幕变暗
WRITE_APN_SETTINGS | 允许应用去写入接入点设置
WRITE_CALENDAR | 允许应用写（非读）用户的日历数据
WRITE_CONTACTS | 允许应用写（非读）用户的联系人数据
WRITE_EXTERNAL_STORAGE | 允许应用写（非读）用户的外部存储器
WRITE_GSERVICES | 允许应用修改Google服务地图
WRITE_HISTORY_BOOKMARKS | 允许应用写（非读）用户的浏览器历史和书签
WRITE_OWNER_DATA | 允许应用写（非读）用户的数据
WRITE_SECURE_SETTINGS | 允许应用写或读当前系统设置
WRITE_SETTINGS | 允许应用写或读系统设置
WRITE_SMS | 允许应用写短消息信息
WRITE_SYNC_SETTINGS | 允许应用写同步设置


Manifest.permission_group

译者署名：cofice

译者链接：http://java-cofi.javaeye.com

版本：Android 2.2 r1

结构

继承关系

public static final class Manifest.permission_group extends Object

java.lang.Object

android. Manifest.permission_group

常量

ACCOUNTS | 直接通过统计管理器访问管理的统计
COST_MONEY | 可以用来让用户花钱但不需要通过与他们直接牵涉的权限
DEVELOPMENT_TOOLS | 与开发联盟特征相连的权限组
HARDWARE_CONTROLS | 被用来提供直接访问硬件设备的权限
LOCATION | 用来允许访问用户的当前位置的权限
MESSAGES | 用来允许应用发送用户收到的被拦截的信息
NETWORK | 用来提供访问网络服务的权限
PERSONAL_INFO | 用于提供访问用户私人数据如联系人、日历、电子邮件等的权限
PHONE_CALLS | 用于跟访问和修改拨号状态如截取去话信息、读取和修改电话状态等的权限
STORAGE | 与SD卡访问相关联的权限组
SYSTEM_TOOLS | 与系统API有关联的权限组


android.accessibilityservice

类

AccessibilityService

AccessibilityServiceInfo


AccessibilityService

译者署名：cofice

译者链接：http://java-cofi.javaeye.com

版本：Android 2.2 r1

结构

public abstract class AccessibilityService extends Service

java.lang.Object

android.content.Context

android.content.ContextWrapper

android.app.Service

android.accessibilityservice.AccessibilityService

类概述

当AccessibilityEvent事件被启动后AccessibilityService 会接收回调函数运行于后台，这些事件指的是在用户接口间的状态转换，比如,焦点变化，按钮被点击等。

一些辅助服务继承于此类并且实现它的抽象方法，像这样的一个服务和其他服务一样在AndroidManifest.xml中被声明但它必须被指定操纵“android.accessibilityservice.

AccessibilityService”的意图，下面的是一段例子：

辅助服务的声明周期只能被系统管理，启动或者停止这个服务必须由明确的用户通过启用或停用设备的设定，在系统通过呼叫onServiceConnected()方法与服务绑定后，这个方法才能被想要执行装载的客户端所重载使用，一个辅助服务通过呼叫setServiceInfo(AccessibilityServiceInfo)方法来设定AccessibilityServiceInfo而配置。你可以在任何时候改变这个服务的配置但最好是在重载方法onServiceConnected().中来使用。
一个辅助服务可以在特定的包中注册事件以提供特殊的反馈类型并且当最后一个关联的事件被解除的时候发出明确的超时提醒。

通告策略

对于每个回馈类型只有一个辅助服务被通知，服务登记处按顺序被通知，因此，如果有两个服务为同一个包中的同一回馈类型注册那么第一个会被通知，然而有可能的是，可以为一个给定的回馈类型去把一个服务注册为默认的，这样的话如果没有其他的服务来取代这个事件这个服务就会被呼出使用，换句话说，默认的服务不会与其他的服务竞争并且不管注册的顺序而被通知。

常量

String SERVICE_INTERFACE

声明Intent必须由这个服务来处理

公共方法

abstract void onAccessibilityEvent(AccessibilityEvent event)

参数

event 一个事件

public final IBinder onBind (Intent intent)

实现返回一个内部的辅助接口的实现，子类不能被重写。

参数

intent 与服务相绑定的意图，注意其他任何包含在Intent的外部意图将不能在此使用。

返回值

返回一个客户端可以在服务上访问的IBinder。

public abstract void onInterrupt ()

打断辅助回馈内容时呼叫。

受保护方法

protected void onServiceConnected ()

这个方法是AccessibilityService声明周期的一部分，在系统成功与服务绑定后才被呼叫，如果用来设定AccessibilityServiceInfo.这个方法更为方便。


android.accounts

类

Account


Account

译者署名：张嵩

译者链接：http://xiaoy.sinaapp.com/

版本：Android 4.0 r1

结构

继承关系

public class Account extends Object implements Parcelable

java.lang.Object

android.accounts.Account

类概述

值类型代表在 AccountManager 中的账号。这个对象实现了 Parcelable 并且重写了 equals(Object)和 hashCode()，使得它可以用做 Map 中的key。

常量

public static final Creator<Account> CREATOR

public final String name

public final String type

构造函数

public Account (String name, String type)

public Account (Parcel in)

公共方法

public int describeContents ()

描述各种包含在Parcelable中配置表现的具有特殊意义的对象。

返回值

一个位掩码说明了Parcelable的特殊类型对象的设置。

public boolean equals (Object o)

比较指定对象的实例，并返回表示它们是否相等。为了保证其相等，参数o必须代表相同的对象，该对象作为这个使用类依赖比较的常量。通常约定，这个比较应该是自反，对称，传递的。另外，没有对象引用除非null与null相等。

仅当this==o时默认实现返回true。如果你打算实现自己的equals方法，见编写一个正确的equals方法。

equals和 hashCode()方法的通用约定是如果任何的两个对象相等则返回true，然后两个对象的hashCode()必须返回同样的值。这表示子类对象通常重写两个方法或者两个方法都不重写。

参数

o 这个实例比较的对象

返回值

指定的对象与该对象相等则返回ture，其它情况返回false。

public int hashCode ()

返回当前对象的一个整型哈希码。通过约定，任意两个通过 equals(Object) 方法返回ture的对象必须返回同样的哈希值。这表示子类对象通常重写两个方法或者两个方法都不重写。

注意哈希值是不随时间变化而变化的，除非equals比较发生了变化。

如果你打算实现自己的hashCode方法，见编写一个正确的hashCode方法。

返回值

该对象的哈希值。

public String toString ()

返回一个对象简单的、可读懂的秒速信息。鼓励大家重写该方法并提供考虑到类型与数据的实现。默认的实现等同于以下的表达式：

getClass().getName() + '@' + Integer.toHexString(hashCode())

如果你打算实现自己的toString方法，见编写一个正确的toString方法。

返回值

一个代表此对象的可打印字符串

public void writeToParcel (Parcel dest, int flags)

将这个对象写入Parcel中

参数

dest 应该被写入的Parcel对象

flags 关于对象应该如何写入的附加标记。可能为0或者 PARCELABLE_WRITE_RETURN_VALUE。

补充

文章精选

Android特色开发之账户管理

Android应用开发笔记(7)：构建自己的Android账户与内容同步机制


android.app

类

NotificationManager


NotificationManager

译者署名： liliang1222

版本：Android 4.0 r1

结构

继承关系

public class NotificationManager extends Object

java.lang.Object

android.app.NotificationManager

类概述

该类用来向用户通知发生的事情。用来告诉用户在后台发生的某些事情。

通知有下列一些形式：

l 在状态栏中显示一个图片，可以通过launcher来访问（当用户点击该图片会启动一个预先定义好的intent）

l 打开或者闪烁设备上的LED灯

l 或者通知用户通过闪烁的背光灯、播放声音或者震动

每个通知方法接受一个整型的id，还有一个字符串的标签参数可选，该参数可以为空。这两个参数被用来组成一对（tag，id）或者如果标签没有指定则为（null，id）。这对参数用来在应用程序和系统中标识该通知。所以这对参数在你的程序中应该唯一。

如果你在通知方法时传递该参数对（tag，id）和一些新的通知参数，如果（tag，id）对应的通知应经在运行，则对应的通知会被更新。举个例子来说：如果你传递一个新的状态栏图片，状态栏中老的图片会被新的图片所替换。该（tag，id）也用来传递给cancel（Id）或者cancel（String，int）方法来清除这些通知。

NotificationManager不用实例化，可以通过getSystemService（String）方法来获得。

开发者指南：创建一个通知，请阅读Status Bar Notifications开发者指南。

公共方法

public void cancel (int id)

移除一个已经显示的通知，如果该通知是短暂的，会隐藏视图；如果通知是持久的，会从状态栏中移除。

参数

id 通知的id

public void cancel (String tag，int id)

移除一个已经显示的通知，如果该通知是短暂的，会隐藏视图；如果通知是持久的，会从状态栏中移除。

参数

tag 通知的标签

id 通知的id

public void cancelAll ()

移除所有的已经显示的通知，详细行为见cancel(int)。

public void notify (int id，Notification notification)

提交一个通知在状态栏中显示。如果拥有相同id的通知已经被提交而且没有被移除，该方法会用新的信息来替换之前的通知。

参数

id 应用中通知的唯一标识

notification 一个通知对象用来描述向用户展示什么信息，不能为空

public void notify (String tag，int id，Notification notification)

提交一个通知在状态栏中显示。如果拥有相同标签和相同id的通知已经被提交而且没有被移除，该方法会用更新的信息来替换之前的通知。

参数

tag 用来标识通知的字符串，可以为空。

id 应用中通知的唯一标识。

notification 一个通知对象用来描述向用户展示什么信息，不能为空。

补充

文章精选

Android中Notification详解【android进化三十五】


android.bluetooth

类

BluetoothAdapter

BluetoothClass

BluetoothClass.Device

BluetoothClass.Device.Major

BluetoothClass.Service

BluetoothDevice

BluetoothServerSocket

BluetoothSocket


BluetoothAdapter

译者署名： Android Club SYSU

译者链接：http://www.android-wiki.net

版本：Android 2.3 r1

结构

继承关系

public final class BluetoothAdapter extends Object

java.lang.Object

android.bluetooth.BluetoothAdapter

类概述

代表本地的蓝牙适配器设备。BluetoothAdapter类让用户能执行基本的蓝牙任务。例如： 初始化设备的搜索，查询可匹配的设备集，使用一个已知的MAC地址来初始化一个BluetoothDevice类，创建一个 BluetoothServerSocket类以监听其它设备对本机的连接请求等。

为了得到这个代表本地蓝牙适配器的 BluetoothAdapter类，调用getDefaultAdapter()这一静态方法。这是所有蓝牙动作使用的第一步。当拥有本地适配器以后， 用户可以获得一系列的BluetoothDevice对象，这些对象代表所有拥有getBondedDevice()方法的已经匹配的设备；用 startDiscovery()方法来开始设备的搜寻；或者创建一个BluetoothServerSocket类，通过 listenUsingRfcommWithServiceRecord(String, UUID)方法来监听新来的连接请求。

Note：大部分方法需要BLUETOOTH权限，一些方法同时需要 BLUETOOTH_ADMIN 权限。

参见

BluetoothDevice

       BluetoothServerSocket

常量

String ACTION_DISCOVERY_FINISHED

广播事件：本地蓝牙适配器已经完成设备的搜寻过程。

需要 BLUETOOTH权限接收。

常量值: "android.bluetooth.adapter.action.DISCOVERY_FINISHED"

String ACTION_DISCOVERY_STARTED

广播事件：本地蓝牙适配器已经开始对远程设备的搜寻过程。

它通常牵涉到一个大概需时12秒的查询扫描过程，紧跟着是一个对每个获取到自身蓝牙名称的新设备的页面扫描。

用户会发现一个把 ACTION_FOUND 常量通知为远程蓝牙设备的注册。
设备查找是一个重量级过程。当查找正在进行的时候，用户不能尝试对新的远程蓝牙设备进行连接，同时存在的连接将获得有限制的带宽以及高等待时间。用户可用 cancelDiscovery()类来取消正在执行的查找进程。

需要 BLUETOOTH权限接收。

常量值: "android.bluetooth.adapter.action.DISCOVERY_STARTED"

String ACTION_LOCAL_NAME_CHANGED

广播活动：本地蓝牙适配器已经更改了它的蓝牙名称。

该名称对远程蓝牙设备是可见的。

它总是包含了一个带有名称的EXTRA_LOCAL_NAME附加域。

需要 BLUETOOTH权限接收。

常量值: "android.bluetooth.adapter.action.LOCAL_NAME_CHANGED"

String ACTION_REQUEST_DISCOVERABLE

Activity活动：显示一个请求被搜寻模式的系统活动。如果蓝牙模块当前未打开，该活动也将请求用户打开蓝牙模块。

被搜寻模式和 SCAN_MODE_CONNECTABLE_DISCOVERABLE 等价。当远程设备执行查找进程的时候，它允许其发现该蓝牙适配器。

从隐私安全考虑，Android不会将被搜寻模式设置为默认状态。

该意图的发送者可以选择性地运用 EXTRA_DISCOVERABLE_DURATION 这个附加域去请求发现设备的持续时间。普遍来说，对于每一请求，默认的持续时间为120秒，最大值则可达到300秒。

Android 运用 onActivityResult(int, int, Intent)回收方法来传递该活动结果的通知。被搜寻的时间（以秒为单位）将通过resultCode值来显示，如果用户拒绝被搜寻，或者设备产生了错 误，则通过 RESULT_CANCELED 值来显示。

每当扫描模式变化的时候，应用程序可以为通过 ACTION_SCAN_MODE_CHANGED 值来监听全局的消息通知。比如，当设备停止被搜寻以后，该消息可以被系统通知給应用程序。

需要 BLUETOOTH权限

常量值: "android.bluetooth.adapter.action.REQUEST_DISCOVERABLE"

String ACTION_REQUEST_ENABLE

Activity活动：显示一个允许用户打开蓝牙模块的系统活动。

当蓝牙模块完成打开工作，或者当用户决定不打开蓝牙模块时，系统活动将返回该值。

Android 运用 onActivityResult(int, int, Intent)回收方法来传递该活动结果的通知。如果蓝牙模块被打开，将通过resultCode值 RESULT_OK 来显示；如果用户拒绝该请求，或者设备产生了错误，则通过 RESULT_CANCELED 值来显示。

每当蓝牙模块被打开或者关闭，应用程序可以为通过 ACTION_STATE_CHANGED 值来监听全局的消息通知。

需要 BLUETOOTH权限

常量值: "android.bluetooth.adapter.action.REQUEST_ENABLE"

String ACTION_SCAN_MODE_CHANGED

广播活动：指明蓝牙扫描模块或者本地适配器已经发生变化

它总是包含 EXTRA_SCAN_MODE 和 EXTRA_PREVIOUS_SCAN_MODE。这两个附加域各自包含了新的和旧的扫描模式。

需要 BLUETOOTH权限

常量值: "android.bluetooth.adapter.action.SCAN_MODE_CHANGED"

String ACTION_STATE_CHANGED

广播活动：本来的蓝牙适配器的状态已经改变。

例如：蓝牙模块已经被打开或者关闭。

它总是包含 EXTRA_STATE 和 EXTRA_PREVIOUS_STATE。这两个附加域各自包含了新的和旧的状态。

需要 BLUETOOTH权限接收

常量值: "android.bluetooth.adapter.action.STATE_CHANGED"

int ERROR

标记该类的错误值。确保和该类中的任意其它整数常量不相等。它为需要一个标记错误值的函数提供了便利。例如：

Intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)

常量值: -2147483648 (0x80000000)

String EXTRA_DISCOVERABLE_DURATION

试图在 ACTION_REQUEST_DISCOVERABLE 常量中作为一个可选的整型附加域，来为短时间内的设备发现请求一个特定的持续时间。默认值为120秒，超过300秒的请求将被限制。这些值是可以变化的。

常量值: "android.bluetooth.adapter.extra.DISCOVERABLE_DURATION"

String EXTRA_LOCAL_NAME

试图在 ACTION_LOCAL_NAME_CHANGED 常量中作为一个字符串附加域，来请求本地蓝牙的名称。

常量值: "android.bluetooth.adapter.extra.LOCAL_NAME"

String EXTRA_PREVIOUS_SCAN_MODE

试图在 ACTION_SCAN_MODE_CHANGED 常量中作为一个整型附加域，来请求以前的扫描模式。可能值有: SCAN_MODE_NONE, SCAN_MODE_CONNECTABLE, SCAN_MODE_CONNECTABLE_DISCOVERABLE

常量值: "android.bluetooth.adapter.extra.PREVIOUS_SCAN_MODE"

String EXTRA_PREVIOUS_STATE

试图在 ACTION_STATE_CHANGED 常量中作为一个整型附加域，来请求以前的供电状态。 可能值有: STATE_OFF, STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF

常量值: "android.bluetooth.adapter.extra.PREVIOUS_STATE"

String EXTRA_SCAN_MODE

试图在 ACTION_SCAN_MODE_CHANGED 常量中作为一个整型附加域，来请求当前的扫描模式.可能值有: SCAN_MODE_NONE, SCAN_MODE_CONNECTABLE, SCAN_MODE_CONNECTABLE_DISCOVERABLE

常量值: "android.bluetooth.adapter.extra.SCAN_MODE"

String EXTRA_STATE

试图在 ACTION_STATE_CHANGED 常量中作为一个整型附加域，来请求当前的供电状态。 可能值有: STATE_OFF, STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF

常量值: "android.bluetooth.adapter.extra.STATE"

int SCAN_MODE_CONNECTABLE

指明在本地蓝牙适配器中，查询扫描功能失效，但页面扫描功能有效。因此该设备不能被远程蓝牙设备发现，但如果以前曾经发现过该设备，则远程设备可以对其进行连接。

常量值: 21 (0x00000015)

int SCAN_MODE_CONNECTABLE_DISCOVERABLE

指明在本地蓝牙适配器中，查询扫描功能和页面扫描功能都有效。因此该设备既可以被远程蓝牙设备发现，也可以被其连接。

常量值: 23 (0x00000017)

int SCAN_MODE_NONE

指明在本地蓝牙适配器中，查询扫描功能和页面扫描功能都失效. 因此该设备既不可以被远程蓝牙设备发现，也不可以被其连接。

常量值: 20 (0x00000014)

int STATE_OFF

指明本地蓝牙适配器模块已经关闭

常量值: 10 (0x0000000a)

int STATE_ON

指明本地蓝牙适配器模块已经打开，并且准备被使用。

常量值: 12 (0x0000000c)

int STATE_TURNING_OFF

指明本地蓝牙适配器模块正在关闭。本地客户端可以立刻尝试友好地断开任意外部连接。

常量值: 13 (0x0000000d)

int STATE_TURNING_ON

指明本地蓝牙适配器模块正在打开. 然而本地客户在尝试使用这个适配器之前需要为 STATE_ON 状态而等待。

常量值: 11 (0x0000000b)

公共方法

public boolean cancelDiscovery ()

取消当前的设备发现查找进程

需要 BLUETOOTH_ADMIN 权限。

因为对蓝牙适配器而言，查找是一个重量级的过程，因此这个方法必须在尝试连接到远程设备前使用用connect()方法进行调用。发现的过程不会由活动来进行管理，但是它会作为一个系统服务来运行，因此即使它不能直接请求这样的一个查询动作，也必需取消该搜索进程。

如果蓝牙状态不是 STATE_ON，这个API将返回false。蓝牙打开后，等待ACTION_STATE_CHANGED更新成STATE_ON。

返回值

成功则返回true，有错误则返回false。

public static boolean checkBluetoothAddress (String address)

验证皆如"00:43:A8:23:10:F0"之类的蓝牙地址。

字母必须为大写才有效。

参数

address 字符串形式的蓝牙模块地址

返回值

地址正确则返回true，否则返回false。

public boolean disable ()

关闭本地蓝牙适配器—不能在没有明确关闭蓝牙的用户动作中使用。

这个方法友好地停止所有的蓝牙连接，停止蓝牙系统服务，以及对所有基础蓝牙硬件进行断电。

没有用户的直接同意，蓝牙永远不能被禁止。这个disable()方法只提供了一个应用，该应用包含了一个改变系统设置的用户界面（例如“电源控制”应用）。

这 是一个异步调用方法：该方法将马上获得返回值，用户要通过监听ACTION_STATE_CHANGED值来获取随后的适配器状态改变的通知。如果该调用 返回true值，则该适配器状态会立刻从STATE_ON转向STATE_TURNING_OFF，稍后则会转为STATE_OFF或者 STATE_ON。如果该调用返回false，那么系统已经有一个保护蓝牙适配器被关闭的问题—比如该适配器已经被关闭了。

需要 BLUETOOTH_ADMIN 权限。

返回值

如果蓝牙适配器的停止进程已经开启则返回true，如果产生错误则返回false。

public boolean enable ()

打开本地蓝牙适配器—不能在没有明确打开蓝牙的用户动作中使用。

该方法将为基础的蓝牙硬件供电，并且启动所有的蓝牙系统服务。

没有用户的直接同意，蓝牙永远不能被禁止。如果用户为了创建无线连接而打开了蓝牙模块，则其需要ACTION_REQUEST_ENABLE值，该值将提出 一个请求用户允许以打开蓝牙模块的会话。这个enable()值只提供了一个应用，该应用包含了一个改变系统设置的用户界面（例如“电源控制”应用）。

这是一个异步调用方法：该方法将马上获得返回值，用户要通过监听ACTION_STATE_CHANGED值来获取随后的适配器状态改变的通知。如果该调用 返回true值，则该适配器状态会立刻从STATE_OFF转向STATE_TURNING_ON，稍后则会转为STATE_OFF或者 STATE_ON。如果该调用返回false，那么说明系统已经有一个保护蓝牙适配器被打开的问题—比如飞行模式，或者该适配器已经被打开。

需要 BLUETOOTH_ADMIN 权限。

返回值

如果蓝牙适配器的打开进程已经开启则返回true，如果产生错误则返回false。

public String getAddress ()

返回本地蓝牙适配器的硬件地址

例如： "00:11:22:AA:BB:CC"

需要 BLUETOOTH 权限。

返回值

字符串形式的蓝牙模块地址

public Set<BluetoothDevice> getBondedDevices ()

返回已经匹配到本地适配器的BluetoothDevice类的对象集合

如果蓝牙状态不是 STATE_ON，这个API将返回false。蓝牙打开后，等待ACTION_STATE_CHANGED更新成STATE_ON。

需要 BLUETOOTH 权限。

返回值

未被修改的BluetoothDevice类的对象集合，如果有错误则返回null。

public static synchronized BluetoothAdapter getDefaultAdapter ()

获取对默认本地蓝牙适配器的的操作权限。

目前Andoird只支持一个蓝牙适配器，但是API可以被扩展为支持多个适配器。该方法总是返回默认的适配器。

返回值

返回默认的本地适配器，如果蓝牙适配器在该硬件平台上不能被支持，则返回null。

public String getName ()

获取本地蓝牙适配器的蓝牙名称

这个名称对于外界蓝牙设备而言是可见的。

需要 BLUETOOTH 权限。

返回值

该蓝牙适配器名称，如果有错误则返回null

public BluetoothDevice getRemoteDevice (String address)

为给予的蓝牙硬件地址获取一个BluetoothDevice对象。

合法的蓝牙硬件地址必须为大写，格式类似于"00:11:22:33:AA:BB"。checkBluetoothAddress(String)方法可以用来验证蓝牙地址的正确性。

BluetoothDevice类对于合法的硬件地址总会产生返回值，即使这个适配器从未见过该设备。

参数

address 合法的蓝牙MAC地址

异常

IllegalArgumentException 如果地址不合法

public int getScanMode ()

获取本地蓝牙适配器的当前蓝牙扫描模式

蓝牙扫描模式决定本地适配器可连接并且/或者可被远程蓝牙设备所连接。

可能值有: SCAN_MODE_NONE, SCAN_MODE_CONNECTABLE, SCAN_MODE_CONNECTABLE_DISCOVERABLE.

如果蓝牙状态不是 STATE_ON，这个API将返回false。蓝牙打开后，等待ACTION_STATE_CHANGED更新成STATE_ON。

需要 BLUETOOTH 权限。

返回值

扫描模式

public int getState ()

获取本地蓝牙适配器的当前状态

可能值有 STATE_OFF, STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF.
需要BLUETOOTH类

需要 BLUETOOTH 权限。

返回值

current state of Bluetooth adapter

public boolean isDiscovering ()

如果当前蓝牙适配器正处于设备发现查找进程中，则返回真值

设备查找是一个重量级过程。当查找正在进行的时候，用户不能尝试对新的远程蓝牙设备进行连接，同时存在的连接将获得有限制的带宽以及高等待时间。用户可用cencelDiscovery()类来取消正在执行的查找进程。

应用程序也可以为ACTION_DISCOVERY_STARTED或者ACTION_DISCOVERY_FINISHED进行注册，从而当查找开始或者完成的时候，可以获得通知。

如果蓝牙状态不是 STATE_ON，这个API将返回false。蓝牙打开后，等待ACTION_STATE_CHANGED更新成STATE_ON。

需要 BLUETOOTH 权限。

返回值

如果正在查找，则返回true

public boolean isEnabled ()

如果蓝牙正处于打开状态并可用，则返回真值

与getBluetoothState()==STATE_ON 等价

需要 BLUETOOTH 权限。

返回值

如果本地适配器已经打开，则返回true

public BluetoothServerSocket listenUsingRfcommWithServiceRecord (String name, UUID uuid)

创建一个正在监听的安全的带有服务记录的无线射频通信（RFCOMM）蓝牙端口。

一个对该端口进行连接的远程设备将被认证，对该端口的通讯将被加密。

使用accpet（）方法可以获取从监听 BluetoothServerSocket 处新来的连接

该系统分配一个未被使用的无线射频通信通道来进行监听。

该系统也将注册一个服务探索协议（SDP）记录，该记录带有一个包含了特定 的通用唯一识别码（Universally Unique Identifier，UUID），服务器名称和自动分配通道的本地SDP服务。远程蓝牙设备可以用相同的UUID来查询自己的SDP服务器，并搜寻连接 到了哪个通道上。如果该端口已经关闭，或者如果该应用程序异常退出，则这个SDP记录会被移除。

使用 createRfcommSocketToServiceRecord(UUID)从另一使用相同 UUID 的设备来连接到这个端口

需要 BLUETOOTH 权限。

参数

name SDP记录下的服务器名

uuid SDP记录下的UUID

返回值

一个正在监听的无线射频通信蓝牙服务端口

异常

IOException 产生错误，比如蓝牙设备不可用，或者许可无效，或者通道被占用。

public boolean setName (String name)

设置蓝牙或者本地蓝牙适配器的昵称.

这个名字对于外界蓝牙设备而言是可见的。

合法的蓝牙名称最多拥有248位UTF-8字符，但是很多外界设备只能显示前40个字符，有些可能只限制前20个字符。

如果蓝牙状态不是 STATE_ON，这个API将返回false。蓝牙打开后，等待ACTION_STATE_CHANGED更新成STATE_ON。

需要 BLUETOOTH_ADMIN 权限。

参数

name 一个合法的蓝牙名称

返回值

如果该名称已被设定，则返回true，否则返回false

public boolean startDiscovery ()

开始对远程设备进行查找的进程

它通常牵涉到一个大概需时12秒的查询扫描过程，紧跟着是一个对每个获取到自身蓝牙名称的新设备的页面扫描。

这是一个异步调用方法：该方法将马上获得返回值，注册ACTION_DISCOVERY_STARTED and ACTION_DISCOVERY_FINISHED意图准确地确定该探索是处于开始阶段或者完成阶段。注册ACTION_FOUND以活动远程蓝牙设备 已找到的通知。

设备查找是一个重量级过程。当查找正在进行的时候，用户不能尝试对新的远程蓝牙设备进行连接，同时存在的连接将获得有限制的带宽以 及高等待时间。用户可用cencelDiscovery()类来取消正在执行的查找进程。发现的过程不会由活动来进行管理，但是它会作为一个系统服务来运 行，因此即使它不能直接请求这样的一个查询动作，也必需取消该搜索进程。

设备搜寻只寻找已经被连接的远程设备。许多蓝牙设备默认不会被搜寻到，并且需要进入到一个特殊的模式当中。

如果蓝牙状态不是 STATE_ON，这个API将返回false。蓝牙打开后，等待ACTION_STATE_CHANGED更新成STATE_ON。

需要 BLUETOOTH_ADMIN 权限。

返回值

成功返回true，错误返回false。

补充

文章精选

Android蓝牙开发浅谈

Android蓝牙API之BluetoothAdapter类(1)

Android蓝牙API之BluetoothAdapter类(2)

Ophone平台蓝牙编程基础


BluetoothClass

译者署名： Android Club SYSU

译者链接：http://www.android-wiki.net

版本：Android 2.3 r1

结构

继承关系

public final class BluetoothClass extends Object implements Parcelable

java.lang.Object

android.bluetooth.BluetoothClass

类概述

代表一个描述了设备通用特性和功能的蓝牙类。比如，一个蓝牙类会指定皆如电话、计算机或耳机的通用设备类型，可以提供皆如音频或者电话的服务。

每个蓝牙类都是有0个或更多的服务类，以及一个设备类组成。设备类将被分解成主要和较小的设备类部分。

BluetoothClass 用作一个能粗略描述一个设备（比如关闭用户界面上一个图标的设备）的线索，但当蓝牙服务事实上是被一个设备所支撑的时候，BluetoothClass的 介绍则不那么可信任。精确的服务搜寻通过SDP请求来完成。当运用 createRfcommSocketToServiceRecord(UUID) 和 listenUsingRfcommWithServiceRecord(String, UUID)来创建RFCOMM端口的时候，SDP请求就会自动执行。

使用 getBluetoothClass()方法来获取为远程设备所提供的类。

内部类

class BluetoothClass.Device

定义所有设备类的常量

class BluetoothClass.Service

定义所有服务类的常量

公共方法

public int describeContents ()

描述包含在可封装编组的表示中所有特殊对象的种类。

返回值

一个指示被Parcelabel所排列的特殊对象类型集合的位掩码。

public boolean equals (Object o)

比较带有特定目标的常量。如果他们相等则标示出来。 为了保证其相等，o必须代表相同的对象，该对象作为这个使用类依赖比较的常量。通常约定，该比较既要可移植又需灵活。

当且仅当o是一个作为接收器（使用==操作符来做比较）的精确相同的对象是，这个对象的实现才返回true值。子类通常实现equals(Object)方法，这样它才会重视这两个对象的类型和状态。

通常约定，对于equals(Object)和hashCode() 方法，如果equals对于任意两个对象返回真值，那么hashCode()必须对这些对象返回相同的纸。这意味着对象的子类通常都覆盖或者都不覆盖这两个方法。

参数

o 需要对比常量的对象

返回值

如果特定的对象和该对象相等则返回true，否则返回false。

public int getDeviceClass ()

返回 BluetoothClass 中的设备类部分（主要的和较小的）

从函数中返回的值可以和在 BluetoothClass.Device 中的公共常量做比较，从而确定哪个设备类在这个蓝牙类中是被编码的。

返回值

设备类部分

public int getMajorDeviceClass ()

返回 BluetoothClass 中设备类的主要部分

从函数中返回的值可以和在 BluetoothClass.Device.Major 中的公共常量做比较，从而确定哪个主要类在这个蓝牙类中是被编码的。

返回值

主要设备类部分

public boolean hasService (int service)

如果该指定服务类被 BluetoothClass 所支持，则返回true

在 BluetoothClass.Service 中，合法的服务类是公共常量，比如 AUDIO 类。

参数

service 合法服务类

返回值

如果该服务类可被支持，则返回true

public int hashCode ()

返回这个对象的整型哈希码。按约定，任意两个在 equals(Object)中返回true的对象必须返回相同的哈希码。这意味着对象的子类通常通常覆盖或者都不覆盖这两个方法。

注意：除非同等对比信息发生改变，否则哈希码不随时间改变而改变。

如果你想要实现你自己的哈希码方法，参见Writing a correct hashCode method。

返回值

该对象的哈希码

public String toString ()

返回这个对象的字符串，该字符串包含精确且可读的介绍。系统鼓励子类去重写该方法，并且提供了能对该对象的类型和数据进行重视的实现方法。默认的实现方法只是简单地把类名、“@“符号和该对象hashCode()方法的16进制数连接起来（如下列所示的表达式）：

如果你想实现你自己的toString方法，参见Writing a useful toString method。

返回值

该对象中一个可被打印的字符串。

public void writeToParcel (Parcel out, int flags)

将类的数据写入外部提供的Parcel中

参数

out 对象需要被写入的Parcel

flags 和对象需要如何被写入有关的附加标志。可能是0，或者可能是 PARCELABLE_WRITE_RETURN_VALUE。


BluetoothClass.Device

译者署名： Android Club SYSU

译者链接：http://www.android-wiki.net

版本：Android 2.3 r1

结构

继承关系

public final class BluetoothClass.Device extends Object

java.lang.Object

android.bluetooth.BluetoothClass.Device

类概述

定义所有的设备类常量

每个 BluetoothClass 对一个带有主要和较小部分的设备类进行编码。

BluetoothClass.Device 中的常量代表主要和较小的设备类部分（完整的设备类）的组合。

BluetoothClass.Device.Major 的常量只能代表主要设备类。

参见服务类的常量 BluetoothClass.Service。

内部类

class BluetoothClass.Device.Major

定义了所有的主要设备类常量

常量

int AUDIO_VIDEO_CAMCORDER

int AUDIO_VIDEO_CAR_AUDIO

int AUDIO_VIDEO_HANDSFREE

int AUDIO_VIDEO_HEADPHONES

int AUDIO_VIDEO_HIFI_AUDIO

int AUDIO_VIDEO_LOUDSPEAKER

int AUDIO_VIDEO_MICROPHONE

int AUDIO_VIDEO_PORTABLE_AUDIO

int AUDIO_VIDEO_SET_TOP_BOX

int AUDIO_VIDEO_UNCATEGORIZED

int AUDIO_VIDEO_VCR

int AUDIO_VIDEO_VIDEO_CAMERA

int AUDIO_VIDEO_VIDEO_CONFERENCING

int AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER

int AUDIO_VIDEO_VIDEO_GAMING_TOY

int AUDIO_VIDEO_VIDEO_MONITOR

int AUDIO_VIDEO_WEARABLE_HEADSET

int COMPUTER_DESKTOP

int COMPUTER_HANDHELD_PC_PDA

int COMPUTER_LAPTOP

int COMPUTER_PALM_SIZE_PC_PDA

int COMPUTER_SERVER

int COMPUTER_UNCATEGORIZED

int COMPUTER_WEARABLE

int HEALTH_BLOOD_PRESSURE

int HEALTH_DATA_DISPLAY

int HEALTH_GLUCOSE

int HEALTH_PULSE_OXIMETER

int HEALTH_PULSE_RATE

int HEALTH_THERMOMETER

int HEALTH_UNCATEGORIZED

int HEALTH_WEIGHING

int PHONE_CELLULAR

int PHONE_CORDLESS

int PHONE_ISDN

int PHONE_MODEM_OR_GATEWAY

int PHONE_SMART

int PHONE_UNCATEGORIZED

int TOY_CONTROLLER

int TOY_DOLL_ACTION_FIGURE

int TOY_GAME

int TOY_ROBOT

int TOY_UNCATEGORIZED

int TOY_VEHICLE

int WEARABLE_GLASSES

int WEARABLE_HELMET

int WEARABLE_JACKET

int WEARABLE_PAGER

int WEARABLE_UNCATEGORIZED

int WEARABLE_WRIST_WATCH


BluetoothClass.Device.Major

译者署名： Android Club SYSU

译者链接：http://www.android-wiki.net

版本：Android 2.3 r1

结构

继承关系

public static class BluetoothClass.Device.Major extends Object

java.lang.Object

android.bluetooth.BluetoothClass.Device.Major

类概述

定义所有的主要设备类常量。

常量

int AUDIO_VIDEO

int COMPUTER

int HEALTH

int IMAGING

int MISC

int NETWORKING

int PERIPHERAL

int PHONE

int TOY

int UNCATEGORIZED

int WEARABLE


BluetoothClass.Service

译者署名： Android Club SYSU

译者链接：http://www.android-wiki.net

版本：Android 2.3 r1

结构

继承关系

public static final class BluetoothClass.Service extends Object

java.lang.Object

android.bluetooth.BluetoothClass.Service

类概述

定义所有的服务类常量
任意 BluetoothClass 由0或多个服务类编码。

常量

int AUDIO

int CAPTURE

int INFORMATION

int LIMITED_DISCOVERABILITY

int NETWORKING

int OBJECT_TRANSFER

int POSITIONING

int RENDER

int TELEPHONY


BluetoothDevice

译者署名： Android Club SYSU

译者链接：http://www.android-wiki.net

版本：Android 2.3 r1

结构

继承关系

public final class BluetoothDevice extends Object implements Parcelable

java.lang.Object

android.bluetooth.BluetoothDevice

类概述

代表一个远程蓝牙设备。让你创建一个带有各自设备的BluetoothDevice或者查询其皆如名称、地址、类和连接状态等信息。

对于蓝牙硬件地址而言，这个类仅仅是一个瘦包装器。这个类的对象是不可改变的。这个类上的操作会使用这个用来创建BluetoothDevice类的BluetoothAdapter类执行在远程蓝牙硬件上。

为了获得BluetoothDevice,类，使用BluetoothAdapter.getRemoteDevice(String)方法去创建一个表示 已知MAC地址的设备（用户可以通过带有BluetoothAdapter类来完成对设备的查找）或者从一个通过 BluetoothAdapter.getBondedDevices()得到返回值的有联系的设备集合来得到该设备。

注意：需要 BLUETOOTH 权限

参见

BluetoothAdapter

BluetoothSocket

常量

String ACTION_ACL_CONNECTED

广播活动：指明一个与远程设备建立的低级别（ACL）连接。

总是包含 EXTRA_DEVICE 附加域

ACL连接通过Android蓝牙栈自动进行管理

需要 BLUETOOTH权限接收

     常量值: "android.bluetooth.device.action.ACL_CONNECTED"

String ACTION_ACL_DISCONNECTED

广播活动：指明一个来自于远程设备的低级别（ACL）连接的断开

总是包含 EXTRA_DEVICE 附加域

ACL连接通过Android蓝牙栈自动进行管理

需要 BLUETOOTH权限接收

常量值: "android.bluetooth.device.action.ACL_DISCONNECTED"

String ACTION_ACL_DISCONNECT_REQUESTED

广播活动：指明一个为远程设备提出的低级别（ACL）的断开连接请求，并即将断开连接。

对于友好的断开连接，该常量是有作用的。应用程序可以用它作为暗示去马上中断对远程设备的高级别的连接（RFCOMM,L2CAP,或者其它连接）。

总是包含 EXTRA_DEVICE 附加域

需要 BLUETOOTH权限接收

常量值: "android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED"

String ACTION_BOND_STATE_CHANGED

广播活动：指明一个远程设备的连接状态的改变。比如，当一个设备已经被匹配。

总是包含EXTRA_DEVICE, EXTRA_BOND_STATE和 EXTRA_PREVIOUS_BOND_STATE.这些附加域。

需要 BLUETOOTH权限接收

常量值: "android.bluetooth.device.action.BOND_STATE_CHANGED"

String ACTION_CLASS_CHANGED

广播活动：一个已经改变的远程设备的蓝牙类。

总是包含EXTRA_DEVICE和EXTRA_BOND_STATE这些附加域。

需要 BLUETOOTH权限接收

  参见

     ERROR(BluetoothClass} /{@link BluetoothClass})

  常量值: "android.bluetooth.device.action.CLASS_CHANGED"

String ACTION_FOUND

广播活动：发现远程设备

当一个远程设备在查找过程中被发现时，发送该常量值。

总是包含 EXTRA_DEVICE 和 EXTRA_CLASS 这些附加域。如果可用的话，也可包含 EXTRA_NAME 和/或 EXTRA_RSSI 这些附加域。

需要 BLUETOOTH权限接收

常量值: "android.bluetooth.device.action.FOUND"

String ACTION_NAME_CHANGED

广播活动：指明一个远程设备的昵称第一次找到，或者自从最后一次找到该昵称开始已经改变。

总是包含EXTRA_DEVICE和EXTRA_NAME这些附加域

需要 BLUETOOTH权限接收

常量值: "android.bluetooth.device.action.NAME_CHANGED"

int BOND_BONDED

指明远程设备已经匹配。

一个共享的连接键为了远程设备而存在于本地，因而设备间的通讯可以被认证和加密。

和远程设备的匹配并不意味着设备间已经成功连接。它只意味着匹配过程已经在稍早之前完成，并且连接键已经存储在本地，准备在下次连接的时候使用。

常量值: 12 (0x0000000c)

int BOND_BONDING

指明和远程设备的匹配正在进行中

常量值: 11 (0x0000000b)

int BOND_NONE

指明远程设备未被匹配。

不存在为了远程设备而已经共享的连接键，因而设备间的通讯（如果完全被允许）不可被认证和加密。

常量值: 10 (0x0000000a)

Creator<BluetoothDevice> CREATOR

int ERROR

该 类的错误标志值. 标记该类的错误值。确保和该类中的任意其它整数常量不相等。它为需要一个标记错误值的函数提供了便利。例如： Intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)

常量值: -2147483648 (0x80000000)

String EXTRA_BOND_STATE

作为一个 ACTION_BOND_STATE_CHANGED 的整型附加域。包含了远程设备的匹配状态。

可能值有: BOND_NONE, BOND_BONDING, BOND_BONDED.

常量值: "android.bluetooth.device.extra.BOND_STATE"

String EXTRA_CLASS

作为一个 ACTION_FOUND 和 ACTION_CLASS_CHANGED 的Parcelabe BluetoothClass 附加域。

常量值: "android.bluetooth.device.extra.CLASS"

String EXTRA_DEVICE

每次通过该类进行广播时，作为Parcelable BluetoothDevice的附加域。它包含了该常量适用的BluetoothDevice类。

常量值: "android.bluetooth.device.extra.DEVICE"

String EXTRA_NAME

作为ACTION_NAME_CHANGED和ACTION_FOUND的字符串附加域。它包含了这个蓝牙昵称。

常量值: "android.bluetooth.device.extra.NAME"

String EXTRA_PREVIOUS_BOND_STATE

作为ACTION_BOND_STATE_CHANGED的整型附加域。包含了远程设备以前的匹配状态。

可能值有: BOND_NONE, BOND_BONDING, BOND_BONDED.

常量值: "android.bluetooth.device.extra.PREVIOUS_BOND_STATE"

String EXTRA_RSSI

作为ACTION_FOUND的可选短整型附加域。包含了被蓝牙硬件通知的远程设备的RSSI(Receive Signal Strength Indication，接收信号强度指示)值。

常量值: "android.bluetooth.device.extra.RSSI"

公共方法

public BluetoothSocket createRfcommSocketToServiceRecord (UUID uuid)

该方法是为了使用带有listenUsingRfcommWithServiceRecord(String, UUID)方法来进行对等的蓝牙应用而设计的。

使用connect()初始化这个外界连接。它也将执行一个已给与UUID的SDP查找，从而确定连接到哪个通道上。

远程设备将被认证，在这个端口上的通讯会被加密。

提示：如果你正试图连接蓝牙串口，那么使用众所周知的SPP UUID 00001101-0000-1000-8000-00805F9B34FB。但是你如果正试图连接Android设备那么请你生成你自己的专有UUID。

需要 BLUETOOTH 权限。

参数

uuid 查询RFCOMM通道的服务记录UUID

返回值

一个准备好外界连接的RFCOMM蓝牙服务端口

异常

IOException 出现错误，比如蓝牙模块不可用，或者许可无效。

public int describeContents ()

描述了包含在Parcelable's marshalled representation中的特殊对象的种类。

返回值

一个指示被Parcelabel所排列的特殊对象类型集合的位屏蔽。

public boolean equals (Object o)

比较带有特定目标的常量。如果他们相等则标示出来。 为了保证其相等，o必须代表相同的对象，该对象作为这个使用类依赖比较的常量。通常约定，该比较既需要可复制、相等和可传递。另外，没有对象引用的时候null等于null。

默认实现是返回ture，仅当this == o。如果你想实现你自己的 equals方法，参见 Writing a correct equals method。

当且仅当o是一个作为接收器（使用==操作符来做比较）的精确相同的对象是，这个对象的实现才返回true值。子类通常实现equals(Object)方法，这样它才会重视这两个对象的类型和状态。

通常约定，对于equals(Object)和hashCode() 方法，如果equals对于任意两个对象返回真值，那么hashCode()必须对这些对象返回相同的纸。这意味着对象的子类通常都覆盖或者都不覆盖这两个方法。

参数

o 需要对比常量的对象

返回值

如果指定的对象和该对象相等则返回true，否则返回false。

public String getAddress ()

返回该蓝牙设备的硬件地址

例如： "00:11:22:AA:BB:CC".

返回值

字符串类型的蓝牙硬件地址

public BluetoothClass getBluetoothClass ()

获取远程设备的蓝牙类

需要 BLUETOOTH 权限。

返回值

蓝牙类对象出错时返回空值

public int getBondState ()

获取远程设备的连接状态。

连接状态的可能值有: BOND_NONE, BOND_BONDING, BOND_BONDED.

需要 BLUETOOTH 权限。

返回值

连接状态。

public String getName ()

获取远程设备的蓝牙昵称。

当执行设备扫描的时候，本地适配器将自动寻找远程名称。该方法只返回来自存储器中该设备的名称。

需要 BLUETOOTH 权限。

返回值

蓝牙昵称，如果出现问题则返回null。

public int hashCode ()

返回该对象的一个整型哈希值. 通常约定，如果equals对于任意两个对象返回真值，那么hashCode()必须对这些对象返回相同的值。这意味着对象的子类通常都覆盖或者都不覆盖这两个方法。

注意：除非同等对比信息发生改变，否则哈希码不随时间改变而改变。

如果你想要实现你自己的哈希码方法，参见Writing a correct hashCode method。

返回值

该对象的哈希值

public String toString ()

返回该蓝牙设备的字符串表达式。

这是一个蓝牙硬件地址，例如"00:11:22:AA:BB:CC".然而，如果用户明确需要蓝牙硬件地址以防以后 toString()表达式会改变的话，用户总是需要使用 getAddress()方法。

返回值

该蓝牙设备的字符串表达式。

public void writeToParcel (Parcel out, int flags)

将类的数据写入外部提供的Parcel中

参数

out 对象需要被写入的Parcel

flags 和对象需要如何被写入有关的附加标志。可能是0，或者可能是

补充

文章精选

Android提高第十二篇之蓝牙传感应用

Android提高第十三篇之探秘蓝牙隐藏API


BluetoothServerSocket

译者署名： Android Club SYSU

译者链接：http://www.android-wiki.net

版本：Android 2.3 r1

结构

继承关系

public final class BluetoothServerSocket extends Object implements Closeable

java.lang.Object

android.bluetooth.BluetoothServerSocket

类概述

一个蓝牙监听端口。

蓝牙端口监听接口和TCP端口类似：Socket和ServerSocket类。在服务器端，使用BluetoothServerSocket类来创建一个 监听服务端口。当一个连接被BluetoothServerSocket所接受，它会返回一个新的BluetoothSocket来管理该连接。在客户 端，使用一个单独的BluetoothSocket类去初始化一个外接连接和管理该连接。

最通常使用的蓝牙端口是RFCOMM，它是被Android API支持的类型。RFCOMM是一个面向连接，通过蓝牙模块进行的数据流传输方式，它也被称为串行端口规范（Serial Port Profile，SPP）。

为了创建一个对准备好的新来的连接去进行监听 BluetoothServerSocket 类，使用 BluetoothAdapter.listenUsingRfcommWithServiceRecord()方法。然后调用 accept()方法去监 听该链接的请求。在连接建立之前，该调用会被阻断，也就是说，它将返回一个 BluetoothSocket 类去管理该连接。每次获得该类之后，如果不再需 要接受连接，最好调用在 BluetoothServerSocket 类下的 close()方法。关闭 BluetoothServerSocket 类不会关 闭这个已经返回的 BluetoothSocket 类。

BluetoothSocket 类线程安全。特别的，close()方法总会马上放弃外界操作并关闭服务器端口。

注意：需要 BLUETOOTH 权限。

参见

BluetoothSocket

公共方法

public BluetoothSocket accept (int timeout)

阻塞直到超时时间内的连接建立。

在一个成功建立的连接上返回一个已连接的BluetoothSocket类。

每当该调用返回的时候，它可以在此调用去接收以后新来的连接。

close()方法可以用来放弃从另一线程来的调用。

参数

timeout （译者注：阻塞超时时间）

返回值

已连接的 BluetoothSocket

异常

IOException 出现错误，比如该调用被放弃，或者超时。

public BluetoothSocket accept ()

阻塞直到一个连接已经建立。（译者注：默认超时时间设置为-1，见源码）

在一个成功建立的连接上返回一个已连接的BluetoothSocket类。

每当该调用返回的时候，它可以在此调用去接收以后新来的连接。

close()方法可以用来放弃从另一线程来的调用。

返回值

已连接的 BluetoothSocket

异常

IOException 出现错误，比如该调用被放弃，或者超时。

public void close ()

马上关闭端口，并释放所有相关的资源。

在其他线程的该端口中引起阻塞，从而使系统马上抛出一个IO异常。

关闭BluetoothServerSocket不会关闭接受自accept()的任意BluetoothSocket。

异常

IOException


BluetoothSocket

译者署名： Android Club SYSU

译者链接：http://www.android-wiki.net

版本：Android 2.3 r1

结构

继承关系

public final class BluetoothSocket extends Object implements Closeable

java.lang.Object

android.bluetooth.BluetoothSocket

类概述

已连接或连接到蓝牙套接字(socket)。

蓝牙端口监听接口和TCP端口类似：Socket和ServerSocket类。在服务器端，使用BluetoothServerSocket类来创建一个 监听服务端口。当一个连接被BluetoothServerSocket所接受，它会返回一个新的BluetoothSocket来管理该连接。在客户 端，使用一个单独的BluetoothSocket类去初始化一个外接连接和管理该连接。

最通常使用的蓝牙端口是RFCOMM，它是被Android API支持的类型。RFCOMM是一个面向连接，通过蓝牙模块进行的数据流传输方式，它也被称为串行端口规范（Serial Port Profile，SPP）。

为了创建一个BluetoothSocket去连接到一个已知设备，使用方法 BluetoothDevice.createRfcommSocketToServiceRecord()。然后调用connect()方法去尝试一个 面向远程设备的连接。这个调用将被阻塞指导一个连接已经建立或者该链接失效。

为了创建一个BluetoothSocket作为服务端（或者“主机”），查看BluetoothServerSocket文档。

每当该端口连接成功，无论它初始化为客户端，或者被接受作为服务器端，通过getInputStream()和getOutputStream()来打开IO流，从而获得各自的InputStream和OutputStream对象

BluetoothSocket类线程安全。特别的，close()方法总会马上放弃外界操作并关闭服务器端口。

注意：需要 BLUETOOTH 权限。

参见

BluetoothServerSocket

    InputStream

    OutputStream

公共方法

public void close ()

马上关闭该端口并且释放所有相关的资源。

在其它线程的该端口中引起阻塞，从而使系统马上抛出一个IO异常。

异常

IOException

public void connect ()

尝试连接到远程设备。

该方法将阻塞，指导一个连接建立或者失效。如果该方法没有返回异常值，则该端口现在已经建立。

当设备查找正在进行的时候，创建对远程蓝牙设备的新连接不可被尝试。在蓝牙适配器上，设备查找是一个重量级过程，并且肯定会降低一个设备的连接。使用 cancelDiscovery()方法去取消一个外界的查询。查询并不由活动所管理，而作为一个系统服务来运行，所以即使它不能直接请求一个查询，应用 程序也总会调用 cancelDiscovery()方法。

close()方法可以用来放弃从另一线程而来的调用。

异常

IOException 一个错误，例如连接失败。

public InputStream getInputStream ()

通过连接的端口获得输入数据流

即使该端口未连接，该输入数据流也会返回。不过在该数据流上的操作将抛出异常，直到相关的连接已经建立。

返回值

输入流

异常

IOException

public OutputStream getOutputStream ()

通过连接的端口获得输出数据流

即使该端口未连接，该输出数据流也会返回。不过在该数据流上的操作将抛出异常，直到相关的连接已经建立。

返回值

输出流

异常

IOException

public BluetoothDevice getRemoteDevice ()

获得该端口正在连接或者已经连接的远程设备。

返回值

远程设备

补充

文章精选

第四十一讲：Android蓝牙编程入门

Android蓝牙API之BluetoothSocket类

Android蓝牙API之BluetoothSocket类(2)


android.content

类

SharedPreferences


SharedPreferences

译者署名： madgoat

译者链接：http://madgoat.cn

翻译版本：2010-11-1

结构

继承关系

public interface SharedPreferences

android.content.SharedPreferences

类概述

用于访问和修改getSharedPreferences(String, int)返回偏好设置数据(preference data)的一个接口。对于任何一组特殊的preferences，所有的客户端共享一个此类单独的实例。

修改Preferences必须通过一个SharedPreferences.Editor对象，以确保当他们提交存储数据的操作时，preference值保持一致的状态。

注意：当前此类不支持多线程访问。后续将添加。

（译者注：这里译为” 偏好设定”，类似于ini文件，用于保存应用程序的属性设置）

参见

getSharedPreferences(String, int)

内部类

interface SharedPreferences.Editor

用于修改SharedPreferences对象设定值的接口。

interface SharedPreferences.OnSharedPreferenceChangeListener

接口定义一个用于在偏好设定(shared preference)改变时调用的回调函数。

公共方法

public abstract boolean contains (String key)

判断preferences是否包含一个preference。

参数

key 想要判断的preference的名称

返回值

如果preferences中存在preference，则返回true，否则返回false。

public abstract SharedPreferences.Editor edit ()

针对preferences创建一个新的Editor对象，通过它你可以修改preferences里的数据，并且原子化的将这些数据提交回SharedPreferences对象。（译者注：原子化——作为一个整体提交，原子性）

注意：如果你想要在SharedPreferences中实时显示，刚通过Editor对象进行的修改，那么你必须调用commit()方法。

返回值

返回一个SharedPreferences.Editor的新实例，允许你修改SharedPreferences对象里的值。

public abstract Map<String, ?> getAll ()

取得preferences里面的所有值

返回值

返回一个map，其中包含一列preferences中的键值对

异常

空指针异常(NullPointerException)

public abstract boolean getBoolean (String key, boolean defValue)

从preferences中获取一个boolean类型的值。

参数

key 获取的preference的名称

defValue 当此preference不存在时返回的默认值

返回值

如果preference存在，则返回preference的值，否则返回defValue。如果使用此名称的preference不是一个boolean类型，则抛出ClassCastException。

异常

ClassCastException

public abstract float getFloat (String key, float defValue)

从preferences中获取一个float类型的值。

参数

key 获取的preference的名称

defValue 当此preference不存在时返回的默认值

返回值

如果preference存在，则返回preference的值，否则返回defValue。如果使用此名称的preference不是一个float类型，则抛出ClassCastException。

异常

ClassCastException

public abstract int getInt (String key, int defValue)

从preferences中获取一个int类型的值。

参数

key 获取的preference的名称

defValue 当此preference不存在时返回的默认值

返回值

如果preference存在，则返回preference的值，否则返回defValue。如果使用此名称的preference不是一个int类型，则抛出ClassCastException。

异常

ClassCastException

public abstract long getLong (String key, long defValue)

从preferences中获取一个long类型的值。

参数

key 获取的preference的名称

defValue 当此preference不存在时返回的默认值

返回值

如果preference存在，则返回preference的值，否则返回defValue。如果使用此名称的preference不是一个long类型，则抛出ClassCastException。

异常

ClassCastException

public abstract String getString (String key, String defValue)

从preferences中获取一个String类型的值。

参数

key 获取的preference的名称

defValue 当此preference不存在时返回的默认值

返回值

如果preference存在，则返回preference的值，否则返回defValue。如果使用此名称的preference不是一个String类型，则抛出ClassCastException。

异常

ClassCastException

public abstract void registerOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener)

注册一个回调函数，当一个preference发生变化时调用。

参数

listener 将会被调用的回调函数

参见

unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener)

public abstract void unregisterOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener)

注销一个之前(注册)的回调函数

参数

listener 要被注销的回调函数

参见

registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener)

补充

文章精选

SharedPreferences

[Android开发者指南] 第十八讲：Android SharedPreferences和File

SharedPreferences用法

Android程式設計 (十五) 使用SharedPreferences

示例代码

译注：Shared Preferences保存位置：/data/data/app_name/shared_prefs/*.xml

private boolean flag = false;

//取得活动的Preferences对象

SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);

//取得值

flag = settings.getBoolean(“flag”,false);

//取得活动的Preferences对象

SharedPreferences settings = getPreferences(0);

//取得编辑对象

SharedPreferences.Editor editor = settings.edit();

//添加值

editor.putBoolean(“true”,flag);

//提交保存

editor.commit();


android.database.sqlite

接口

SQLiteCursorDriver

类

SQLiteOpenHelper


SQLiteCursorDriver

译者署名：张嵩

译者链接：http://xiaoy.sinaapp.com/

版本：Android 4.0 r1

结构

继承关系

public interface SQLiteCursorDriver

android.database.sqlite.SQLiteCursorDriver

类概述

一个SQLite游标的驱动，它用于创建SQLite游标并且取得游标的通知，在它的生命周期中在有用的事件发生时创建SQLite游标。

公共方法

public abstract void cursorClosed ()

当它被关闭销毁这个对象时被一个SQLite游标调用

public abstract void cursorDeactivated ()

当它被释放时被一个SQLite游标调用

public abstract void cursorRequeried (Cursor cursor)

当它被重新查询时被一个SQLite游标调用

public abstract Cursor query (SQLiteDatabase.CursorFactory factory, String[] bindArgs)

执行查询返回一个结果集的游标

参数

factory 创建游标时使用的游标工厂，如果标准SQLite游标应该返回null

返回值

一个结果集的游标

public abstract void setBindArguments (String[] bindArgs)

设置新的绑定参数。这将影响cursorRequeried()。

参数

bindArgs 新的参数


SQLiteOpenHelper

译者署名：StreamH

译者链接：http://blog.csdn.net/qs_csu

版本：Android 4.0 r1

结构

继承关系

public abstract class SQLiteOpenHelper extends Object

java.lang.Object

android.database.sqlite.SQLiteOpenHelper

类概述

一个帮助类，帮助创建数据库和数据库版本管理。

使用必须创建一个子类来实现其onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int)方法，同时任意实现onOpen(SQLiteDatabase)方法，同时打开数据库操作必须保证数据库存在，如果不存在则创建它，并且对其必要的升级，维护其保持一个最佳的状态。

使用本类提供内容开始创建数据库是非常容易的，首先必须对数据库进行升级，以避免在数据库启动后长期使用而阻塞数据。

举个例子，在NotePad的例子程序中参看类NotePadProvider，在SDK的目录samples/下面。

注意：这个类假定升级的版本号是单调递增的。

构造函数

public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)

创建一个帮助对象，打开或者管理数据库。该方法通常快速返回。数据库并没有实际创建或打开，直到getWritableDatabase() 或getReadableDatabase()其中一个被调用。

参数

context 用来打开或创建数据库

name 数据库文件名，对一个在内存中的数据库而言是null

factory 用来创建对象游标，或者默认为null

version 数据库的序号(从1开始)；如果数据库是旧的，onUpgrade(SQLiteDataBase，int，int)会被调用去升级数据库；如果数据库是新的，onDowngrade(SQLiteDatabase，int，int)会被调用去降级数据库。

public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)

创建一个帮助对象，打开或者管理数据库。该方法通常快速返回。数据库并没有实际创建或打开，直到getWritableDatabase() 或getReadableDatabase()其中一个被调用。

参数

context 用来打开或创建数据库

name 数据库文件名，对一个在内存中的数据库而言是null

factory 用来创建对象游标，或者默认为null

version 数据库的序号(从1开始)；如果数据库是旧的，onUpgrade(SQLiteDataBase，int，int)会被调用去升级数据库；如果数据库是新的，onDowngrade(SQLiteDatabase，int，int)会被调用去降级数据库。

errorHandler 当sqlite报告一个数据库毁坏错误时，DatabaseErrorHandler会被使用。

公共方法

public synchronized void close ()

关闭任何打开的数据库对象。

public String getDatabaseName ()

返回正被打开的通过构造函数传递进来的SQLite数据库的名字。

public synchronized SQLiteDatabase getReadableDatabase ()

创建或打开一个数据库。这和getWritableDatabase()返回的对象是同一个，除非一些因素要求数据库只能以read-only的方式被打开，比如磁盘满了。在这种情况下，一个只读的数据库对象将被返回。如果这个问题被修改掉，将来调用getWritableDatabase()就可能成功，而这时read-only数据库对象将被关闭，并且读写对象将被返回。

像getWritableDatabase()，这个方法需要很长时间才返回，所以你不该在应用程序的主线程中调用它，包括方法ContentProvider.onCreate()。

返回值

一个有效的数据库对象，直到getWritableDatabase() or close() 被调用

异常

SQLiteException 如果数据库不能被打开

public synchronized SQLiteDatabase getWritableDatabase ()

创建或打开一个数据库，用于读写。该方法第一次被调用的时候，数据库被打开，并且onCreate(SQLiteDatabase)，onUpgrade(SQLiteDatabase，int，int) 或onOpen(SQLiteDatabase)将被调用。

一旦成功打开，数据库将被缓存，所以需要写入数据的时候你可以调用这个方法。(当你不再需要这个数据库的时候，确保调用close())。像不健康的许可或磁盘已满等错误都可能导致该方法是不，但是如果该问题被解决，将来的尝试可能会成功。

数据库升级可能会话费很长的时间，所以你不该在应用程序的主线程中调用它，包括方法ContentProvider.onCreate()。

返回值

一个有效的读写数据库对象直到close()被调用。

异常

SQLiteException 如果数据库不能被打开用于写入

public abstract void onCreate (SQLiteDatabase db)

当第一次创建数据库时调用。表格的创建和初始化表格的个数在这里完成。

参数

db 数据库

public void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)

当数据库需要降低版本时候调用。这个方法跟onUpgrade()很相似，但是只要当然版本比被请求的更新，它就会被调用。尽管如此，这个方法不是抽象的，所以它并不强制用户去实现它。如果不被重写，默认的实现将会拒绝降级并且抛出一个SQLiteException。

参数

db 数据库

oldVersionThe 旧版本数据库

newVersionThe 新版本数据库

public void onOpen (SQLiteDatabase db)

当数据库打开时调用。这个实现会在升级数据库之前会检查isReadOnly()。

参数

db 数据库

public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)

当数据库升级时调用。这个实现需要使用该方法去丢弃表格，增加表格，或者做一些其它事情，它需要升级到新的计划中的版本。

SQLite ALTER TABLE文档可以在这找到。如果你添加新的列，你可以使用ALTER TABLE 去把它们插入到活着的表格中。如果你重命名或移动列，你可以使用ALTER TABLE去重命名这些旧的表格，然后创建新的表格，之后把旧表格的数据放到新的表格上。

参数

db 数据库

oldVersionThe 旧版本数据库

newVersionThe 新版本数据库

补充

文章精选

android SQLiteOpenHelper使用示例


android.graphics

接口

类

Bitmap


Bitmap

译者署名：StreamH

译者链接：http://blog.csdn.net/qs_csu

版本：Android 4.0 r1

结构

继承关系

public class Bitmap extends Object implements Parcelable

java.lang.Object

android.graphics.Bitmap

内部类

enum Bitmap.CompressFormat

详细说明位图的压缩格式

enum Bitmap.Config

位图的结构

常量

Int DENSITY_NONE

标志着该位图是以未知的像素密度创建的

参见

getDensity()

setDensity(int)

公共方法

boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream)

把位图的压缩信息写入到一个指定的输出流中。如果返回true，可以通过传递一个相应的输出流到BitmapFactory.decodeStream()来重构该位图。注意：并非所有的格式都直接支持位图结构，所以通过BitmapFactory返回的位图很可能有不同的位深度，或许会丢失每个象素的alpha值(例如，JPEG 只支持不透明像素)。

（译者注：色深(color depth),也称色位深度(bitdePth),是指在一定分辨率下一个像素能够接受的颜色数量范围。通常,色深用2的n次方来表示。例如,8 bit的色深包含2的8次方）

参数

format 图像的压缩格式；

quality 图像压缩比的值，0-100。 0 意味着小尺寸压缩，100意味着高质量压缩。对于有些格式，比如无损压缩的PNG，它就会忽视quality这个参数设置。

stream 写入压缩数据的输出流

返回值

如果成功地把压缩数据写入输出流，则返回true。

public Bitmap copy (Bitmap.Config config, boolean isMutable)

根据该位图的大小产生一个新位图，根据指定的结构设置新位图的结构，然后把位图的像素拷贝到新位图中。如果不支持该转换，或者分配内存失败，那就返回NULL。返回的位图和原图有同样的像素密度。

参数

config 结果图预期的结构；

isMutable 如果是true，那么产生的图片是可变的。(比如，它的像素能被修改)

返回值

新的位图。如果拷贝操作不能执行，则返回NULL。

public void copyPixelsFromBuffer (Buffer src)

从缓存器中拷贝像素值，从当前索引开始，覆盖位图中对应的像素值。在缓存器中的数据不会被改变(不像setPixels()，会把32位去预存像素转换为该位图的格式)。

public void copyPixelsToBuffer (Buffer dst)

把该位图的像素值拷贝到指定的缓存器中(调用者分配的缓存器)。如果缓存区不够大而无法放置所有的像素值(要考虑每个像素值的位数)，或者如果该缓存器的子类不是被支持的类型中的一种(ByteBuffer，ShortBuffer，IntBuffer)，那么将会抛出一个异常。

public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)

返回一个不可改变的位图，该位图来自源位图的子集，并根据可选的矩阵进行转换。它被初始化为跟源位图有同样的密度。

参数

source 产生子位图的源位图；

x 子位图第一个像素在源位图的X坐标

y 子位图第一个像素在源位图的y坐标

width 子位图每一行的像素个数

height 子位图的行数

m 对像素值进行变换的可选矩阵

filter 如果为true，源图要被过滤。该参数仅在matrix包含了超过一个翻转才有效

返回值

一个描述了源图指定子集的位图。

异常

IllegalArgumentException 如果x，y，width，height的值超出了源图的维度，该异常会被抛出。

public static Bitmap createBitmap (int width, int height, Bitmap.Config config)

返回一个指定高度和宽度的不可改变的位图。它的初始密度由getDensity()决定。

参数

width 位图的宽度

height 位图的高度

config 位图的结构

异常

IllegalArgumentException 如果高度或宽度小于等于零，该异常被抛出。

public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height)

返回一个不可变的位图，该位图来自源图指定的子集。新位图可能跟源图同一个对象，或者是源图的一个拷贝。它被初始化为源图同样的密度。

参数

source 用来构建子集的源位图

x 子位图第一个像素在源位图的X坐标

y 子位图第一个像素在源位图的y坐标

width 子位图每一行的像素个数

height 子位图的行数

public static Bitmap createBitmap (int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)

返回一个指定宽度和高度的不可变位图，该位图每个像素值等于颜色数组中对应的值。它初始化的密度由getDensity()来设定。

参数

colors 用来初始化像素值得颜色数组

offset 在像素数组的第一个颜色值之前要忽略的像素个数

stride 行之间像素个数

width 位图的宽度

height 位图的高度

config 位图的结构。如果这个结构不支持每个像素的alpha通道(比如，RGB_565), 那么colors数组中的alpha位将被忽略(被假定为FF值)。

异常

IllegalArgumentException，如果宽度值或高度值小于等于零，或者像素数组的长度小于像素个数，该异常被抛出。

public static Bitmap createBitmap (Bitmap src)

根据源位图返回一个不可改变的位图。新位图可能跟源位图是同一个对象，或者是一个拷贝。新位图被初始化为和源位图有同样的像素密度。

public static Bitmap createBitmap (int[] colors, int width, int height, Bitmap.Config config)

返回一个宽度和高度被指定的不可改变的位图，且该位图每一个像素值由颜色数组中对应的值来设定。它的初始像素密度由getDensity()决定。

参数

colors 用来初始化像素值得颜色数组。该数组必须至少和宽度*高度一样大。 width 位图的宽度

height 位图的高度

config 位图的结构。如果这个结构不支持每个像素的alpha通道(比如，RGB_565), 那么colors数组中的alpha位将被忽略(被假定为FF值)。

异常

IllegalArgumentException 如果宽度值或高度值小于等于零，或者像素数组的长度小于像素个数，该异常被抛出。

public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)

从当前存在的位图，按一定的比例创建一个新的位图。

参数

src 用来构建子集的源位图

dstWidth 新位图期望的宽度

dstHeight 新位图期望的高度

返回值

一个新的按比例变化的位图。

public int describeContents ()

没有特殊的包内容。（原文：No special parcel contents.）

返回值

一个位掩码，指明被Parcelable序列化的特殊对象类型的数据集。

public void eraseColor (int c)

用指定的颜色填充位图的像素值。

异常

IilegalStateException 当该位图不可改变时

public Bitmap extractAlpha ()

返回一个新的位图，该位图从源图中捕获了alpha值。这个方法可能跟Canvas.drawBitmap()一起被画，颜色值从传递过来的画布中获取。

返回值

一个包含源位图alpha通道值的位图。

public Bitmap extractAlpha (Paint paint, int[] offsetXY)

返回一个从源图中获取了alpha值的新位图。这些值可能被可选的画布参数所影响，该画布参数可以包含它自己的alpha值，或可能包含一个能改变结果位图实际尺寸的遮罩滤镜(比如，一个模糊滤镜可以放大结果位图)。如果offsetXY不为空，它会返回最终位图的偏移量总数，这样它就能跟源位图对齐。比如，如果画布包含半径为2的模糊区，那么offsetXY[] 将包含-2，-2，所以位图的alpha值会按照(-2，-2)的偏移量去绘制，然后画源图时会导致模糊区域在视觉上跟源图对齐。

返回位图的初始像素密度跟源图一样。

参数

paint 可选的画布，用来修改被返回位图的alpha值。默认为空值。

offsetXY 可选的数组，它返回x(索引为0) 和y (索引为1)的偏移量，该偏移量被用来定位返回的位图，这样它才会在视觉上跟源位图对齐。

返回值

返回一个新的位图，该位图从源图中捕获了alpha值。这个方法可能跟Canvas.drawBitmap()一起被画，颜色值从传递过来的画布中获取。

public final Bitmap.Config getConfig ()

如果这个位图内在的配置是一种公开的格式，那么返回这个配置，否则返回空值。

public int getDensity ()

返回位图的像素密度。

默认的像素密度和当前的显示密度一样，除非当前的应用程序不支持不同的屏幕密度，当它是DENSITY_DEFAULT时。要注意到兼容模式是由最初装载到进程的应用程序决定的。

--共享同一个进程的应用程序必须有同样的兼容性，或者确保它们能明确地设置合适的位图密度。

返回值

一个默认密度的变换因子，当变换因子未知时返回DENSITY_NONE值。

参见

setDensity(int)

DENSITY_DEFAULT

densityDpi

DENSITY_NONE

public final int getHeight ()

返回位图的高度值。

public byte[] getNinePatchChunk ()

返回一个装有私有数据的可选数组，该数组被UI系统在一些位图中使用。该方法不要在应用程序主动调用。

public int getPixel (int x, int y)

返回指定位置的像素颜色值。如果x或y越界(负数，或各自大于等于宽度或高度值)，讲抛出一个异常。

参数

x 待返回像素的x坐标值(0-width-1)。

y 待返回像素的y坐标值(0-height-1)

返回值

指定坐标的argb颜色值。

异常

如果x，y越界，IilegalArgumentExcepiton将被抛出。

public void getPixels (int[] pixels, int offset, int stride, int x, int y, int width, int height)

把位图的数据拷贝到pixels[]中。每一个都由一个表示颜色值的int值来表示。幅度参数表明调用者允许的像素数组行间距。对通常的填充结果，只要传递宽度值给幅度参数。

参数

pixels 接收位图颜色值的数组

offset 写入到pixels[]中的第一个像素索引值

stride pixels[]中的行间距个数值(必须大于等于位图宽度)。不能为负数

x 从位图中读取的第一个像素的x坐标值。

y 从位图中读取的第一个像素的y坐标值

width 从每一行中读取的像素宽度

height 读取的行数

异常

IilegalArgumentExcepiton 如果x，y，width，height越界或stride的绝对值小于位图宽度时将被抛出。

ArrayIndexOutOfBoundsException 如果像素数组太小而无法接收指定书目的像素值时将被抛出。

public final int getRowBytes ()

返回位图每行像素总数的字节数。要注意，这里说的是位图中原始态存储的像素。如果你调用了getPixels()或者setPixels()，那么像素就会统一地被处理成32bit值，它是根据颜色类进行填充的。

返回值

原生态位图每行像素的字节总数。

public int getScaledHeight (int targetDensity)

一个方便的方法，它能返回被像素密度因子整除后的位图高度值。

参数

targetDensity 位图目标画布的密度

返回值

根据密度比例因子处理后位图的高度值。

public int getScaledHeight (DisplayMetrics metrics)

方便地以DisplayMetrics的目标密度值调用getScaledHeight(int)

public int getScaledHeight (Canvas canvas)

方便地以Canvas的目标密度值调用getScaledHeight(int)

public int getScaledWidth (DisplayMetrics metrics)

方便地以DisplayMetrics的目标密度值调用getScaledWidth(int)

public int getScaledWidth (int targetDensity)

一个方便的方法，它能返回被像素密度因子整除后的位图宽度值。

参数

targetDensity 位图目标画布的密度

返回值

根据密度比例因子处理后位图的宽度值。

public int getScaledWidth (Canvas canvas)

方便地以Canvas的目标密度值调用getScaledWidth (int)

public final int getWidth ()

返回位图的宽度。

public final boolean hasAlpha ()

返回true，如果位图的配置支持每个像素的alpha值，并且这些像素可能包含不透明的alpha值。对于某些配置，一般都返回false(比如，RGB_565)，因为它们不支持每个像素的alpha值。尽管如此，对配置来说，这些位图可能被标记为它所有的像素都是透明的。在这种情况下，hasAlpha()将会返回false。如果一个配置，比如ARGB_8888是没有被标记的，那么它会默认返回true。

public final boolean isMutable ()

如果该位图被标记为可改变(比如，能被画进去)，那么返回true。

public final boolean isRecycled ()

如果该位图已经被回收，返回true。如果那样，若试图获取它的像素值，一个错误将会发生，并且该位图不会被画。

返回值

如果位图已经被回收，返回true。

public void prepareToDraw ()

重建所有与待画位图相关的缓存。在位图可清除的情况下，这个调用会努力保证像素已经被解码。如果这个方法是被有多个位图的序列调用，优先级在LRU顺序中提供(比如，最后被调用的位图拥有最高的优先级)。对于和缓存无关的位图，这个调用时一个no-op，它是无害的。

public void recycle ()

释放和位图相关的本地对象，且清除对像素数据的引用。该方法不会同步释放像素数据。它仅仅允许在没有其它引用的情况下被系统垃圾回收。这个位图被标记为“死的”，意味着如果getPixels()或setPixels()被调用，一个异常会抛出，且它不画任何东西。这个操作不可翻转，所以只有当你确信这个位图没有更多的用处时，它才能被调用。这是一个高级的调用， 且一般来说它不需要被调用，因为通常的垃圾回收过程会在该位图没有其它引用的时候，释放这些内存。

public void setDensity (int density)

指定位图的密度。当位图被画到一个有密度的画布上时，它会缩放到合适的比例

参数

density 该位图的密度缩放因子。如果密度未知，值为DENSITY_NONE。

参见

getDensity()

DENSITY_DEFAULT

densityDpi

DENSITY_NONE

public void setPixel (int x, int y, int color)

把指定的颜色写入到位图中x，y的坐标值的位置(假设该位图是可变的)。

参数

X 待替换像素的x坐标(0到width-1)。

Y 待替换像素的y坐标(0到height-1)

color 写入到位图的颜色值

抛出

IilegalStateException 如果这个位图不可改变

IIlegalArgumentException 如果x，y的值超出位图的边界

public void setPixels (int[] pixels, int offset, int stride, int x, int y, int width, int height)

用数组中的颜色值替换位图的像素值。数组中的每个元素是包装的整型，代表了颜色值。

参数

pixels 写到位图中的颜色值

offset 从pixels[]中读取的第一个颜色值的索引

stride 位图行之间跳过的颜色个数。通常这个值等于位图宽度，但它可以更更大(或负数)

X 被写入位图中第一个像素的x坐标。

Y 被写入位图中第一个像素的y坐标

width 从pixels[]中拷贝的每行的颜色个数

height 写入到位图中的行数

异常

IilegalStateException 如果这个位图不可改变

IIlegalArgumentException 如果x，y，width，height的值超出位图的边界

ArrayIndexOutOfBoundsException 如果像素队列太小以致不能接受指定的像素位数。

public void writeToParcel (Parcel p, int flags)

把位图和它的像素值写入到parcel中。位图可以通过调用CREATOR.createFromParcel()进行重建。

参数

p 可以写入位图数据的parcel对象

flages 附加的标记，表明这个对象以什么方式写入。可能是0或PARCELABLE_WRITE_RETURN_VALUE

补充

文章精选

Android Bitmap和Canvas学习笔记

Android画图学习总结（二）——Bitmap

Android Bitmap内存限制

Android Bitmap转字节数组后大小问题

Android bitmap优化


android.location

接口

LocationListener

GpsStatus.Listener

GpsStatus.NmeaListener

类

Address

Criteria

Geocoder

GpsSatellite

GpsStatus

Location

LocationManager

LocationProvider


LocationListener

译者署名：熊猫82

译者链接： http://wisekingokok.cnblogs.com

版本：Android 3.2 r1

结构

继承关系

public interface LocationListener

android.location.LocationListener

类概述

用于接收从LocationManager的位置发生改变时的通知。如果LocationListener被注册添加到LocationManager对象，并且此LocationManager对象调用了 requestLocationUpdates(String, long, float, LocationListener) 方法，那么接口中的相关方法将会被调用

公共方法

public abstract void onLocationChanged (Location location)

此方法在当位置发生改变后被调用。这里可以没有限制的使用Location对象。

参数

位置发生变化后的新位置。

public abstract void onProviderDisabled(String provider)

此方法在provider被用户关闭后被调用，如果基于一个已经关闭了的provider调用requestLocationUpdates方法被调用，那么这个方法理解被调用。

参数

与之关联的location provider名称。

public abstract void onPorviderEnabled (Location location)

此方法在provider被用户开启后调用。

参数

provider 与之关联的location provider名称。

public abstract void onStatusChanged (String provider, int Status, Bundle extras)

此方法在Provider的状态在可用、暂时不可用和无服务三个状态直接切换时被调用。

参数

provider 与变化相关的location provider名称。

status 如果服务已停止，并且在短时间内不会改变，状态码为OUT_OF_SERVICE；如果服务暂时停止，并且在短时间内会恢复，状态码为TEMPORARILY_UNAVAILABLE；如果服务正常有效，状态码为AVAILABLE。

extras 一组可选参数，其包含provider的特定状态。下面列出一组共用的键值对，其实任何键的provider都需要提供的值。•定位卫星 – 一组用于设备定位的卫星


Geocoder

译者署名：熊猫82

译者链接： http://wisekingokok.cnblogs.com

版本：Android 4.0 r1

结构

继承关系

public final class Geocoder extends Object

java.lang.Object

android.location.Geocoder

类概述

一个处理前向地理编码和反向地理编码的类。地理编码是一个街道、地址或者其他位置（经度、纬度）转化为坐标的过程。反向地理编码是将坐标转换为地址（经度、纬度）的过程。一组反向地理编码结果间可能会有所差异。例如：一个结果可能包含最临近建筑的完整街道地址，而另一个可能只包含城市名称和邮政编码。Geocoder要求的后端服务并没有包含在基本的Android框架中。如果没有此后端服务，执行Geocoder的查询方法将返回一个空列表。使用isPresent()方法，以确定Geocoder是否能够正常执行。

公共构造器

public Geocoder(Context context, Local local)

根据给定的语言环境构造一个Geocoder对象。

参数

context 当前的上下文对象。

local the 当前语言环境

public Geocoder(Context context)

根据给定的系统默认语言环境构造一个Geocoder对象。

参数

context 当前的上下文对象。

公共方法

public List<Address> getFromLocation(double latitude, double longitude, int maxResults)

根据给定的经纬度返回一个描述此区域的地址数组。返回的地址将根据构造器提供的语言环境进行本地化。

返回值有可能是通过网络获取。返回结果是一个最好的估计值，但不能保证其完全正确。

参数

latitude 纬度

longitude 经度

maxResults 要返回的最大结果数，推荐1~5

返回值

一组地址对象。如果没找到匹配项，或者后台服务无效的话则返回null或者空序列。

异常

IllegalArgumentException 纬度小于-90或者大于90

IllegalArgumentException 果经度小于-180或者大于180

IOException 如果没有网络或者IO错误

public List<Address> getFromLocationName(String locationName, int maxResults, double lowerLeftLatitude, double lowerLeftLongitude, double upperRightLatitude, double upperRightLongitude)

返回一个由给定的位置名称参数所描述的地址数组。名称参数可以是一个位置名称，如：“Dalvik, Iceland”，一个地址，如：“1600 Amphitheatre Parkway, Mountain View, CA”，一个机场代号，如：“SFO”，等等……返回的地址将根据构造器提供的语言环境进行本地化。

你也可以指定一个搜索边界框，该边界框由左下方坐标经纬度和右上方坐标经纬度确定。

返回值有可能是通过网络获取。返回结果是一个最好的估计值，但不能保证其完全正确。通过UI主线程的后台线程来调用这个方法可能更加有用。

参数

locationName 用户提供的位置描述

maxResults 要返回的最大结果数，推荐1~5

lowerLeftLatitude 左下角纬度，用来设定矩形范围

lowerLeftLongitude 左下角经度，用来设定矩形范围

upperRightLatitude 右上角纬度，用来设定矩形范围

upperRightLongitude 右上角经度，用来设定矩形范围

返回值

一组地址对象。如果没找到匹配项，或者后台服务无效的话则返回null或者空序列。

异常

IllegalArgumentException 如果位置描述为空

IllegalArgumentException 如果纬度小于-90或者大于90

IllegalArgumentException 如果经度小于-180或者大于180

IOException 如果没有网络或者IO错误

public List<Address> getFromLocationName(String locationName, int maxResults)

返回一个由给定的位置名称参数所描述的地址数组。名称参数可以是一个位置名称，如：“Dalvik, Iceland”，一个地址，如：“1600 Amphitheatre Parkway, Mountain View, CA”，一个机场代号，如：“SFO”，等等……返回的地址将根据构造器提供的语言环境进行本地化。

返回值有可能是通过网络获取。返回结果是一个最好的估计值，但不能保证其完全正确。

通过UI主线程的后台线程来调用这个方法可能更加有用。

参数

locationName 用户提供的位置描述

maxResults 要返回的最大结果数，推荐1~5.

返回值

一组地址对象。如果没找到匹配项，或者后台服务无效的话则返回null或者空序列。

异常

IllegalArgumentException 如果位置描述为空

IOException 如果没有网络或者IO错误

public static boolean isPresent ()

如果Geocoder的getFromLocation和getFromLcationName都实现了则返回true，没有网络连接这些方法仍然可能返回空或者空序列。

补充

文章精选

Android地图开发中的地理编码与地理反编码

Android地图和定位学习总结


GpsStatus

译者署名：熊猫82

译者链接： http://wisekingokok.cnblogs.com

版本：Android 3.2 r1

结构

继承关系

public final class GpsStatus extends Object

java.lang.Object

android.location.GpsStatus

类概述

此类用于表述GPS引擎的当前状态，此类需要和 GpsStatus.Listener 接口结合使用。

常量

int GPS_EVENT_FIRST_FIX

当GPS系统模块接收到第一次GPS定位信息之后发送此事件码。调用getTimeToFirstFix()方法获取自GPS系统模块被开启至第一次定位所消耗的时间。

常量值：3(0x00000003)

int GPS_EVENT_SATELLITE_STATUS

周期性发送GPS卫星状态的事件码。调用getSatellites()方法获取每一颗定位卫星的各种状态。（译者注：此事件码需在获取到卫星状态之后，才会发送。在没有搜索到卫星的时候，不会发送此事件码。）

常量值：4 (0x00000004)

int GPS_EVENT_STARTED

当GPS系统模块被开启之后发送此事件码。

常量值：1 (0x00000001)

int GPS_EVENT_STOPPED

当GPS系统模块被关闭之后发送此事件码。

常量值：2 (0x00000002)

内部类

interface GpsStatus.Listener

用于接收当GPS状态发生改变时所发出的通知

interface GpsStatus.NmeaListener

用于从GPS接收NMEA信息。

公共方法

public int getMaxSatellites ()

返回通过getSatellites()方法返回的卫星列表的最大卫星数。

返回值

最大卫星数。

public Iterable<GpsSatellite> getSatellites ()

返回一组用于描述GPS引擎当前状态的卫星对象。

返回值

一组卫星对象。

public int getTimeToFirstFix ()

返回自GPS引擎最新启动以来至收到的首次定位所需的时间。

返回值

首次定位所需的时间

补充

文章精选

百度百科 GPS

Android定位功能（一）

Android定位功能（二）


GpsStatus.Listener

译者署名：熊猫82

译者链接： http://wisekingokok.cnblogs.com

版本：Android 3.2 r1

结构

继承关系

public static interface GpsStatus.Listener

android.location.GpsStatus.Listener

类概述

用于接收当GPS状态发生改变时所发出的通知。

公共方法

public abstract void onGpsStatusChanged (int event)

当GPS状态发生改变时会回调此方法。GPS状态改变时会发出下列四个事件码的其中一个：

Ÿ GPS_EVENT_STARTED

Ÿ GPS_EVENT_STOPPED

Ÿ GPS_EVENT_FIRST_FI

Ÿ GPS_EVENT_SATELLITE_STATUS

可以在方法内部调用getGpsStatus(Gpsstatus)获取GPS状态信息。

参数

event GPS状态发生改变时的事件码.


GpsStatus.NmeaListener

译者署名：熊猫82

译者链接： http://wisekingokok.cnblogs.com

版本：Android 3.2 r1

结构

继承关系

public static interface GpsStatus.NmeaListener

android.location.GpsStatus.NmeaListener

类概述

用于从GPS中获取NMEA信息。NMEA 0183是一个与海洋电子设备进行通信的标准，通过一系列接口接收来自GPS的数据，是一种常见的方法。更多细节见NMEA0183。您可以实现这个接口，并调用addNmeaListener（GpsStatus.NmeaListener）从GPS引擎接收NMEA数据的。 （译者注：这里NMEA-0183协议为通常所说的GPS协议，参见 这里 。）

公共方法

public abstract void onNmeaReceived (long timestamp, String nmea)

（译者注：原文无说明。这个接口的此方法貌似是预留的一种规范，曾跟踪源码，发现在硬件访问层补充nmea_callback的代码，才能将数据传到应用上层

参数

timestamp 时间戳，单位为毫秒。

nmea nmea信息。

）


GpsSatellite

译者署名：熊猫82

译者链接： http://wisekingokok.cnblogs.com

版本：Android 3.2 r1

结构

继承关系

public final class GpsSatellite extends Object

java.lang.Object

android.location.GpsSatellite

类概述

此类用于描述当前GPS卫星状态。和GpsStatus联合使用。

公共方法

public float getAzimuth ()

返回卫星的方位角，方位角范围0至360度。

返回值

卫星的方位角

public float getElevation ()

返回卫星的高度角，高度角范围0至90度

返回值

卫星的高度角

public int getPrn ()

返回伪随机噪声码，

（译者注：所谓伪噪声码，不是卫星编号，是一个具有一定周期的取值0和1的离散符号串，它具有类似于白噪声的自相关函数）

返回值

伪随机噪声码

public float getSnr ()

返回卫星的信噪比。

（译者注：即放大器的输出信号的电压与同时输出的噪声电压的比，常常用分贝数表示。设备的信噪比越高表明它产生的杂音越少。一般来说，信噪比越大，说明混在信号里的噪声越小，声音回放的音质量越高，否则相反）

返回值

卫星信噪比

public boolean hasAlmanac ()

如果GPS引擎有近似轨道信息则返回true

返回值

如果GPS引擎有近似轨道信息则返回true

public boolean hasEphemeris ()

如果GPS引擎有卫星星历则返回true

（译者注：卫星星历用于描述太空飞行体位置和速度的表达式）

返回值

如果GPS引擎有卫星星历则返回true

public boolean useInfix ()

当卫星被GPS引擎用于计算最近位置时，返回true

返回值

当卫星被GPS引擎用于计算最近位置时，返回true

补充

文章精选

[百度百科]GPS

[百度百科]GPS定位技术


android.media

类

AsyncPlayer

ThumbnailUtils

AudioFormat

AudioRecord

AudioRecord.OnRecordPositionUpdateListener

AudioManager


AudioFormat

译者署名： 文炜

译者链接：http://www.cnblogs.com/iezhyg/

版本：Android 3.0 r1

结构

继承关系

public class AudioFormat extends Object

java.lang.Object

android.media.AudioFormat

类概述

AndioFormat类用于访问一些音频格式和通道配置常量。这些常量应用在 AudioTrack 和 AudioRecord 类中。

常量

public static final int CHANNEL_CONFIGURATION_DEFAULT

已弃用。

用 CHANNEL_OUT_DEFAULT or CHANNEL_IN_DEFAULT 代替。

常量值：1 (0x00000001)

public static final int CHANNEL_CONFIGURATION_INVALID

已弃用。

用 CHANNEL_INVALID 代替。

常量值： 0 (0x00000000)

public static final int CHANNEL_CONFIGURATION_MONO

已弃用。

用 CHANNEL_OUT_MONO or CHANNEL_IN_MONO 代替。

常量值： 2 (0x00000002)

public static final int CHANNEL_CONFIGURATION_STEREO

已弃用。

用 CHANNEL_OUT_STEREO or CHANNEL_IN_STEREO 代替。

常量值： 3 (0x00000003)

public static final int CHANNEL_INVALID

无效的音频通道掩码

常量值： 0 (0x00000000)

public static final int CHANNEL_IN_BACK

常量值： 32 (0x00000020)

public static final int CHANNEL_IN_BACK_PROCESSED

常量值： 512 (0x00000200)

public static final int CHANNEL_IN_DEFAULT

常量值： 1 (0x00000001)

public static final int CHANNEL_IN_FRONT

常量值： 16 (0x00000010)

public static final int CHANNEL_IN_FRONT_PROCESSED

常量值： 256 (0x00000100)

public static final int CHANNEL_IN_LEFT

常量值： 4 (0x00000004)

public static final int CHANNEL_IN_LEFT_PROCESSED

常量值： 64 (0x00000040)

public static final int CHANNEL_IN_MONO

常量值： 16 (0x00000010)

public static final int CHANNEL_IN_PRESSURE

常量值： 1024 (0x00000400)

public static final int CHANNEL_IN_RIGHT

常量值： 8 (0x00000008)

public static final int CHANNEL_IN_RIGHT_PROCESSED

常量值： 128 (0x00000080)

public static final int CHANNEL_IN_STEREO

常量值： 12 (0x0000000c)

public static final int CHANNEL_IN_VOICE_DNLINK

常量值： 32768 (0x00008000)

public static final int CHANNEL_IN_VOICE_UPLINK

常量值： 16384 (0x00004000)

public static final int CHANNEL_IN_X_AXIS

常量值： 2048 (0x00000800)

public static final int CHANNEL_IN_Y_AXIS

常量值： 4096 (0x00001000)

public static final int CHANNEL_IN_Z_AXIS

常量值： 8192 (0x00002000)

public static final int CHANNEL_OUT_5POINT1

常量值： 252 (0x000000fc)

public static final int CHANNEL_OUT_7POINT1

常量值： 1020 (0x000003fc)

public static final int CHANNEL_OUT_BACK_CENTER

常量值： 1024 (0x00000400)

public static final int CHANNEL_OUT_BACK_LEFT

常量值： 64 (0x00000040)

public static final int CHANNEL_OUT_BACK_RIGHT

常量值： 128 (0x00000080)

public static final int CHANNEL_OUT_DEFAULT

默认的音频通道掩码。

常量值： 1 (0x00000001)

public static final int CHANNEL_OUT_FRONT_CENTER

常量值： 16 (0x00000010)

public static final int CHANNEL_OUT_FRONT_LEFT

常量值： 4 (0x00000004)

public static final int CHANNEL_OUT_FRONT_LEFT_OF_CENTER

常量值： 256 (0x00000100)

public static final int CHANNEL_OUT_FRONT_RIGHT

常量值： 8 (0x00000008)

public static final int CHANNEL_OUT_FRONT_RIGHT_OF_CENTER

常量值： 512 (0x00000200)

public static final int CHANNEL_OUT_LOW_FREQUENCY

常量值： 32 (0x00000020)

public static final int CHANNEL_OUT_MONO

常量值： 4 (0x00000004)

public static final int CHANNEL_OUT_QUAD

常量值： 204 (0x000000cc)

public static final int CHANNEL_OUT_STEREO

常量值： 12 (0x0000000c)

public static final int CHANNEL_OUT_SURROUND

常量值： 1052 (0x0000041c)

public static final int ENCODING_DEFAULT

默认的音频数据格式

常量值： 1 (0x00000001)

public static final int ENCODING_INVALID

无效的音频数据格式

常量值： 0 (0x00000000)

public static final int ENCODING_PCM_16BIT

音频数据格式：脉冲编码调制（PCM）每个样品16位。设备保证提供支持。(参见：这里)

常量值： 2 (0x00000002)

public static final int ENCODING_PCM_8BIT

音频数据格式：脉冲编码调制（PCM）每个样品8位。设备不保证提供支持。

常量值： 3 (0x00000003)

补充

文章精选

Android 实时获取麦克风输入音量的代码


AsyncPlayer

译者署名： 农民伯伯

译者链接：http://over140.cnblogs.com/

版本：Android 3.0 r1

结构

继承关系

public class AsyncPlayer extends Object

java.lang.Object

android.media.AsyncPlayer

类概述

播放一个连续(多个)的音频URLs，但那些任务较重的工作在另外的线程中完成，所以任何预处理或加载的延迟都不阻碍线程调用。

构造函数

public AsyncPlayer (String tag)

构造一个AsyncPlayer对象。

参数

tag 用于调试的字符串

公共方法

public void play (Context context, Uri uri, boolean looping, int stream)

开始播放声音。可在某个点上开始播放。这里不保证可能有延迟。在另一个音频文件播放时调用这个方法将导致当前音频停止播放并开始播放新的音频。

参数

context 应用程序上下文

uri 播放的 URI (参见 setDataSource(Context, Uri))

looping 是否无限循环播放声音。 (参见 setLooping(boolean))

stream 音频流(AudioStream)类型 (参见 setAudioStreamType(int))（译者注：例如 AudioManager.STREAM_MUSIC）

public void stop ()

停止之前播放的声音。不能在某点上暂停然后接着播放。多次调用没有不良影响。

补充

文章精选

android多媒体-----AsyncPlayer

Android游戏开发之旅16 异步音乐播放[Android123]

今天犯了一个愚蠢的错误


AudioRecord

译者署名： chenwei

版本：Android 3.1 r1

结构

继承关系

public class AudioRecord extends Object

java.lang.Object

android.media.AudioRecord

类概述

AudioRecord类在Java应用程序中管理音频资源，用来记录从平台音频输入设备产生的数据。 通过AudioRecord对象来完成"pulling"（读取）数据。 应用通过以下几个方法负责立即从AudioRecord对象读取： read(byte[], int, int)， read(short[], int, int)或read(ByteBuffer, int). 无论使用哪种音频格式，使用AudioRecord是最方便的。

在创建AudioRecord对象时，AudioRecord会初始化，并和音频缓冲区连接，用来缓冲新的音频数据。 根据构造时指定的缓冲区大小，来决定AudioRecord能够记录多长的数据。 从硬件设备读取的数据，应小于整个记录缓冲区。

内部类

interface AudioRecord.OnRecordPositionUpdateListener

接口定义为：当AudioRecord 收到一个由setNotificationMarkerPosition(int)设置的通知标志，或由 setPositionNotificationPeriod(int)设置的周期更新记录的进度状态时，回调此接口。

常量

public static final int ERROR

表示操作失败。

常量值: -1 (0xffffffff)

public static final int ERROR_BAD_VALUE

表示使用了一个不合理的值导致的失败。

常量值: -2 (0xfffffffe)

public static final int ERROR_INVALID_OPERATION

表示不恰当的方法导致的失败。

常量值: -3 (0xfffffffd)

public static final int RECORDSTATE_RECORDING

指示AudioRecord录制状态为“正在录制”。

常量值: 3 (0x00000003)

public static final int RECORDSTATE_STOPPED

指示AudioRecord录制状态为“不在录制”。

常量值: 1 (0x00000001)

public static final int STATE_INITIALIZED

指示AudioRecord准备就绪。

常量值: 1 (0x00000001)

public static final int STATE_UNINITIALIZED

指示AudioRecord状态没有初始化成功。

常量值: 0 (0x00000000)

public static final int SUCCESS

表示操作成功。

常量值: 0 (0x00000000)

构造函数

public AudioRecord (int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)

类构造函数。

参数

audioSource 录制源。 请见MediaRecorder.AudioSource录制源定义。

sampleRateInHz 默认采样率，单位Hz。 44100Hz是当前唯一能保证在所有设备上工作的采样率，在一些设备上还有22050, 16000或11025。

channelConfig 描述音频通道设置。 请见CHANNEL_IN_MONO 和 CHANNEL_IN_STEREO。 CHANNEL_IN_MONO保证能在所有设备上工作。

audioFormat 音频数据保证支持此格式。 请见ENCODING_PCM_16BIT 和ENCODING_PCM_8BIT。

bufferSizeInBytes 在录制过程中，音频数据写入缓冲区的总数（字节）。 从缓冲区读取的新音频数据总会小于此值。 getMinBufferSize(int, int, int)返回AudioRecord 实例创建成功后的最小缓冲区。 设置的值比getMinBufferSize()还小则会导致初始化失败。

异常

IllegalArgumentException

公共方法

public int getAudioFormat ()

返回设置的音频数据格式。 请见ENCODING_PCM_16BIT 和ENCODING_PCM_8BIT。

public int getAudioSource ()

返回音频录制源。

参见

MediaRecorder.AudioSource

    public int getChannelConfiguration ()

    返回设置的频道设置。 请见 CHANNEL_IN_MONO 和 CHANNEL_IN_STEREO。

public int getChannelCount ()

返回设置的频道数目。

public static int getMinBufferSize (int sampleRateInHz, int channelConfig, int audioFormat)

返回成功创建AudioRecord对象所需要的最小缓冲区大小。 注意：这个大小并不保证在负荷下的流畅录制，应根据预期的频率来选择更高的值，AudioRecord实例在推送新数据时使用此值。

参数

sampleRateInHz 默认采样率，单位Hz。

channelConfig 描述音频通道设置。

请见 CHANNEL_IN_MONO 和 CHANNEL_IN_STEREO。

audioFormat 音频数据保证支持此格式。参见 ENCODING_PCM_16BIT。

返回值

如果硬件不支持录制参数，或输入了一个无效的参数，则返回ERROR_BAD_VALUE，如果硬件查询到输出属性没有实现，或最小缓冲区用byte表示，则返回ERROR。

参见

更多信息请见有效的设置参数

public int getNotificationMarkerPosition ()

返回通知，标记框架中的位置。

public int getPositionNotificationPeriod ()

返回通知，更新框架中的时间位置。

public int getRecordingState ()

返回AudioRecord实例的录制状态。

参见

RECORDSTATE_STOPPED

           RECORDSTATE_RECORDING

public int getSampleRate ()

返回设置的音频数据样本采样率，单位Hz。

public int getState ()

返回AudioRecord实例的状态。 这点非常有用，用在AudioRecord 实例创建成功后，检查初始化属性。 它能肯定请求到了合适的硬件资源。

参见

STATE_INITIALIZED

           STATE_UNINITIALIZED

public int read (short[] audioData, int offsetInShorts, int sizeInShorts)

从音频硬件录制缓冲区读取数据。

参数

audioData 写入的音频录制数据。

offsetInShorts 目标数组 audioData 的起始偏移量。

sizeInShorts 请求读取的数据大小。

返回值

返回short型数据，表示读取到的数据，如果对象属性没有初始化，则返回 ERROR_INVALID_OPERATION，如果参数不能解析成有效的数据或索引，则返回 ERROR_BAD_VALUE。 返回数值不会超过sizeInShorts。

public int read (byte[] audioData, int offsetInBytes, int sizeInBytes)

从音频硬件录制缓冲区读取数据。

参数

audioData 写入的音频录制数据。

offsetInBytes audioData的起始偏移值，单位byte。

sizeInBytes 读取的最大字节数。

返回值

读入缓冲区的总byte数，如果对象属性没有初始化，则返回 ERROR_INVALID_OPERATION，如果参数不能解析成有效的数据或索引，则返回 ERROR_BAD_VALUE。 读取的总byte数不会超过sizeInBytes。

public int read (ByteBuffer audioBuffer, int sizeInBytes)

从音频硬件录制缓冲区读取数据，直接复制到指定缓冲区。 如果audioBuffer不是直接的缓冲区，此方法总是返回0。

参数

audioBuffer 存储写入音频录制数据的缓冲区。

sizeInBytes 请求的最大字节数。

返回值

读入缓冲区的总byte数，如果对象属性没有初始化，则返回 ERROR_INVALID_OPERATION，如果参数不能解析成有效的数据或索引，则返回 ERROR_BAD_VALUE。 读取的总byte数不会超过sizeInBytes。

public void release ()

释放本地AudioRecord资源。 对象不能经常使用此方法，而且在调用release()后，必须设置引用为null。

public int setNotificationMarkerPosition (int markerInFrames)

如果设置了 setRecordPositionUpdateListener(OnRecordPositionUpdateListener)或 setRecordPositionUpdateListener(OnRecordPositionUpdateListener, Handler)，则通知监听者设置位置标记。

参数

markerInFrames 在框架中快速标记位置。

返回值

返回错误或成功代码，请见 SUCCESS、ERROR_BAD_VALUE、ERROR_INVALID_OPERATION。

public int setPositionNotificationPeriod (int periodInFrames)

如果设置了 setRecordPositionUpdateListener(OnRecordPositionUpdateListener)或 setRecordPositionUpdateListener(OnRecordPositionUpdateListener, Handler)，则通知监听者设置时间标记。

参数

markerInFrames 在框架中快速更新时间标记。

返回值

返回错误或成功代码，请见 SUCCESS、ERROR_INVALID_OPERATION。

public void setRecordPositionUpdateListener (AudioRecord.OnRecordPositionUpdateListener listener, Handler handler)

当之前设置的标志已经成立，或者周期录制位置更新时，设置处理监听者。 使用此方法来将Handler 和别的线程联系起来，来接收AudioRecord 事件，比创建AudioTrack 实例更好一些。

参数

handler 用来接收事件通知消息。

public void setRecordPositionUpdateListener (AudioRecord.OnRecordPositionUpdateListener listener)

当之前设置的标志已经成立，或者周期录制位置更新时，设置处理监听者。

public void startRecording ()

AudioRecord实例开始进行录制。

异常

IllegalStateException

受保护方法

protected void finalize ()

通知VM回收此对象内存。 此方法只能用在运行的应用程序没有任何线程再使用此对象，来告诉垃圾回收器回收此对象。

此方法用于释放系统资源，由垃圾回收器清除此对象。 默认没有实现，由VM来决定，但子类根据需要可重写finalize()。 在执行期间，调用此方法可能会立即抛出未定义异常，但是可以忽略。

注意：VM保证对象可以一次或多次调用finalize()，但并不保证finalize()会马上执行。 例如，对象B的finalize()可能延迟执行，等待对象A的finalize()延迟回收A的内存。 为了安全起见，请看ReferenceQueue，它提供了更多地控制VM的垃圾回收。

补充

文章精选

Android提高第十篇之AudioRecord实现"助听器"

Android入门（9）AudioRecord和AudioTrack类的使用

Android多媒体学习十：利用AudioRecord类实现自己的音频录制程序


AudioRecord.OnRecordPositionUpdateListener

译者署名： chenwei

版本：Android 3.1 r1

结构

继承关系

public static interface AudioRecord.OnRecordPositionUpdateListener

android.media.AudioRecord.OnRecordPositionUpdateListener

类概述

接口定义为：当AudioRecord 收到一个由setNotificationMarkerPosition(int)设置的通知标志，或由 setPositionNotificationPeriod(int)设置的周期更新记录的进度状态时，回调此接口。

公共方法

public abstract void onMarkerReached (AudioRecord recorder)

回调监听器，通知监听器已经到达之前设置的标记位置。

public abstract void onPeriodicNotification (AudioRecord recorder)

按照一定的周期，通知监听器，指定的记录已经就绪。


ThumbnailUtils

译者署名： 农民伯伯

译者链接：http://over140.cnblogs.com/

版本：Android 3.0 r1

结构

继承关系

public class ThumbnailUtils extends Object

java.lang.Object

android.media.ThumbnailUtils

类概述

为媒体生成常规缩略图。（Android123：该类为Android2.2新增类，可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图）

常量

public static final int OPTIONS_RECYCLE_INPUT

常量用于表示应该回收 extractThumbnail(Bitmap, int, int, int)输入源图片(第一个参数)，除非输出图片就是输入图片。

常量值：2 (0x00000002)

公共方法

public static Bitmap createVideoThumbnail (String filePath, int kind)

创建一张视频的缩略图。如果视频已损坏或者格式不支持可能返回null。

参数

filePath 视频文件路径

kind 可以为MINI_KIND 或MICRO_KIND

public static Bitmap extractThumbnail (Bitmap source, int width, int height, int options)

创建所需尺寸居中缩放的位图。

参数

source 原始位图源

width 目标宽

height 目标高

options 在缩略图抽取时提供的选项

public static Bitmap extractThumbnail (Bitmap source, int width, int height)

创建所需尺寸居中缩放的位图。

参数

source 原始位图源

width 目标宽

height 目标高

补充

文章链接

ThumbnailUtils - Android2.2新增类 (Android123)

[推荐]Android缩略图类源代码 (Android123)


AudioManager

译者署名： 文炜

译者链接：http://www.cnblogs.com/iezhyg/

版本：Android 3.2 r1

结构

继承关系

public class AudioManager extends Object

java.lang.Object

android.media.AudioManager

类概述

AudioManager类提供访问音量和振铃模式的控制。

用Context.getSystemService(Context.AUDIO_SERVICE)得到这个类的实例。

常量

public static final String ACTION_AUDIO_BECOMING_NOISY

广播intent，提示应用程序音频信号由于音频输出的变化将变得“嘈杂”。例如，当拔出一个有线耳机，或断开一个支持A2DP的音频接收器，这个intent就会被发送，且音频系统将自动切换音频线路到扬声器。收到这个intent后，控制音频流的应用程序会考虑暂停，减小音量或其他措施，以免扬声器的声音使用户惊奇。

常量值："android.media.AUDIO_BECOMING_NOISY"

public static final String ACTION_SCO_AUDIO_STATE_CHANGED

广播intent，表明蓝牙SCO音频连接状态已改变。这个intent包含额外信息：EXTRA_SCO_AUDIO_STATE，它表明新的状态是SCO_AUDIO_STATE_DISCONNECTED或SCO_AUDIO_STATE_CONNECTED。

参照

startBluetoothSco()

常量值："android.media.SCO_AUDIO_STATE_CHANGED"

public static final int ADJUST_LOWER

减小铃声音量。

参照

adjustVolume(int, int)

adjustStreamVolume(int, int, int)

常量值： -1 (0xffffffff)

public static final int ADJUST_RAISE

增大铃声音量。

参照

adjustVolume(int, int)

adjustStreamVolume(int, int, int)

常量值： 1 (0x00000001)

public static final int ADJUST_SAME

保持先前的铃声音量。当需要toast显示音量而不修改它时可能是有用的。

参照

adjustVolume(int, int)

adjustStreamVolume(int, int, int)

常量值： 0 (0x00000000)

public static final int AUDIOFOCUS_GAIN

用来指示获得音频焦点，请求音频焦点，未知持续时间

参照

onAudioFocusChange(int)

requestAudioFocus(OnAudioFocusChangeListener, int, int)

常量值： 1 (0x00000001)

public static final int AUDIOFOCUS_GAIN_TRANSIENT

用来指示临时获得或请求音频焦点，预期持续很短的时间。临时改变的例子是操纵方向的回放，或一个事件的通知。

参照

onAudioFocusChange(int)

requestAudioFocus(OnAudioFocusChangeListener, int, int)

常量值： 2 (0x00000002)

public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK

用来指示一个临时的音频焦点请求，预期持续很短的时间，其它音频程序降低他们的输出级别后保持播放是可接受的（也被称为“ducking”）。临时改变的例子是操纵方向的回入，在后台回放音乐是可接受的。

参照

onAudioFocusChange(int)

requestAudioFocus(OnAudioFocusChangeListener, int, int)

常量值： 3 (0x00000003)

public static final int AUDIOFOCUS_LOSS

用来指示在未知持续时间内丢失音频焦点

参照

onAudioFocusChange(int)

常量值： -1 (0xffffffff)

public static final int AUDIOFOCUS_LOSS_TRANSIENT

用来指示暂时的丢失音频焦点。

参照

onAudioFocusChange(int)

常量值： -2 (0xfffffffe)

public static final int AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK

用来指示暂时的丢失音频焦点，若音频焦点的丢失者想继续播放，它会降低自己的输出

音量（也被称为“ducking”），因为新的焦点拥有者不要求其它静音。

参照

onAudioFocusChange(int)

常量值： -3 (0xfffffffd)

public static final int AUDIOFOCUS_REQUEST_FAILED

一个失败的焦点转移请求。

常量值： 0 (0x00000000)

public static final int AUDIOFOCUS_REQUEST_GRANTED

一个成功的焦点转移请求。

常量值： 1 (0x00000001)

public static final String EXTRA_RINGER_MODE

新的振铃模式。

参照

RINGER_MODE_CHANGED_ACTION

RINGER_MODE_NORMAL

RINGER_MODE_SILENT

RINGER_MODE_VIBRATE

常量值： "android.media.EXTRA_RINGER_MODE"

public static final String EXTRA_SCO_AUDIO_STATE

额外的intent ACTION_SCO_AUDIO_STATE_CHANGED包含新的蓝牙SCO连接状态。

常量值： "android.media.extra.SCO_AUDIO_STATE"

public static final String EXTRA_VIBRATE_SETTING

特定类型的新振动设置。

参照

VIBRATE_SETTING_CHANGED_ACTION

EXTRA_VIBRATE_TYPE

VIBRATE_SETTING_ON

VIBRATE_SETTING_OFF

VIBRATE_SETTING_ONLY_SILENT

常量值： "android.media.EXTRA_VIBRATE_SETTING"

public static final String EXTRA_VIBRATE_TYPE

振动类型设置发生变化。

参照

VIBRATE_SETTING_CHANGED_ACTION

VIBRATE_TYPE_NOTIFICATION

VIBRATE_TYPE_RINGER

常量值： "android.media.EXTRA_VIBRATE_TYPE"

public static final int FLAG_ALLOW_RINGER_MODES

当改变音量时，是否将振铃模式作为候选项。例如，如果为true且音量级别为0音量或用ADJUST_LOWER调整音量，那么振铃模式会改变静音或振动模式。

对铃声流来说这个选项默认是打开的。如果包括这个标志，这个行为将被展示，不管流类型受振铃模式的影响。

参照

adjustVolume(int, int)

adjustStreamVolume(int, int, int)

常量值： 2 (0x00000002)

public static final int FLAG_PLAY_SOUND

当改变音量时，是否播放声音。

若由adjustVolume(int, int)或adjustSuggestedStreamVolume(int, int, int)给出，则在某些情况下会被忽略（例如，采用的流类型不是STREAM_RING，或正在向下调整音量）。

参照

adjustStreamVolume(int, int, int)

adjustVolume(int, int)

setStreamVolume(int, int, int)

常量值： 4 (0x00000004)

public static final int FLAG_REMOVE_SOUND_AND_VIBRATE

移除队列中或正在播放（与改变音量相关）的声音/振动。

常量值： 8 (0x00000008)

public static final int FLAG_SHOW_UI

显示包含当前音量的toast。

参照

adjustStreamVolume(int, int, int)

adjustVolume(int, int)

setStreamVolume(int, int, int)

setRingerMode(int)

常量值： 1 (0x00000001)

public static final int FLAG_VIBRATE

若进入振动铃声模式是否振动。

常量值： 16 (0x00000010)

public static final int FX_FOCUS_NAVIGATION_DOWN

焦点下移。

参照

playSoundEffect(int)

常量值： 2 (0x00000002)

public static final int FX_FOCUS_NAVIGATION_LEFT

焦点左移

参照

playSoundEffect(int)

常量值： 3 (0x00000003)

public static final int FX_FOCUS_NAVIGATION_RIGHT

焦点右移。

参照

playSoundEffect(int)

常量值： 4 (0x00000004)

public static final int FX_FOCUS_NAVIGATION_UP

焦点上移。

参照

playSoundEffect(int)

常量值： 1 (0x00000001)

public static final int FX_KEYPRESS_DELETE

IME删除按键声音。

参照

playSoundEffect(int)

常量值： 7 (0x00000007)

public static final int FX_KEYPRESS_RETURN

IME返回按键声音。

参照

playSoundEffect(int)

常量值： 8 (0x00000008)

public static final int FX_KEYPRESS_SPACEBAR

IME空格按键声音。

参照

playSoundEffect(int)

常量值： 6 (0x00000006)

public static final int FX_KEYPRESS_STANDARD

IME标准按键声音。

参照

playSoundEffect(int)

常量值： 5 (0x00000005)

public static final int FX_KEY_CLICK

键盘和方向键点击声音。

参照

playSoundEffect(int)

常量值： 0 (0x00000000)

public static final int MODE_CURRENT

当前音频模式。用来请求音频路由到当前模式。

常量值： -1 (0xffffffff)

public static final int MODE_INVALID

无效的音频模式

常量值： -2 (0xfffffffe)

public static final int MODE_IN_CALL

呼叫的音频模式。建立一个电话呼叫。

常量值： 2 (0x00000002)

public static final int MODE_IN_COMMUNICATION

通信的音频模式。建立一个音频/视频或VoIP呼叫。

常量值： 3 (0x00000003)

public static final int MODE_NORMAL

正常的音频模式：不是振铃或建立呼叫。

常量值： 0 (0x00000000)

public static final int MODE_RINGTONE

振铃的音频模式。获取信号输入。

常量值： 1 (0x00000001)

public static final int NUM_STREAMS

已弃用。

用 AudioSystem.getNumStreamTypes() 代替。

常量值： 5 (0x00000005)

public static final String RINGER_MODE_CHANGED_ACTION

广播intent表明振铃模式被改变。包括新的振铃模式。

参照

EXTRA_RINGER_MODE

常量值： "android.media.RINGER_MODE_CHANGED"

public static final int RINGER_MODE_NORMAL

振铃模式可以是听得见的或振动的。若音量在改变这一模式前是听得见的，则它是听得见的。若打开振动设置，则它是振动的。

参照

setRingerMode(int)

getRingerMode()

常量值： 2 (0x00000002)

public static final int RINGER_MODE_SILENT

振铃模式是静音且不振动。（这要覆盖振动设置。）

参照

setRingerMode(int)

getRingerMode()

常量值： 0 (0x00000000)

public static final int RINGER_MODE_VIBRATE

振铃模式是静音且振动。（这会导致电话铃声一直振动，但若设置当通知振动时振动）

参照

setRingerMode(int)

getRingerMode()

常量值： 1 (0x00000001)

public static final int ROUTE_ALL

已弃用。

不要直接设置音频路由，用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。

用来屏蔽setRouting(int, int, int)的参数。

常量值： -1 (0xffffffff)

public static final int ROUTE_BLUETOOTH

已弃用。

用ROUTE_BLUETOOTH_SCO。不要直接设置音频路由，用方法setSpeakerphoneOn(),

setBluetoothScoOn()代替。

常量值： 4 (0x00000004)

public static final int ROUTE_BLUETOOTH_A2DP

已弃用。

不要直接设置音频路由，用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。

路由音频输出到蓝牙A2DP。

常量值： 16 (0x00000010)

public static final int ROUTE_BLUETOOTH_SCO

已弃用。

不要直接设置音频路由，用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。

路由音频输出到蓝牙SCO。

常量值： 4 (0x00000004)

public static final int ROUTE_EARPIECE

已弃用。

不要直接设置音频路由，用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。

路由音频输出到听筒。

常量值： 1 (0x00000001)

public static final int ROUTE_HEADSET

已弃用。

不要直接设置音频路由，用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。

路由音频输出到耳机。

常量值： 8 (0x00000008)

public static final int ROUTE_SPEAKER

已弃用。

不要直接设置音频路由，用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。

路由音频输出到扬声器。

常量值： 2 (0x00000002)

public static final int SCO_AUDIO_STATE_CONNECTED

EXTRA_SCO_AUDIO_STATE的额外值表明SCO音频通道已建立。

常量值： 1 (0x00000001)

public static final int SCO_AUDIO_STATE_DISCONNECTED

EXTRA_SCO_AUDIO_STATE的额外值表明SCO音频通道未建立。

常量值： 0 (0x00000000)

public static final int SCO_AUDIO_STATE_ERROR

EXTRA_SCO_AUDIO_STATE的额外值表明尝试获取状态有错误。

常量值： -1 (0xffffffff)

public static final int STREAM_ALARM

用于报警的音频流。

常量值： 4 (0x00000004)

public static final int STREAM_DTMF

用于DTMF Tones的音频流。

常量值： 8 (0x00000008)

public static final int STREAM_MUSIC

用于音乐回放的音频流。

常量值： 3 (0x00000003)

public static final int STREAM_NOTIFICATION

用于通知的音频流。

常量值： 5 (0x00000005)

public static final int STREAM_RING

用于电话铃声的音频流。

常量值： 2 (0x00000002)

public static final int STREAM_SYSTEM

用于系统声音的音频流。

常量值： 1 (0x00000001)

public static final int STREAM_VOICE_CALL

用于电话的音频流。

常量值： 0 (0x00000000)

public static final int USE_DEFAULT_STREAM_TYPE

建议使用默认的流类型。这可能不适用于所有需要流类型的地方。

常量值： -2147483648 (0x80000000)

public static final String VIBRATE_SETTING_CHANGED_ACTION

广播intent，表明振动设置已改变。包括振动类型和其新设置。

参照

EXTRA_VIBRATE_TYPE

EXTRA_VIBRATE_SETTING

常量值： "android.media.VIBRATE_SETTING_CHANGED"

public static final int VIBRATE_SETTING_OFF

建议不振动的振动设置

参照

setVibrateSetting(int, int)

getVibrateSetting(int)

常量值： 0 (0x00000000)

public static final int VIBRATE_SETTING_ON

建议在合适时振动的振动设置。

参照

setVibrateSetting(int, int)

getVibrateSetting(int)

常量值： 1 (0x00000001)

public static final int VIBRATE_SETTING_ONLY_SILENT

建议只在振动铃声模式中振动的振动设置。

参照

setVibrateSetting(int, int)

getVibrateSetting(int)

常量值： 2 (0x00000002)

public static final int VIBRATE_TYPE_NOTIFICATION

与通知相符的振动类型。

参照

setVibrateSetting(int, int)

getVibrateSetting(int)

shouldVibrate(int)

常量值： 1 (0x00000001)

public static final int VIBRATE_TYPE_RINGER

与振铃相符的振动类型。

参照

setVibrateSetting(int, int)

getVibrateSetting(int)

shouldVibrate(int)

常量值： 0 (0x00000000)

公共方法

public int abandonAudioFocus (AudioManager.OnAudioFocusChangeListener l)

放弃音频焦点。若存在先前焦点拥有者，则使它接收焦点。

参数

I 请求焦点的监听器。

返回值

AUDIOFOCUS_REQUEST_FAILED或 AUDIOFOCUS_REQUEST_GRANTED

public void adjustStreamVolume (int streamType, int direction, int flags)

通过同一方向的一步调整特定流的音量。

这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

参数

streamType 欲调整的流类型。 值为STREAM_VOICE_CALL, STREAM_SYSTEM,

STREAM_RING, STREAM_MUSIC或STREAM_ALARM。

Direction 欲调整音量的方向。值为ADJUST_LOWER, ADJUST_RAISE, 或

ADJUST_SAME.

Flags 一个或多个标志。

参照

adjustVolume(int, int)

setStreamVolume(int, int, int)

public void adjustSuggestedStreamVolume (int direction, int suggestedStreamType, int flags)

调整最相关流或给定的回放流的音量。

这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

参数

direction 欲调整音量的方向。 值为 ADJUST_LOWER, ADJUST_RAISE,

或 ADJUST_SAME.

suggestedStreamType 若不存在相关流，则用该流类型。

USE_DEFAULT_STREAM_TYPE在这是有效的。

Flags 一个或多个标志。

参照

adjustVolume(int, int)

adjustStreamVolume(int, int, int)

setStreamVolume(int, int, int)

public void adjustVolume (int direction, int flags)

调整最相关流的音量。例如，若在通话中，不管通话屏幕是否显示，它都将拥有最高的

优先级。另一个例子，若音乐正在后台播放且不在通话中，刚将调整音频流。

这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

参数

direction 欲调整音量的方向。 值为ADJUST_LOWER, ADJUST_RAISE, 或

ADJUST_SAME.

flags 一个或多个标志。

参照

adjustSuggestedStreamVolume(int, int, int)

adjustStreamVolume(int, int, int)

setStreamVolume(int, int, int)

public int getM ode ()

返回当前的音频模式。

返回值

当前音频模式(MODE_NORMAL, MODE_RINGTONE, MODE_IN_CALL 或

MODE_IN_COMMUNICATION). 从HAL中返回当前音频状态。

public String getParameters (String keys)

获得音频硬件设置的参数值变量。

参数

keys 参数列表

返回值

键值对形式的参数列表： key1=value1;key2=value2;...

public int getRingerMode ()

返回当前铃声模式。

返回值

当前铃声模式，值为RINGER_MODE_NORMAL, RINGER_MODE_SILENT, 或

RINGER_MODE_VIBRATE.

参照

setRingerMode(int)

public int getRouting (int mode)

已弃用。

不要直接查询音频路由，用方法isSpeakerphoneOn(), isBluetoothScoOn(), isBluetoothA2dpOn() and isWiredHeadsetOn()代替。

返回指定模式的当前音频路由位向量。

参数

mode 获取路由的音频模式 (e.g., MODE_RINGTONE)

返回值

可以与ROUTE_xxx相比较的一个音频路由位向量

public int getStreamMaxVolume (int streamType)

返回特定流的最大音量索引。

参数

streamType 返回最大音量索引的流类型。

返回值

流的最大有效音量索引。

参照

getStreamVolume(int)

public int getStreamVolume (int streamType)

返回特定类的当前音量索引。

参数

streamType 返回音量索引的流类型。

返回值

The current volume index for the stream.

流的当前音量索引。

参照

getStreamMaxVolume(int)

setStreamVolume(int, int, int)

public int getVibrateSetting (int vibrateType)

返回振动类型对应的用户振动设置。

大多数需要振动的客户端不应该使用这个方法，用shouldVibrate(int)代替。

参数

vibrateType 振动类型。值为VIBRATE_TYPE_NOTIFICATION或

VIBRATE_TYPE_RINGER。

返回值

振动设置，值为VIBRATE_SETTING_ON, VIBRATE_SETTING_OFF, 或

VIBRATE_SETTING_ONLY_SILENT.

参照

setVibrateSetting(int, int)

shouldVibrate(int)

public boolean isBluetoothA2dpOn ()

检查A2DP音频路由到蓝牙耳机是否打开。

返回值

true if A2DP audio is being routed to/from Bluetooth headset; false if otherwise

若A2DP音频被路由到/从蓝牙耳机，返回ture。反之，返回false。

public boolean isBluetoothScoAvailableOffCall ()

表明当前平台是否支持使用SCO关闭通话用例。当电话不在通话中，应用程序需要使用蓝牙SCO音频，必须先调用这个方法以确保平台支持这一特性。

返回值

true if bluetooth SCO can be used for audio when not in call false otherwise

若当不在通话中时音频可以使用蓝牙SCO，返回ture。反之，返回false。

参照

startBluetoothSco()

public boolean isBluetoothScoOn ()

检查通信是否使用蓝牙SCO。

返回值

若通信使用SCO,返回true。反之，返回false。

public boolean isMicrophoneMute ()

检查麦克风是否静音。

返回值

若麦克风静音，返回true。反之，返回false。

public boolean isMusicActive ()

检查是否有音乐是活动的。

返回值

若有音乐曲目是活动的，返回true。

public boolean isSpeakerphoneOn ()

检查喇叭扩音器是否开着。

返回值

若喇叭扩音器开着，返回true。反之，返回false。

public boolean isWiredHeadsetOn ()

检查音频路由到有线耳机是否开着。

返回值

若音频被路由到/从有线耳机，返回true。反之，返回false。

public void loadSoundEffects ()

加载音效。当音效可用时，要先调用这个方法。

public void playSoundEffect (int effectType, float volume)

播放音效（按键声音，打开/关闭盖子）

参数

effectType 音效的类型。值为FX_KEY_CLICK, FX_FOCUS_NAVIGATION_UP,

FX_FOCUS_NAVIGATION_DOWN, FX_FOCUS_NAVIGATION_LEFT,

FX_FOCUS_NAVIGATION_RIGHT,FX_KEYPRESS_STANDARD,

FX_KEYPRESS_SPACEBAR,FX_KEYPRESS_DELETE,

FX_KEYPRESS_RETURN。

Volume 音效的音量。 音量值是原始标量so UI controls should be scaled logarithmically. 若音量指定为-1，用AudioManager.STREAM_MUSIC 流音量减去3dB。注意：这个版本应用于启动和控制音量面板的设置。

public void playSoundEffect (int effectType)

播放音效（按键声音，打开/关闭盖子）

参数

effectType 音效的类型。值为FX_KEY_CLICK, FX_FOCUS_NAVIGATION_UP,

FX_FOCUS_NAVIGATION_DOWN, FX_FOCUS_NAVIGATION_LEFT,

FX_FOCUS_NAVIGATION_RIGHT, FX_KEYPRESS_STANDARD,

FX_KEYPRESS_SPACEBAR, FX_KEYPRESS_DELETE,

FX_KEYPRESS_RETURN,注意：这个版本使用UI设置决定声音能否

被听见。

public void registerMediaButtonEventReceiver (ComponentName eventReceiver)

注册一个组件，它是MEDIA_BUTTON intent的唯一接收器。

参数

eventReceiver 接收媒体按钮intent的BroadcastReceiver 的标志符。这个广播

接收器必须在应用程序清单中声明。

public int requestAudioFocus (AudioManager.OnAudioFocusChangeListener l, int streamType, int durationHint)

请求音频焦点。发送请求以获得音频焦点。

参数

l 音频焦点改变时通知的接收器。

streamType 受焦点请求影响的主要音频流类型。

durationHint 用AUDIOFOCUS_GAIN_TRANSIENT表示这个焦点请求是暂时的，很快会放弃这个焦点。暂时请求的例子有操纵方向的回放，通知声音。用AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK表示若先前焦点拥有者躲开它的音频输出，它保持播放是可行的。AUDIOFOCUS_GAIN用于一个求和持续时间的焦点请求，如回放歌曲或音频。

返回值

AUDIOFOCUS_REQUEST_FAILED或 AUDIOFOCUS_REQUEST_GRANTED

public void setBluetoothA2dpOn (boolean on)

已弃用。

不要使用。

参数

on 若为true，路由A2DP音频到/从蓝牙耳机；若为false，禁用A2DP音频。

public void setBluetoothScoOn (boolean on)

请求在通信中使用蓝牙SCO耳机。

这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

参数

on 若为true，在通信中使用蓝牙SCO；若为false，不使用。

public void setMicrophoneMute (boolean on)

设置麦克风是否静音。

这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

参数

on 若为ture，麦克风静音。若为flase，不静音。

public void setMode (int mode)

设置音频模式。

音频模式包含音频路由和电话层的行为。因此，这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。特别地，MODE_IN_CALL模式只能用在当打电话时的电话程序中，因为它会引起信号从音频层馈入到平台混音器。

参数

mode 请求的音频模式(MODE_NORMAL, MODE_RINGTONE, MODE_IN_CALL

或MODE_IN_COMMUNICATION)。通知HAL当前的音频状态以便它能

适当的路由音频。

public void setParameters (String keyValuePairs)

给音频硬件设置一个可变数目的参数值。

参数

keyValuePairs 键值对形式的参数列表：key1=value1;key2=value2;...

public void setRingerMode (int ringerMode)

设置铃声模式。

静音模式会静音且不会振动。振动模式会静音且会振动。正常模式是听得见的且根据用户设置决定是否振动。

参数

ringerMode 铃声模式。值为RINGER_MODE_NORMAL, RINGER_MODE_SILENT,

or RINGER_MODE_VIBRATE.。

参照

getRingerMode()

public void setRouting (int mode, int routes, int mask)

已弃用。

不要直接设置音频路由，用方法setSpeakerphoneOn(), setBluetoothScoOn()代替。

为特定模式设置音频路由。

参数

mode 改变路由的音频模式。E.g., MODE_RINGTONE.

routes 请求路由的位向量，由一个或多个ROUTE_xxx类型创建。设置位表

明路由应该打开。

mask 改变路由位向量由一个或多个ROUTE_xxx类型创建复原位表明路由

应该不改变。

public void setSpeakerphoneOn (boolean on)

设置喇叭扩音器打开或关闭。

这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

参数

on 为true打开喇叭扩音器；为false关闭喇叭扩音器。

public void setStreamMute (int streamType, boolean state)

静音或不静音音频流。

静音命令被保护以免客户端进程死亡：若具有流上的活动静音请求的进程死亡，这个流会自动取消静音。

对于给定的流，静音请求是累计的：AudioManager会从一个或多个客户端接收数个静音请求，只有当接收到相同数目的取消静音请求时流才会取消静音。

为了更好的用户体验，应该程序必须在onPause()中取消已静音流，若合适在onResume()中再次静音

这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

参数

streamType 欲静音/取消静音的流。

state 请求静音状态：若为true，静音；若为false，取消静音。

public void setStreamSolo (int streamType, boolean state)

单独的或不单独的一个特定类。其它流静音。

保护solo命令以免客户端进程死亡：若有在流上活动的solo请求的进程死亡，所有的流都被静音，因为这一请求被自动取消静音。

对给定类的solo请求是累计的：AudioManager会从一个或多个客户端接收数个solo请求，只有当接收到相同数目的unsoloed请求时流才会是unsoloed。

为了更好的用户体验，应该程序必须在onPause()中unsole a soloed 流，若合适在onResume()中再次solo。

参数

streamType soloed/unsolod的流。

state 请求的solo状态：solo打开为true，关闭为false。

public void setStreamVolume (int streamType, int index, int flags)

设置特定流的音量索引。

参数

streamType 欲设置音量索引的流。

index 欲设置的音量索引。参照getStreamMaxVolume(int) 获得最大有效值。

flags 一个或多个标志。

参照

getStreamMaxVolume(int)

getStreamVolume(int)

public void setVibrateSetting (int vibrateType, int vibrateSetting)

当振动类型应该振动时，设置配置。

这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

参数

vibrateType 振动类型。值为VIBRATE_TYPE_NOTIFICATION 或

VIBRATE_TYPE_RINGER。

vibrateSetting 振动设置。值为VIBRATE_SETTING_ON, VIBRATE_SETTING_OFF,或

VIBRATE_SETTING_ONLY_SILENT。

参照

getVibrateSetting(int)

shouldVibrate(int)

public void setWiredHeadsetOn (boolean on)

已弃用。

不再使用。

设置打开或关闭音频路由到有线耳机。

参数

on 为true，设置路由音频到/从有线耳机；为false， 禁用有线耳机音频。

public boolean shouldVibrate (int vibrateType)

根据用户的设置和当前铃声模式，返回一个特定类型是否应该振动。

使用通知来振动的大多数客户端不应该使用这个方法。若策略不允许，通知管理器不会振动，故客户端常常设置振动模式且让通知管理器控制是否振动。

参数

vibrateType 振动类型。值为VIBRATE_TYPE_NOTIFICATION或

VIBRATE_TYPE_RINGER。

返回值

在调用这个方法的瞬间，类型是否应该振动。

参照

setVibrateSetting(int, int)

getVibrateSetting(int)

public void startBluetoothSco ()

启动蓝牙SCO音频连接。

需要权限：MODIFY_AUDIO_SETTINGS。

当电话不在通话中，想发送/接收音频到/从蓝牙SCO耳机的应用程序可以使用这个方法。

由于SCO连接会花费几秒钟，应用程序不应该依赖方法返回的可用连接，而是注册接

收intent ACTION_SCO_AUDIO_STATE_CHANGED，并等待状态变为SCO_AUDIO_STATE_CONNECTED。

由于不保证连接成功，应用程序必须等待这个intent超时。

当完成SCO连接或建立超时，应用程序必须调用stopBluetoothSco()去清空请求并关闭蓝牙连接。

即使SCO连接已建立，下列限制应用在音频输出流以使他们被路由到SCO耳机：1.流类型必须是STREAM_VOICE_CALL 2.格式必须是mono 3.取样必须是16kH或8kHz。

下列限制应用在输出流： 1.格式必须是mono2.取样必须是16kH或8kHz。

注意电话应用程序总是有使用SCO连接的优先权。当电话在通话中，调用这个方法会被忽略。类似，当应用程序正在使用SCO连接，若接听来电或呼叫发送，连接会丢失且不会在通话结束后自动返回。

参照

stopBluetoothSco()

ACTION_SCO_AUDIO_STATE_CHANGED

public void stopBluetoothSco ()

停止蓝牙SCO音频连接。

需要权限：MODIFY_AUDIO_SETTINGS。

应用程序用startBluetoothSco()请求使用蓝牙SCO音频，当应用程序完成SCO连接或建立时间超时， 必须调用这个方法。

参照

startBluetoothSco()

public void unloadSoundEffects ()

不加载音效。当音效被禁用时，调用这个方法释放一些内存。

public void unregisterMediaButtonEventReceiver (ComponentName eventReceiver)

移除注册MEDIA_BUTTON intent的接收器。

参数

eventReceiver 用registerMediaButtonEventReceiver(ComponentName)注册的BroadcastReceiver的标识符。

补充

文章精选

Android 小项目之--使用【AudioManager】类控制音量

android之声音管理器AudioManager的使用


android.net

类

TrafficStats

MailTo

LocalSocket


TrafficStats

译者署名： 农民伯伯

译者链接： http://over140.cnblogs.com/

版本：Android 2.3 r1

结构

继承关系

public class TrafficStats extends Object

java.lang.Object

android.net.TrafficStats

类概述

提供网络流量统计的类。这些统计包括通过所有网络接口、mobile接口和UID网络接口的字节发送和接收，网络数据包的发送和接收。

这些统计可能不适用于所有平台。如果本设备不支持统计， UNSUPPORTED 将被返回。

常量

public static final int UNSUPPORTED

返回值表示该设备不支持统计。

常量值: -1 (0xffffffff)

公共方法

public static long getMobileRxBytes ()

获取通过Mobile接口接收到的字节总数（Android123：这里不包含WiFi）

返回值

字节总数。如果本设备不支持统计，将返回 UNSUPPORTED 。

public static long getMobileRxPackets ()

获取通过Mobile接口接收到的数据包总数

返回值

数据包总数。如果本设备不支持统计，将返回 UNSUPPORTED 。

public static long getMobileTxBytes ()

获取通过Mobile接口发送的字节总数

返回值

字节总数。如果本设备不支持统计，将返回 UNSUPPORTED 。

public static long getMobileTxPackets ()

获取通过Mobile接口发送的数据包总数

返回值

数据包总数。如果本设备不支持统计，将返回 UNSUPPORTED 。

public static long getTotalRxBytes ()

获取通过所有网络接口接收到的字节总数。（Android123：包含Mobile和WiFi等）

返回值

字节总数。如果本设备不支持统计，将返回 UNSUPPORTED 。

public static long getTotalRxPackets ()

获取通过所有网络接口接收到的数据包总数。（Android123：包含Mobile和WiFi等）

返回值

数据包总数。如果本设备不支持统计，将返回 UNSUPPORTED 。

public static long getTotalTxBytes ()

获取通过所有网络接口发送的字节总数。（Android123：包含Mobile和WiFi等）

返回值

字节总数。如果本设备不支持统计，将返回 UNSUPPORTED 。

public static long getTotalTxPackets ()

获取通过所有网络接口发送的数据包总数（Android123：包含Mobile和WiFi等）

返回值

数据包总数。如果本设备不支持统计，将返回 UNSUPPORTED 。

public static long getUidRxBytes (int uid)

获取通过UID网络接口收到的字节数。统计包含所有网络接口。

参数

uid 待检查的进程的uid

返回值

字节数

参见

myUid()

public static long getUidTxBytes (int uid)

获取通过UID网络接口发送的字节数。统计包含所有网络接口。

参数

uid 待检查的进程的uid

返回值

字节总数。如果本设备不支持统计，将返回 UNSUPPORTED 。

参见

myUid()

补充

文章链接

Android流量统计TrafficStats类的使用


MailTo

译者署名： 农民伯伯

译者链接： http://over140.cnblogs.com/

版本：Android 3.0 r1

结构

继承关系

public class MailTo extends Object

java.lang.Object

android.net.MailTo

类概述

MailTo URL解析器。这个类解析到URL计划的邮件(a mailto schema URL参见 这里 )和可用于解析参数查询。它实现了RFC 2368协议。

常量

public static final String MAILTO_SCHEME

常量值："mailto:"

公共方法

public String getBody ()

从一个Url中获取邮件的正文内容。如果没有设置正文内容，则返回null值。

返回值

返回正文或null

public String getCc ()

从一个Url中获取抄送地址。这可能是多个电子邮件地址，以逗号分隔的空间。如果没有指定抄送地址，则返回null值

返回值

逗号分隔的邮件地址或null

public Map<String, String> getHeaders ()

从一个Url中获取邮件头（Android123：比如编码类型，发送时间、IP等）

返回值

包含解析值的map

public String getSubject ()

从一个Url中获取主题。如果没有指定的主题行，则返回null值。

返回值

主题或null

public String getTo ()

从一个Url中获取收信人。这可能是多个电子邮件地址，以逗号分隔的空间。如果没指定，则返回null值。

返回值

逗号分隔的电子邮件地址或null。

public static boolean isMailTo (String url)

测试判断指定字符串是否包含Email的Url。

参数

url 用于测试的字符串

返回值

如果为true，字符串是包含Email的Url。

public static MailTo parse (String url)

将指定Url字符串解析成MailTo类。这个解析器实现的RFC 2368。返回的对象可以用于查询解析的参数。

参数

url 包含Email的Url字符串

返回值

MailTo对象

异常

ParseException 如果该结构并不是包含Email的Url将抛出此异常。

public String toString ()

返回一个包含关于对象简洁的、大家都可以读懂的字符串。鼓励子类重写此方法，并提供一个考虑到对象的类型和数据的实现。默认的实现价于下面的表达式：

如果你打算实现自己toString方法，参见 Writing a useful toString method 。

返回值

表示此对象的可打印输出。

补充

文章链接

电子邮件解析android.net.MailTo类 (本文有参照该链接的翻译)


LocalSocket

译者署名：水中影

译者链接： http://www.cnblogs.com/gosunriver/

版本：Android 4.0 r1

结构

继承关系

public class LocalSocket extends Object

java.lang.Object

android.net.LocalSocket

类概述

在UNIX域名空间内创建一个socket（非服务器），这种类型的socket完全不同于java.net.socket。

构造函数

public LocalSocket ()

创建一个AF_LOCAL/UNIX 套接字。

公共方法

public void bind (LocalSocketAddress bindpoint)

绑定socket到一个端口。仅可由还没有被绑定的实体对象来调用该方法。​

参数

bindpoint 端口地址

异常

IOException

public void close ()

关闭socket

异常

IOException

public void connect (LocalSocketAddress endpoint)

将当前socket连接到一个端口，只有当终端地址还没有被连接的情况下才能调用该函数。​

参数

endpoint 端口地址

异常

IOException 如果socket 是无效的或地址不存在。

public void connect (LocalSocketAddress endpoint, int timeout)

将当前socket连接到一个端口。

异常

IOException 如果socket 是无效的或地址不存在。

public FileDescriptor[] getAncillaryFileDescriptors ()

​​获取一组由对端通过附加消息传送过来的文件描述符。这个方法会返回最近发送的文件描述符，并且返回空直到收到一个新的描述符。文件描述符仅可以通过常规数据传送,此方法读取一个描述符后仅能返回非空值。

返回值

空或者文件描符数组

异常

IOException

public FileDescriptor getFileDescriptor ()

返回文件描述符，如果文件没有打开或已关闭则返回空。​

返回值

文件描述符或空​值

public InputStream getInputStream ()

获取输入流。

​返回值​

input stream对象

异常

若socket已经关闭或者还没建立则抛出IO异常

​

public LocalSocketAddress getLocalSocketAddress ()

若存在则返回绑定的socket。

返回值

本地socket地址，若匿名则返回空。

public OutputStream getOutputStream ()

获取输出流

返回值

输出流

异常

若socket已经关闭或者还没建立则抛出IO异常

public Credentials getPeerCredentials ()

获取socket对的认证信息。仅对已连接的套接字有效。

返回值

非空; 认证信息

异常

IOException

public int getReceiveBufferSize ()

（译者注：获取接受缓冲区大小）

异常

IOException

public LocalSocketAddress getRemoteSocketAddress ()

（译者注：获取socket连接端地址）

public int getSendBufferSize ()

（译者注：获取发送缓冲区大小）

异常

IOException

public int getSoTimeout ()

（译者注：得到远端超时设置）

异常

IOException

public synchronized boolean isBound ()

（译者注：是否已经绑定）

public boolean isClosed ()

（译者注：是否已经关闭连接）

public synchronized boolean isConnected ()

（译者注：是否已连接）

public boolean isInputShutdown ()

（译者注：输入流是否已关闭）

public boolean isOutputShutdown ()

（译者注：输出流是否已关闭）

public void setFileDescriptorsForSend (FileDescriptor[] fds)

将一组文件描述符放入队列准备发送到对端(socket)，这些文件描述符在下次发送普通数据时会作为单个辅助消息一同发送出去，请查看桌面linux 系统的“main 7 unix” 的SCM_RIGHT。

参数

Fds 非空，待发送的文件描述符数组。

public void setReceiveBufferSize (int size)

（译者注：设置接受缓冲区大小）

异常

IOException

public void setSendBufferSize (int n)

（译者注：设置发送缓冲区大小）

异常

IOException

public void setSoTimeout (int n)

（译者注：设置远端超时设置）

异常

IOException

public void shutdownInput ()

关闭输入端socket

异常

IOException

public void shutdownOutput ()

关闭输出端socket

异常

IOException

补充

文章精选

[推荐] OPhone OS的网络层架构介绍

示例代码

Android LocalSocket / LocalServerSocket sample code

Platforms: Android SDK 1.0 (Eclipse 3.4.1 + ADT 0.8.0)

main.xml

    <Button android:id="@+id/send_1_button"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:text="send 1 request"/>

java文件：

import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**
*
* @author Denis Migol
*
*/
public class DemoActivity extends Activity {

public static String
SOCKET_ADDRESS = "your.local.socket.address";

// background threads use this Handler
to post messages to
// the main application thread
private final Handler
handler = new Handler();

public class NotificationRunnable implements Runnable {
private String
message = null;

public void run() {
if (message != null &&
message.length() > 0) {
showNotification(message);
}
}

/**
* @param message the
message to set
*/
public void
setMessage(String message) {
this.message =
message;
}
}

// post this to the Handler when the
background thread notifies
private final NotificationRunnable
notificationRunnable = new NotificationRunnable();

public void
showNotification(String message) {
Toast.makeText(this,
message, Toast.LENGTH_SHORT).show();
}

class SocketListener extends Thread {
private Handler
handler = null;
private NotificationRunnable
runnable = null;

public SocketListener(Handler
handler, NotificationRunnable
runnable) {
this.handler =
handler;
this.runnable =
runnable;
this.handler.post(this.runnable);
}

/**
* Show UI
notification.
* @param message
*/
private void
showMessage(String message) {
this.runnable.setMessage(message);
this.handler.post(this.runnable);
}

@Override
public void run() {
//showMessage("DEMO: SocketListener started!");
try {
LocalServerSocket server = new LocalServerSocket(SOCKET_ADDRESS);
while (true) {
LocalSocket
receiver = server.accept();
if (receiver != null) {
InputStream input =
receiver.getInputStream();

// simply for java.util.ArrayList
int
readed = input.read();
int size = 0;
int capacity = 0;
byte[] bytes = new byte[capacity];

// reading
while (readed
!= -1) {
// java.util.ArrayList.Add(E e);
capacity = (capacity * 3)/2 + 1;
//bytes = Arrays.copyOf(bytes, capacity);
byte[] copy = new byte[capacity];
System.arraycopy(bytes, 0, copy, 0, bytes.length);
bytes = copy;
bytes[size++] = (byte)readed;

//
read next byte
readed = input.read();
}

showMessage(new String(bytes, 0, size));
}
}
} catch (IOException e) {
Log.e(getClass().getName(), e.getMessage());
}
}
}

public static void
writeSocket(String message) throws IOException {
LocalSocket
sender = new LocalSocket();
sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
sender.getOutputStream().write(message.getBytes());
sender.getOutputStream().close();
}

@Override
public void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

new SocketListener(this.handler, this.notificationRunnable).start();

Button send1
= (Button)findViewById(R.id.send_1_button);
send1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
try {
writeSocket("hello");
} catch (IOException e) {
Log.e(getClass().getName(), e.getMessage());
}
}

});
}
}


android.os

类

AsyncTask

CountDownTimer

Message

MessageQueue

HandlerThread

枚举

AsyncTask.Status


AsyncTask

译者署名： 0_1

译者链接： http://dev.10086.cn/blog/?32546

版本：Android 2.3 r1

结构

继承关系

public abstract class AsyncTask extends Object

java.lang.Object

android.os.AsyncTask<Params, Progress, Result>

类概述

AsyncTask能够适当地、简单地用于 UI线程。 这个类不需要操作线程(Thread)就可以完成后台操作将结果返回UI。

异步任务的定义是一个在后台线程上运行，其结果是在 UI线程上发布的计算。 异步任务被定义成三种泛型类型： Params，Progress和 Result；和四个步骤： begin , doInBackground，processProgress 和end。

用法

AysncTask必须被继承使用。子类至少覆盖一个方法 ( doInBackground(Params...) )，最经常覆盖另一个( onPostExecute(Result) .)下面是一个子类的例子：

一旦创建，一个任务执行起来就非常简单：

AsyncTask的泛型类型

这三个类型被用于一个异步任务，如下：

1. Params，启动任务执行的输入参数

2. Progress，后台任务执行的百分比

3. Result，后台计算的结果类型

在一个异步任务里，不是所有的类型总被用。假如一个类型不被使用，可以简单地使用 Void 类型：

4个步骤

当一个异步任务被执行，任务经过四各步骤：

1． onPreExecute() ，在UI线程上调用任务后立即执行。这步通常被用于设置任务，例如在用户界面显示一个进度条。

2． doInBackground(Params...) ，后台线程执行onPreExecute()完后立即调用，这步被用于执行较长时间的后台计算。异步任务的参数也被传到这步。计算的结果必须在这步返回，将传回到上一步。在执行过程中可以调用 publishProgress(Progress...) 来更新任务的进度。

3． onProgressUpdate(Progress...) ,一次呼叫 publishProgress(Progress...) 后调用 UI线程。执行时间是不确定的。这个方法用于当后台计算还在进行时在用户界面显示进度。例如：这个方法可以被用于一个进度条动画或在文本域显示记录。

4． onPostExecute(Result) , 当后台计算结束时，调用 UI线程。后台计算结果作为一个参数传递到这步。

线程规则

有一些线程规则必须去遵守，这个类才会正确的工作:

· 任务实例必须创建在 UI线程

· execute(Params...) 必须在 UI线程上调用

· 不要手动调用 onPreExecute() , onPostExecute(Result) , doInBackground(Params...) , onProgressUpdate(Progress...)

· 这个任务只执行一次（如果执行第二次将会抛出异常）

内部类

enum AsyncTask.Status

表示任务的当前状态

构造函数

public AsyncTask ()

创建一个新的异步任务。这个构造函数必须在UI线程上调用。

公共方法

public final boolean cancel (boolean mayInterruptIfRunning)

尝试取消这个任务的执行，如果这个任务已经结束或者已经取消或者不能被取消或者某些其他原因，那么将导致这个操作失败，当调用此方法时，此方法执行成功并且这个任务还没有执行，那么此任务将不再执行。如果任务已经开始，这时执行此操作传入的参数mayInterruptIfRunning为true，执行此任务的线程将尝试中断该任务。

参数

mayInterruptIfRunning 如果为true则正在执行的线程将会中断，如果false，则会允许正在执行的任务线程执行完毕。

返回值

如果此任务不能取消返回false，如果已经正常的执行完毕，返回true

参见

isCancelled()

    onCancelled()

public final AsyncTask<Params, Progress, Result> execute (Params... params)

用指定的参数来执行此任务，这个方法将会返回此任务本身，所以调用者可以拥有此任务的引用。此方法必须在UI线程中调用

参数

params 任务参数

返回值

AsyncTask的实例

异常

IllegalStateException 如果getStatus()返回的是RUNNING或者FINISHED

public final Result get ()

等待计算结束并返回结果

返回值

计算结果

异常

CancellationException 如果计算取消

ExecutionException 如果计算抛出异常

InterruptedException 当等待时当前线程抛出异常

public final Result get (long timeout, TimeUnit unit)

等待计算结束并返回结果，最长等待时间为：timeOut（超时时间）.

参数

timeout 计算等待超时时间

unit 超时的时间单位

返回值

计算结果

异常

CancellationException 如果计算取消

ExecutionException 如果计算抛出异常

InterruptedException 当等待时当前线程抛出异常

TimeoutException 等待时间超时

public final AsyncTask.Status getStatus ()

获得任务的当前状态

返回值

当前状态

public final boolean isCancelled ()

如果在任务正常结束之前取消任务成功则返回true，否则返回false

返回值

如果任务正常结束之前取消任务成功返回true。

参见

cancel(boolean)

受保护方法

protected abstract Result doInBackground (Params... params)

覆盖此方法在后台线程执行计算，此方法中的参数是此任务的 execute(Params...) 方法的调用这传递的参数，此方法可以调用 publishProgress(Progress...) 在 UI 线程中来更新数据

参数

params 此任务的参数

返回值

返回一个由此任务子类定义的结果 Result

参见

onPreExecute()

onPostExecute(Result)

publishProgress(Progress...)

protected void onCancelled ()

此方法在UI线程中当 cancel(boolean) 被调用后调用

参见

cancel(boolean)

isCancelled()

protected void onPostExecute (Result result)

此方法在UI线程中 doInBackground(Params...) 。方法调用之后调用，此方法中的参数的值是 doInBackground(Params...) 的返回值或者当此任务已经被取消或有异常发生时此参数值为空 null

参数

result 由 doInBackground(Params...) 计算出的操作的结果。

参见

onPreExecute()

doInBackground(Params...)

protected void onPreExecute ()

在方法 doInBackground(Params...) 调用之前调用

参见

onPostExecute(Result)

doInBackground(Params...)

protected void onProgressUpdate (Progress... values)

该方法在UI线程中 publishProgress(Progress...) 被调用之后调用，该方法中的参数 values 是已经被传递到 p publishProgress(Progress...) 中的参数

参数

values 进度表示值

参见

       publishProgress(Progress...)

doInBackground(Params...)

protected final void publishProgress (Progress... values)

当调用 doInBackground(Params...) 在后台执行计算时会调用该方法，每当在UI线程中调用此方法时将触发 onProgressUpdate(Progress...) 方法的执行

参数

values 将进度值更新到UI

参见

onProgressUpdate(Progress...)

doInBackground(Params...)

补充

文章精选

Android AsyncTask理解

TabActivity下在AsyncTask中使用ProgressDialog存在问题的解决方法

小心，AsyncTask 不是萬能的 [blogspot]


AsyncTask.Status

译者署名： 0_1

译者链接： http://dev.10086.cn/blog/?32546

版本：Android 2.3 r1

结构

继承关系

public static final enum AsyncTask.Status extends Enum<E extends Enum<E>>

java.lang.Object

java.lang.Enum<E extends java.lang.Enum<E>>

android.os.AsyncTask.Status

类概述

标志任务的当前状态，每个状态在任务的生命周期中只会出现一次。

枚举值

public static final AsyncTask.Status FINISHED

标志 onPostExecute(Result) 方法已经结束

public static final AsyncTask.Status PENDING

标志任务还没有执行

public static final AsyncTask.Status RUNNING

标志任务正在执行


CountDownTimer

译者署名： liliang1222

版本：Android 4.0 r1

结构

继承关系

public abstract class CountDownTimer extends Object

java.lang.Object

android.os.CountDownTimer

类概述

定时执行在一段时候后停止的倒计时，在倒计时执行过程中会在固定间隔时间得到通知（译者：触发onTick方法），下面的例子显示在一个文本框中显示一个30s倒计时：

 new CountdownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {

         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);

     }

     public void onFinish() {

         mTextField.setText("done!");

     }

  }.start();

onTick的调用是同步的，保证这次调用不会在之前调用完成前发生。这里的同步机制主要是用来：onTick的实现需要很多时间执行比倒计时间隔更重要的事情。

构造函数

public CountDownTimer (long millisInFuture, long countDownInterval)

参数

millisInFuture 从开始调用start()到倒计时完成并onFinish()方法被调用的毫秒数。（译者注：倒计时时间，单位毫秒）

countDownInterval 接收onTick(long)回调的间隔时间。（译者注：单位毫秒）

公共方法

public final void cancel ()

取消倒计时（译者：取消后，再次启动会重新开始倒计时）

public abstract void onFinish ()

倒计时完成时被调用

public abstract void onTick (long millisUntilFinished)

固定间隔被调用

参数

millisUntilFinished 倒计时剩余时间。

public synchronized final CountDownTimer start ()

启动倒计时

补充

文章精选

Android 定时器

android倒计时功能的实现(CountDownTimer）

示例代码

Java：

package com.test.countdowntimer;

import android.app.Activity;

import android.os.Bundle;

import android.os.CountDownTimer;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

import com.test.R;

public class CountDownTimeActivity extends Activity implements OnClickListener {

    TextView mTextView;

    Button mButton1;

    Button mButton2;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.countdown);

        mTextView = (TextView)findViewById(R.id.textView1);

       mButton1 = (Button)findViewById(R.id.button1);

       mButton2 = (Button)findViewById(R.id.button2);

       mButton1.setOnClickListener(this);

       mButton2.setOnClickListener(this);

    }

    CountDownTimer timer = new CountDownTimer(40000,1000) {

       @Override

       public void onTick(long millisUntilFinished) {

           mTextView.setText("seconds remaining: " + millisUntilFinished / 1000);

           try {

              Thread.sleep(1200);

           } catch (InterruptedException e) {

              e.printStackTrace();

           }

           Log.e("CountDown",millisUntilFinished+"");

       }

       @Override

       public void onFinish() {

           mTextView.setText("done！");

       }

    };

    @Override

    public void onClick(View v) {

       switch(v.getId()){

       case R.id.button1:

           timer.start();

           break;

       case R.id.button2:

           timer.cancel();

           break;

       }

    }

}

XML：

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="vertical"

  android:layout_width="match_parent"

  android:layout_height="match_parent">

    <TextView android:text="TextView" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>

    <Button android:text="开始" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

    <Button android:text="取消" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

</LinearLayout>

说明：

CountDownTimer的间隔为1s，我们在onTIck方法里面休眠了1.2s，所以log出来发现打印间隔变成了2s，即中间一次onTick方法没有被执行（不会在之前一次调用完成前被调用）。


Message

译者署名： strongxu

译者微博： http://t.qq.com/strongxu

版本：Android 3.1 r1

结构

继承关系

public final class Message extends Object implements Parcelable

java.lang.Object

android.os.Message

类概述

定义一个包含任意类型的描述数据对象，此对象可以发送给Handler。对象包含两个额外的int字段和一个额外的对象字段，这样可以使得在很多情况下不用做分配工作。

尽管Message的构造器是公开的，但是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。

字段

public static final Creator<Message> CREATOR

public int arg1

如果只需要存储几个整型数据，arg1 和 arg2是setData()的低成本替代品。

public int arg2

如果只需要存储几个整型数据，arg1 和 arg2是setData()的低成本替代品。

public Object obj

发送给接收器的任意对象。当使用Message对象在线程间传递消息时，如果它包含一个Parcelable的结构类（不是由应用程序实现的类），此字段必须为非空（non-null）。其他的数据传输则使用setData(Bundle)方法。

注意Parcelable对象是从FROYO版本以后才开始支持的。

public Messenger replyTo

指明此message发送到何处的可选Messenger对象。具体的使用方法由发送者和接受者决定。

public int what

用户自定义的消息代码，这样接受者可以了解这个消息的信息。每个handler各自包含自己的消息代码，所以不用担心自定义的消息跟其他handlers有冲突。

公共构造器

public Message()

构造器（但是获取Message对象的最好方法是调用Message.obtain()）。

公共方法

public void copyFrom (Message o)

使此message跟参数o相似。浅拷贝数据域。不拷贝源message的链表字段，时间戳和目标/回调。

public int describeContents ()

描述了包含在Parcelable对象排列信息中的特殊对象的类型。

返回值

一个标志位，表明Parcelable对象特殊对象类型集合的排列。

public Runnable getCallback ()

获取回调对象，此对象会在message处理时执行。此对象必须实现Runnable接口。回调由接收此消息并分发的目标handler调用。如果没有设置回调，此消息会分发到接收handler的handleMessage(Message)。

public Bundle getData ()

获取附加在此事件上的任意数据的Bundle对象，需要时延迟创建。通过调用setData(Bundle)来设置Bundle的值。需要注意的是，如果通过Messenger对象在进程间传递数据时，需要调用Bundle类的Bundle.setClassLoader()方法来设置ClassLoader，这样当接收到消息时可以实例化Bundle里的对象。

参考

peekData()

setData(Bundle)

public Handler getTarget ()

获取将接收此消息的Handler对象。此对象必须要实现Handler.handleMessage()方法。每个handler各自包含自己的消息代码，所以不用担心自定义的消息跟其他handlers有冲突。

public long getWhen ()

返回此消息的传输时间，以毫秒为单位。

public static Message obtain (Handler h, int what, int arg1, int arg2, Object obj)

与obtain()一样，但是设置了target, what, arg1, arg2和obj的值。

参数

h 设置的target值

what 设置的what值

arg1 设置的arg1值

arg2 设置的arg2值

obj 设置的obj值

返回值

从全局池中分配的一个Message对象。

public static Message obtain (Handler h, int what, Object obj)

与obtain()一样，但是设置了target, what和obj的值。

参数

h 设置的target值

what 设置的what值

obj 设置的obj值

返回值

从全局池中分配的一个Message对象。

public static Message obtain (Handler h, int what)

与obtain()一样，但是设置了target和what的值。

参数

h target的值

what what的值

返回值

从全局池中分配的一个Message对象。

public static Message obtain (Handler h)

与obtain()一样，但是设置了target的值

参数

h 消息对象的target成员的值

返回值

从全局池中分配的一个Message对象。

public static Message obtain (Handler h, Runnable callback)

与obtain(Handler)一样，但是设置回调函数，在Message返回时调用。

参数

h 消息对象的target成员的值

callback 当消息处理时会调用的回调函数

返回值

从全局池中分配的一个Message对象。

public static Message obtain ()

从全局池中返回一个新的Message实例。在大多数情况下这样可以避免分配新的对象。

public static Message obtain (Handler h, int what, int arg1, int arg2)

与obtain()一样，但是设置了target, what, arg1和arg2的值

参数

h 设置的targe值

what 设置的what值

arg1 设置的arg1值

arg2 设置的arg2值

返回值

从全局池中分配的一个Message对象。

public static Message obtain (Message obj)

同obtain()，但是从一个已存在的消息中拷贝值（包括它的目标）。

参数

orig 要拷贝的源消息

返回值

从全局池中分配的一个Message对象。

public Bundle peekData ()

与getData()相似，但是并不延迟创建Bundle。如果Bundle对象不存在返回null。更多信息见getData()。

参考

getData()

setData(Bundle)

public void recyle ()

向全局池中返回一个Message实例。一定不能在调用此函数后再使用Message——它会立即被释放。

public void sendToTarget ()

向Handler发送此消息，getTarget()方法可以获取此Handler。如果这个字段没有设置会抛出个空指针异常。

public void setData (Bundle data)

设置一个任意数据值的Bundle对象。如果可以，使用arg1和arg2域发送一些整型值以减少消耗。

参考

getData()

peekData()

public void setTarget (Handler target)

设置将接收此消息的Handler对象。

public String toString ()

返回一个Message对象简单的，可读懂的描述信息。鼓励子类重写此方法，实现时最好把对象的类型的数据考虑进去。默认的实现等同与以下表达式：

如果需要实现toString方法，参考 Writing a useful toString method 。

返回值

一个代表此对象的可打印字符串

public void writeToParcel (Parcel dest, int flags)

将类的数据写入外部提供的Parcel中

参数

dest 对象被写入的Parcel

flags 对象如何被写入的附加标志，可能是0或 PARCELABLE_WRITE_RETURN_VALUE 。

补充

文章精选

Android中Message机制的灵活应用

Thread和Looper以及Handler和Message详解


MessageQueue

译者署名： strongxu

译者微博： http://t.qq.com/strongxu

版本：Android 3.1 r1

结构

继承关系

public class MessageQueue extends Object

java.lang.Object

android.os.MessageQueue

类概述

保存消息列表的低级别类，这些消息由Looper对象派发。消息并不是直接添加到MessageQueue中的，而是通过与Looper对象关联的MessageQueue.IdleHandler对象添加的。

调用Looper.myQueue方法可以获取当前线程的MessageQueue。

公共方法

public final void addIdleHandler (MessageQueue.IdleHandler handler)

向消息队列中添加一个新的MessageQueue.IdleHandler。当调用IdleHandler.queueIdle()返回false时，此MessageQueue.IdleHandler会自动的从消息队列中移除。或者调用removeIdleHandler(MessageQueue.IdleHandler)也可以从消息队列中移除MessageQueue.IdleHandler。

此方法是线程安全的。

参数

handler 要添加的IdleHandler。

public final void removeIdleHandler (MessageQueue.IdleHandler handler)

从队列中移除之前调用addIdlehandler(MessageQueue.IdleHandler)添加的MessageQueue.IdleHandler。如果handler不在当前的空闲列表，不做任何事。

参数

handler 要移除的IdleHandler。

受保护方法

protected void finalize ()

在对象被VM回收之前调用。只有当垃圾回收器检测到运行的所有线程都不再使用此对象时才会出现。

在对象被垃圾回收之前，此方法可以用来释放系统资源或者做其他的清理工作。默认的此方法实现是空的，这也是VM所期望的，但是子类可以重写此方法。在此方法执行是抛出的未捕获异常会导致程序立即结束，否则则会忽略异常。

注意，VM会保证任何对象的finalize方法最多调用一次，但是它不会保证何时（或者是否）会调用finalize。例如，对象B的finalize方法可以推迟执行对象A的finalize，因此它会导致推迟回收A的内存空间。为了安全，使用 ReferenceQueue ，因为在垃圾回收时，它在VM处理引用的方式上提供了更多的控制方法。

补充

文章精选

android线程 Handler Message Queue AsyncTask线程模型

Android中的Handler, Looper, MessageQueue和Thread


HandlerThread

译者署名：雪鹰工作室

版本：Android 3.1 r1

结构

继承关系

public class HandleThread extends Thread

java.lang.Object

java.lang.Thread

android.os.HandlerThread

类概述

用于方便的创建一个含有looper的线程类。looper用来创建handler类。请注意，仍然需要调用start()方法。

构造函数

public HandlerThread (String name)

构造一个HandlerThread

public HandlerThread (String name, int priority)

构造一个HandlerThread

参数

priority 运行线程的优先级，这个值是由Android.os.Process提供而不是来自java.lang.Thread.

公共方法

public Looper getLooper ()

这个方法返回与此线程相关的Looper。如果该线程不能启动或是由于某种原因isAlive()方法返回false，则这个方法返回null，假如这个线程已经启动，那么此方法将阻塞，直到looper被初始化。

返回值

Looper

public int getThreadId ()

返回线程的标志。详见：Process.myTid()

public boolean quit ()

查看当前运行的looper是否已经退出。假如线程这未启动或者已经结束（即getLooper()方法返回null），这个方法将返回false。否则looper被要求退出并返回true。

public void run ()

调用设置Runnable对象的run()方法。如果没有设置Runnable，什么也不做。

受保护方法

protected void onLooperPrepared ()

如果需要在Looper循环之前执行一些设置，可明确继承该回调方法。

（译者注：如下代码：

void run() {

mTid = Process.myTid();

Looper.prepare();//创建一个Looper实例，并且存储在ThreadLocal中，ThreadLocal中维护一个HashMap，键是线程号

synchronized (this) {

mLooper = Looper.myLooper();//得到当前线程的Looper，就是刚才perpare方法中创建并存储的那个Looper实例

Process.setThreadPriority(mPriority);

notifyAll();

}

onLooperPrepared();

Looper.loop();//开始轮询

mTid = -1;

）

补充

文章精选

Android开发入门——handler使用（二）

AsyncQueryHandler研究

Thread和Looper以及Handler和Message详解 Android开发必读 [Android123]

android Thread HandlerThread Looper Message MessageQueue Handler的关系


android.text

类

Html


Html

译者署名： pignut

译者链接： www.pignut.net

版本：Android 3.2

结构

继承关系

public class Html extends Object

java.lang.Object

android.text.Html

类概述

该类主要用来格式化html格式的文本，像浏览器一样对html标签进行解析，渲染输出，但并不是所有的标签都被支持！（译者注：当然你自定义的标签默认肯定不被支持，但可以通过实现 Html.TagHandler 这个接口来自我解析。下面会讲到。）

内部类

interface Html.ImageGetter

用来检索HTML中的<img>标签。（译者注：如果实现了这个接口，当解析的时候遇到<img> 标签时会回调ImageGetter的 getDrawable ( String source)方法，并返回一个 Drawable 对象，该方法参数为<img>标签的src属性的值）

interface Html.TagHandler

用来通知当解析器遇到无法识别的标签时该作出何种处理

公共方法

public static Spanned fromHtml (String source)

返回通过TagSoup （TagSoup 是一个Java开发符合SAX的HTML解析器 授权协议）解析器解析之后的可直接显示的文本，任何<img>则由默认的一般图片所替代，当然也可以通过实现Html.ImageGetter接口来显示真正的图片。

参数

source 待处理的html文本

public static Spanned fromHtml (String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)

同上，不同的是当遇到img标签，或解析器无法识别的标签时分别触发注册的两个对象来进行处理。

参数

source 为待处理的html文本

imageGetter Html.ImageGetter 对象

tagHandler Html.TagHandler 的

public static String toHtml (Spanned text)

该方法完全可以理解为fromHtml（）的可逆函数，将Spanned 类型的文本还原为HTML文本。

补充

文章精选

android开发：TextView中显示HTML和图片

android TextView HTML富文本应用

示例代码

public class Main extends Activity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.main);

      TextView tv = (TextView) findViewById(R.id.demo);

      // 貌似都不支持HTML标签的属性，及CSS样式，下面使用到的字体颜色都不被支持

      //String html = "<h2>html测</h2><pstyle='color:red;'>这是测试内容</p><p><img src='http://www.baidu.com/img/baidu_sylogo1.gif'></p>";

String html = "<h2>html测试</h2><p font='red'>这是测试内容</p><p><img src='http://www.baidu.com/img/baidu_sylogo1.gif'></p>";

      tv.setText(Html.fromHtml(html,new Html.ImageGetter(){

        @Override

        public Drawable getDrawable(String source) {

           Drawable myDrawable = null;

           try {

              myDrawable = Drawable.createFromStream(new URL(source).openStream(), "baidu_sylogo1.gif");

           } catch (MalformedURLException e) {

              e.printStackTrace();

           } catch (IOException e) {

              e.printStackTrace();

           }

           myDrawable.setBounds(0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());

           return myDrawable;

        }},null));

   }

}


android.util

类

JsonWriter


JsonWriter

译者署名：yddido

译者链接： http://blog.csdn.net/yddido

版本：Android 4.0 r1

结构

继承关系

public final class JSonWriter extends Object implements Closeable

java.lang.Object

android.util.JsonWriter

类概述

输出JSON（RFC4627）的流编码值，每次一个token。这个流值包括文字内容（字符串，数字布尔值，nulls）以及对象和数组的开始和结束符。

JSON编码

将数据编码为JSON格式，创建一个JsonWriter对象。每个JSON文件必须包含一个顶层的数组或者对象。嵌套数组和对象必须如下调用方法来组织内容：

l 写数组，首先要调用beginArray()。用适当的value()方法或嵌套其他数组和对象为每个元素赋值。最后关闭数组调用endArray()。

l 写对象，首先调用beginObject()。通过交替调用name(String)方法循环写入对象属性值。用适当的value()方法或嵌套其他数组和对象写入熟悉值。最后关闭对象调用endObject()。

例子

编写流信息如下：

 [

{

"id": 912345678901,

"text": "How do I write JSON on Android?",

"geo": null,

"user": {

"name": "android_newb",

"followers_count": 41

},

{

"id": 912345678902,

"text": "@android_newb just use android.util.JsonWriter!",

"geo": [50.454722, -104.606667],

"user": {

"name": "jesse",

"followers_count": 2

}

}

]}

如下表示以上信息结构：

   public void writeJsonStream(OutputStream out, List messages) throws IOException {

     JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));

     writer.setIndent("  ");

     writeMessagesArray(writer, messages);

     writer.close();

   public void writeMessagesArray(JsonWriter writer, List messages) throws IOException {

     writer.beginArray();

     for (Message message : messages) {

       writeMessage(writer, message);

     }

     writer.endArray();

   }

   public void writeMessage(JsonWriter writer, Message message) throws IOException {

     writer.beginObject();

     writer.name("id").value(message.getId());

     writer.name("text").value(message.getText());

     if (message.getGeo() != null) {

       writer.name("geo");

       writeDoublesArray(writer, message.getGeo());

     } else {

       writer.name("geo").nullValue();

     }

     writer.name("user");

     writeUser(writer, message.getUser());

     writer.endObject();

   }

   public void writeUser(JsonWriter writer, User user) throws IOException {

     writer.beginObject();

     writer.name("name").value(user.getName());

     writer.name("followers_count").value(user.getFollowersCount());

     writer.endObject();

   }

   public void writeDoublesArray(JsonWriter writer, List doubles) throws IOException {

     writer.beginArray();

     for (Double value : doubles) {

       writer.value(value);

     }

     writer.endArray();

   }}

JsonWriter可用于来写一个JSON流。这个类的实例不是线程安全的。调用JsonWriter产生一个不规则JSON字符串会抛出异常IllegalStateException。

构造方法

public JsonWriter (Writer out)

创建一个新的JSON编码流的实例。为了获得最佳性能，需要确保Write缓冲，必要时强制转换为BufferedWriter。

公共方法

public JsonWriter beginArray()

开始一个新的数组编码。每次调用这个方法必须调用一个endArray()进行配对。

返回值

JsonWriter对象。

异常

IOException

public JsonWriter beginObject()

开始一个新的对象编码。每次调用这个方法必须调用一个endObject ()进行配对。

返回值

JsonWriter对象。

异常

IOException

public void close()

刷新和关闭实例对象和底层Writer。

异常

IOException 如果JSON文件不完整抛出此异常。

public JsonWriter endArray()

结束当前编码数组

返回值

JsonWriter对象。

异常

IOException

public JsonWriter endObject()

结束当前编码对象

返回值

JsonWriter对象。

异常

IOException

public void flush()

确保所有缓存数据写入底层Writer并刷新(flush)这个实例对象。

public boolean isLenient()

如果writer对象是不严格的语法规则返回true。

public JsonWriter name(String name)

编码属性名

参数

name 将被赋值对象的名字，不允许使用空值。

返回值

JsonWriter对象。

异常

IOException

public JsonWriter nullValue()

编码空值。

返回值

对象本身。

异常

IOException

public void setIndent(String indent)

为编码文档每一级设置缩进字符串。如果indent.isEmpty()返回true编码文档将被压缩，否则编码文档将更加易读。

参数

indent 一个仅包含空格的字符串。

public void setLenient(boolean lenient)

配置writer对象使其使用不严格的语法规则。默认情况下，此writer对象只能发送符合 RFC 4627 语法规则的JSON。设置允许writer不严格规则如下：

l 最顶层的值可以是任何类型。严格来说，最顶层的值必须是一个对象或者数组。

l 数字可以是非数值类型或无限大。

public JsonWriter value(double value)

编码属性值

参数

Value 一个限定的值。不能是非数值或无限大的数(NaNs)，除非writer对象是不严格的。

返回值

Writer对象

异常

IOException

public JsonWriter value(long value)

编码属性值

返回值

Writer对象

异常

IOException

public JsonWriter value(Number value)

编码属性值

参数

Value 一个限定的值。不能是非数值或无限大的数(NaNs)，除非writer对象是不严格的。

返回值

Writer对象

异常

IOException

public JsonWriter value(boolean value)

编码属性值

返回值

Writer对象

异常

IOException

public JsonWriter value(String value)

编码属性值

参数

Value 一个字符串值，或者空值来编码空字符

返回值

Writer对象

异常

IOException

补充

文章精选

Android JSON写入类 - JsonWriter

JDOM创建XML例子


android.view

接口

ContextMenu

ContextMenu.ContextMenuInfo

GestureDetector.OnDoubleTapListener

GestureDetector.OnGestureListener

InputQueue.Callback

KeyEvent.Callback

LayoutInflater.Factory

LayoutInflater.Filter

Menu

MenuItem

MenuItem.OnMenuItemClickListener

ScaleGestureDetector.OnScaleGestureListener

SubMenu

SurfaceHolder

SurfaceHolder.Callback

SurfaceHolder.Callback2

View.OnClickListener

View.OnCreateContextMenuListener

View.OnFocusChangeListener

View.OnKeyListener

View.OnLongClickListener

View.OnTouchListener

ViewGroup.OnHierarchyChangeListener

ViewManager

ViewParent

ViewStub.OnInflateListener

ViewTreeObserver.OnGlobalFocusChangeListener

ViewTreeObserver.OnGlobalLayoutListener

ViewTreeObserver.OnPreDrawListener

ViewTreeObserver.OnScrollChangedListener

ViewTreeObserver.OnTouchModeChangeListener

Window.Callback

WindowManager

类

AbsSavedState

ContextThemeWrapper

Display

FocusFinder

GestureDetector

GestureDetector.SimpleOnGestureListener

Gravity

HapticFeedbackConstants

InputDevice

InputDevice.MotionRange

InputEvent

InputQueue

KeyCharacterMap

KeyCharacterMap.KeyData

KeyEvent

KeyEvent.DispatcherState

LayoutInflater

MenuInflater

MotionEvent

MotionEvent.PointerCoords

OrientationEventListener

OrientationListener

ScaleGestureDetector

ScaleGestureDetector.SimpleOnScaleGestureListener

SoundEffectConstants

Surface

SurfaceView

TouchDelegate

VelocityTracker

View（部分）

View.BaseSavedState

View.MeasureSpec

ViewConfiguration

ViewDebug

ViewGroup

ViewGroup.LayoutParams

ViewGroup.MarginLayoutParams

ViewStub

ViewTreeObserver

Window

WindowManager.LayoutParams

枚举

ViewDebug.HierarchyTraceType

ViewDebug.RecyclerTraceType

异常

InflateException

Surface.OutOfResourcesException

SurfaceHolder.BadSurfaceTypeException

WindowManager.BadTokenException


ContextMenu

译者署名： Kun

版本：Android 2.3 r1

结构

继承关系

public interface ContextMenu implements Menu

android.view.ContextMenu

类概述

扩展自 Menu 的上下文菜单提供了修改上下文菜单头(header)的功能。（译者注：当一个视图注册了上下文菜单时，执行一个在该对象上长按（2秒）的动作，将出现一个具有相关功能的浮动菜单。）

上下文菜单不支持菜单项的快捷方式和图标。

当执行长按上下文菜单时，大多数情况会调用 registerForContextMenu(View) 函数和重写执行 onCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo)函数。（译者注：因为要创建一个上下文菜单，你必须重写这个活动的上下文回调函数onCreateContextMenu() 并且 通过 registerForContextMenu(View) 为其注册上下文菜单。）

内部类

interface ContextMenu.ContextMenuInfo

获得更多关于创建上下文菜单的信息。（ 译者注：例如：AdapterViews 使用这个类可以精确选择adapter的位置来启动上下文菜单。）

公共方法

public abstract void clearHeader ()

清除上下文菜单头的信息。（译者注：包括图片和文字信息

Menu.clearHeader(); 后

）

public abstract ContextMenu setHeaderIcon (Drawable icon)

为上下文菜单头设置图标

参数

icon 你要使用的 Drawable

返回值

调用你设置修改的上下文菜单

public abstract ContextMenu setHeaderIcon (int iconRes)

设置上下文菜单头图标为指定的资源id

参数

iconRes 你要使用的图标资源的目录

（译者注：把图标放入res/drawable/ 目录下，R文件会自动生成对应项。设置方法如menu.setHeaderIcon(R.drawable.webtext)

这个上下文菜单头是没有设置图标的

这个上下文菜单头是设置了图标的

）

返回值

调用你设置修改过的上下文菜单

public abstract ContextMenu setHeaderTitle (int titleRes)

通过资源标识符为上下文菜单头的标题栏设置文字。（译者注：需要在res/string中先设置一段你需要的文字，如：<string name="titletest">这是一段测试文字</string>

然后通过R文件索引到这段文字，menu.setHeaderTitle(R.string.titletest)）

参数

titleRes 所需文字资源的索引

返回值

调用你设置修改过的上下文菜单

public abstract ContextMenu setHeaderTitle (CharSequence title)

设置上下文菜单的标题，显示在标题栏

参数

title 标题要显示的文字

返回值

调用你设置修改过的上下文菜单

public abstract ContextMenu setHeaderView (View view)

设置View 到上下文菜单头上。将替代上下文菜单头的图标和标题（或者替代你之前设置的headerView）

参数

view 上下文菜单头要使用的 View

返回值

调用你设置修改过的上下文菜单内容

补充

文章精选：

Android 的上下文菜单： Context Menu

android的ContextMenu

android 上下文菜单Context Menu

代码示例：

Test_Contextmenu.java

public class Test_Contextmenu extends Activity {

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

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        TextView txt1 = (TextView) this.findViewById(R.id.txt1);

        this.registerForContextMenu(txt1);

        TextView txt2 = (TextView) this.findViewById(R.id.txt2);

        this.registerForContextMenu(txt2);

    }

    //　重写　onCreateContextMenu　用以创建上下文菜单

     @Override

    public void onCreateContextMenu(ContextMenu menu, View v,

        ContextMenuInfo menuInfo){

    super.onCreateContextMenu(menu, v, menuInfo);

    // 创建 R.id.txt1  的上下文菜单

    if (v == (TextView) this.findViewById(R.id.txt1)) {

        menu.setHeaderIcon(R.drawable.icon);

        menu.setHeaderTitle(R.string.titletest);

        //menu.clearHeader();

        //　第一个参数：组ID

        //　第二个参数：菜单项ID

        //　第三个参数：顺序号

        //　第四个参数：菜单项上显示的内容

        menu.add(1,0,0,"菜单1");

        menu.add(1,1,1,"菜单2").setCheckable(true); //　增加一个√选项

    }

    // 创建 R.id.txt2 的上下文菜单（多级）

    else if(v == (TextView) this.findViewById(R.id.txt2)){

    // ContextMenu.addSubMenu("菜单名称")　-　用来添加子菜单。子菜单其实就是一个特殊的菜单

        SubMenu sub1 = menu.addSubMenu("父菜单1");

        sub1.setHeaderIcon(R.drawable.folder);

        sub1.add(0, 0, 0, "菜单1");

        sub1.add(0, 1, 1, "菜单2");

        sub1.setGroupCheckable(1, true, true);

        SubMenu sub2 = menu.addSubMenu("父菜单2");

        sub2.setIcon(R.drawable.text);

        sub2.add(1, 0, 0, "菜单3");

        sub2.add(1, 1, 1, "菜单4");

        sub2.setGroupCheckable(1, true, true);

    }

    }

}

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<TextView

    android:id="@+id/txt1"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="请 长 按 触 发(txt1)"

    />

    <TextView

    android:id="@+id/txt2"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="请 长 按 触 发(txt2)"

    />

</LinearLayout>

strings.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="hello">Hello World, Test_Contextmenu!</string>

    <string name="app_name">Test_Contextmenu</string>

    <string name="titletest">这是一段测试文字</string>

</resources>


ContextMenu.ContextMenuInfo

译者署名： Kun

版本：Android 2.3 r1

结构

继承关系

public static interface ContextMenu.ContextMenuInfo

子类及间接子类

间接子类

AdapterView.AdapterContextMenuInfo,ExpandableListView.ExpandableListContextMenuInfo

类概述

获得更多关于创建上下文菜单的信息。 例如：AdapterView 使用这个类可以精确选择adapter的位置来启动上下文菜单。


Display

译者署名：州伟

译者邮箱：guozwhero@gmail.com

版本：Android 4.0 r1

结构

继承关系

public class Display extends Object

java.lang.Object

android.view.Display

类概述

Display类提供关于屏幕尺寸和分辨率的信息。

常量

public static final int DEFAULT_DISPLAY

缺省的Display id.

常量值：0 (0x00000000)

公共方法

public int getDisplayId ()

返回此屏幕的索引。此方法目前未定义，请不要使用。

public int getHeight ()

此方法不建议使用

请使用getSize(Point) 代替

public void getMetrics (DisplayMetrics outMetrics)

获取描述此屏幕尺寸和分辨率的DisplayMetrics对象。

此大小是基于当前屏幕旋转而调整的。

此方法返回的大小并不一定代表实际屏幕的原始大小（原始分辨率）。返回的大小可能会有所调整，以排除某些总是可见的系统布置元素。 这也可能是被调整以提供与旧的为较小的初始的应用一致，初始应用最初是为较小的屏幕而设计的。

参数

outMetrics 一个 DisplayMetrics 对象接收 metrics.

public int getOrientation ()

此方法不建议使用

请使用getRotation()代替

返回值

屏幕的方向

public int getPixelFormat ()

返回本机屏幕像素格式。返回值可能是一个int类型的PixelFormat的常量。

返回

可能是一个int类型的PixelFormat的常量

public void getRectSize (Rect outSize)

获取屏幕矩形的大小，以像素为单位

参数

OutSize 一个Rect对象接受大小的信息

参见

getSize(Point)

public float getRefreshRate ()

返回屏幕帧每秒的刷新率。

public int getRotation ()

返回从“自然”(natural)方向的屏幕旋转度数。返回值可能Surface.ROTATION_0（不旋转），Surface.ROTATION_90，Surface.ROTATION_180，或Surface.ROTATION_270。例如：如果设备有一个宽的屏幕，使用者转动进入横向，此时返回值可能是Surface.ROTATION_90 或者 Surface.ROTATION_270，取决于它旋转的方向。角度是绘制图形在屏幕的旋转，这是设备物理旋转的相反方向。例如：如果该设备是逆时针旋转90度，以弥补渲染会顺时针旋转90度，从而这里的返回值将会是Surface.ROTATION_90。

public void getSize (Point outSize)

获取屏幕的尺寸，以像素为单位。

注意，此值不应被用于计算布局，因为一个设备沿着显示通常有屏幕装饰(例如状态栏)，减少的应用空间使得原尺寸与之不符。布局应该改用窗口的大小。

此大小是基于当前屏幕旋转而调整的。

此方法返回的大小并不一定代表实际屏幕的原始大小（原始分辨率）。返回的大小可能会有所调整，以排除某些系统总是可见的装饰元素。这也可能是缩放，提供与旧，最初是为小屏幕设计的应用程序的兼容性。

参数

outsize Point对象接收大小的信息。

public int getWidth ()

此方法不建议使用

请使用getSize(Point) 代替

补充

文章精选

关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi


ViewManager

译者署名： Aman

译者链接：http://blog.csdn.net/cocohufei

版本：Android 2.3 r1

结构

继承关系

public interface ViewManager

android.view.ViewManager

子类及间接子类

间接子类

AbsListView, AbsSpinner, AbsoluteLayout, AdapterView<T extends Adapter>, AppWidgetHostView, DatePicker, DialerFilter, ExpandableListView, FrameLayout, Gallery, GestureOverlayView, GridView, HorizontalScrollView, ImageSwitcher, LinearLayout, ListView, MediaController, RadioGroup, RelativeLayout, ScrollView, SlidingDrawer, Spinner, TabHost, TabWidget, TableLayout, TableRow, TextSwitcher, TimePicker, TwoLineListItem, ViewAnimator, ViewFlipper, ViewGroup, ViewSwitcher, WebView, WindowManager, ZoomControls

类概述

此接口使你可以向一个Activity中添加和移除子视图。调用 Context.getSystemService()，你可以得到该类的一个实例。（译者注：ViewManager是个接口，没有任何实现，抽象类ViewGroup对该接口的三个方法进行了具体实现。）

公共方法

public abstract void addView (View view, ViewGroup.LayoutParams params)

（译者注：增添一个视图对象，并指定其布局参数

参数

view 制定添加的子视图

params 子视图的布局参数）

public abstract void removeView (View view)

（译者注：移除指定的视图

参数

view 指定移除的子视图）

public abstract void UpdateViewLayout (View view, ViewGroup.LayoutParams params)

（译者注：更新一个子视图

参数

view 指定更新的子视图

params 更新时所用的布局参数）

补充

文章精选

ViewManager的Demo


View

农民伯伯

版本：Android 2.2

java.lang.Object

android.view.View

直接子类：

AnalogClock, ImageView, KeyboardView, ProgressBar, SurfaceView, TextView, ViewGroup, ViewStub

间接子类：

AbsListView, AbsSeekBar, AbsSpinner, AbsoluteLayout, AdapterView<T extends Adapter>, AppWidgetHostView, AutoCompleteTextView, Button, CheckBox, CheckedTextView, Chronometer, CompoundButton, DatePicker, DialerFilter, DigitalClock, EditText, ExpandableListView, ExtractEditText, FrameLayout, GLSurfaceView, Gallery, GestureOverlayView, GridView, HorizontalScrollView, ImageButton, ImageSwitcher, LinearLayout, ListView, MediaController, MultiAutoCompleteTextView, QuickContactBadge, RadioButton, RadioGroup, RatingBar, RelativeLayout, ScrollView, SeekBar, SlidingDrawer, Spinner, TabHost, TabWidget, TableLayout, TableRow, TextSwitcher, TimePicker, ToggleButton, TwoLineListItem, VideoView, ViewAnimator, ViewFlipper, ViewSwitcher, WebView, ZoomButton, ZoomControls

XML属性

属性名称

描述

android:background

设置背景色/背景图片。可以通过以下两种方法设置背景为

透明："@android:color/transparent"和"@null"。注意

TextView默认是透明的，不用写此属性，但是

Buttom/ImageButton/ImageView想透明的话就得写这个属

性了。

android:clickable

是否响应点击事件。

android:contentDescription

设置View的备注说明，作为一种辅助功能提供，为一些没

有文字描述的View提供说明，如ImageButton。这里在界

面上不会有效果，自己在程序中控制，可临时放一点字符

串数据。

android:drawingCacheQuality

设置绘图时半透明质量。有以下值可设置：auto（默认，

由框架决定）/high（高质量，使用较高的颜色深度，消耗

更多的内存）/low（低质量，使用较低的颜色深度，但是

用更少的内存）。

android:duplicateParentState

如果设置此属性，将直接从父容器中获取绘图状态（光标，

按下等）。 见下面代码部分，注意根据目前测试情况仅仅是

获取绘图状态，而没有获取事件，也就是你点一下

LinearLayout时Button有被点击的效果，但是不执行点击事

件。

android:fadingEdge

设置拉滚动条时 ，边框渐变的放向。none（边框颜色不

变），horizontal（水平方向颜色变淡），vertical

（垂直方向颜色变淡）。参照fadingEdgeLength的

效果图

android:fadingEdgeLength

设置 边框渐变的长度。

android:fitsSystemWindows

设置布局调整时是否考虑系统窗口（如状态栏）

android:focusable

设置是否获得焦点。若有requestFocus()被调用时，后者

优先处理。注意在表单中想设置某一个如EditText获取焦

点，光设置这个是不行的，需要将这个EditText前面的

focusable都设置为false才行。在Touch模式下获取焦点

需要设置focusableInTouchMode为true。

android:focusableInTouchMode

设置在Touch模式下View是否能取得焦点。

android:hapticFeedbackEnabled

设置触感反馈。（译者注：按软键以及进行某些UI交互时振动，暂时不知道用法，大家可以找找performHapticFeedback或HapticFeedback这个关键字的资料看看。）

android:id

给当前View设置一个在当前layout.xml中的唯一编号，可

以通过调用View.findViewById() 或Activity.findViewById()

根据这个编号查找到对应的View。不同的layout.xml之间

定义相同的id不会冲突。格式如”@+id/btnName”

android:isScrollContainer

设置当前View为滚动容器。这里没有测试出效果来，

ListView/ GridView/ ScrollView根本就不用设置这个属性，

而EdidText设置android:scrollbars也能出滚动条。

android:keepScreenOn

View在可见的情况下是否保持唤醒状态。

常在LinearLayout使用该属性，但是模拟器这里没有效果。

android:longClickable

设置是否响应长按事件.

android:minHeight

设置视图最小高度

android:minWidth

设置视图最小宽度度

android:nextFocusDown

设置下方指定视图获得下一个焦点。焦点移动是基于一个

在给定方向查找最近邻居的算法。如果指定视图不存在，

移动焦点时将报运行时错误。可以设置

imeOptions= actionDone，这样输入完即跳到下一个焦点。

android:nextFocusLeft

设置左边指定视图获得下一个焦点。

android:nextFocusRight

设置右边指定视图获得下一个焦点。

android:nextFocusUp

设置上方指定视图获得下一个焦点。

android:onClick

点击时从上下文中调用指定的方法。这里指定一个方法名

称，一般在Activity定义符合如下参数和返回值的函数并将

方法名字符串指定为该值即可：

public void onClickButton(View view)

android:onClick=” onClickButton”

android:padding

设置上下左右的边距，以像素为单位填充空白。

android:paddingBottom

设置底部的边距，以像素为单位填充空白。

android:paddingLeft

设置左边的边距，以像素为单位填充空白。

android:paddingRight

设置右边的边距，以像素为单位填充空白。.

android:paddingTop

设置上方的边距，以像素为单位填充空白。

android:saveEnabled

设置是否在窗口冻结时（如旋转屏幕）保存View的数据，

默认为true，但是前提是你需要设置id才能自动保存，参

见这里。

android:scrollX

以像素为单位设置水平方向滚动的的偏移值，在GridView

中可看的这个效果。

android:scrollY

以像素为单位设置垂直方向滚动的的偏移值

android:scrollbarAlwaysDrawHorizontalTrack

设置是否始终显示垂直滚动条。这里用ScrollView、ListView

测试均没有效果。

android:scrollbarAlwaysDrawVerticalTrack

设置是否始终显示垂直滚动条。这里用ScrollView、ListView

测试均没有效果。

android:scrollbarDefaultDelayBeforeFade

设置N毫秒后开始淡化，以毫秒为单位。

android:scrollbarFadeDuration

设置滚动条淡出效果（从有到慢慢的变淡直至消失）时间，

以毫秒为单位。Android2.2中滚动条滚动完之后会消失，再

滚动又会出来，在1.5、1.6版本里面会一直显示着。

android:scrollbarSize

设置滚动条的宽度。

android:scrollbarStyle

设置滚动条的风格和位置。设置值：insideOverlay、

insideInset、outsideOverlay、outsideInset。这里没有试出太

多效果，以下依次是outsideOverlay与outsideInset效果截

图比较：

android:scrollbarThumbHorizontal

设置水平滚动条的drawable（如颜色）。

android:scrollbarThumbVertical

设置垂直滚动条的drawable（如颜色）.

android:scrollbarTrackHorizontal

设置水平滚动条背景（轨迹）的色drawable（如颜色）

android:scrollbarTrackVertical

设置垂直滚动条背景（轨迹）的drawable注意直接
设置颜色值如”android:color/white”将得出很
难看的效果，甚至都不理解这个属性了，这里可以
参见ApiDemos里res/drawable/
scrollbar_vertical_thumb.xml和
scrollbar_vertical_track.xml，设置代码为：
android:scrollbarTrackVertical
="@drawable/scrollbar_vertical_track"

android:scrollbars

设置滚动条显示。none（隐藏），horizontal（水平），vertical

（垂直）。见下列代码演示使用该属性让EditText内有滚动

条。但是其他容器如LinearLayout设置了但是没有效果。

android:soundEffectsEnabled

设置点击或触摸时是否有声音效果

android:tag

设置一个文本标签。可以通过View.getTag()或 for with

View.findViewWithTag()检索含有该标签字符串的View。但

一般最好通过ID来查询View，因为它的速度更快，并且允

许编译时类型检查。

android:visibility

设置是否显示View。设置值：visible（默认值，显示），

invisible（不显示，但是仍然占用空间），gone

（不显示，不占用空间）

代码：

android:duplicateParentState

    <LinearLayout android:clickable="true" android:background="#ff0fff" android:layout_width="100dp" android:layout_height="100dp">

    <Button android:duplicateParentState="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

    </LinearLayout>

    android:scrollbars

    <EditText android:layout_width="fill_parent"

       android:layout_height="wrap_content" android:minHeight="50dp"

       android:background="@android:drawable/editbox_background"

       android:scrollbars="vertical"

       android:maxLines="4">

    </EditText>


ViewStub

译者署名：唐明

版本：Android 2.2 r1

public final class ViewStub extends View

java.lang.Object

android.view.View

android.view.ViewStub

类摘要：

ViewStub 是一个隐藏的，不占用内存空间的视图对象，它可以在运行时延迟加载布局资源文件。当ViewStub可见，或者调用 inflate()函数时，才会加载这个布局资源文件。 该ViewStub在加载视图时在父容器中替换它本身。因此，ViewStub会一直存在于视图中，直到调用 setVisibility(int) 或者 inflate()为止。ViewStub的布局参数会随着加载的视图数一同被添加到ViewStub父容器。同样，你也可以通过使用inflatedId属性来定义或重命名要加载的视图对象的Id值。例如:

通过"stud"id可以找到被定义的ViewStub对象。加载布局资源文件"mySubTree "后， ViewStub对象从其父容器中移除。可以通过id"subTree"找到由布局资源"mySubTree"创建的View。这个视图对象最后被指定为宽120dip，高40dip。执行加载布局资源文件的推荐方式如下：

当inflate()被调用, 这个ViewStub被加载的视图替代并且返回这个视图对象。这使得应用程序不需要额外执行findViewById()来获取加载视图的引用。

（译者注：这个类大概意思是用ViewStub类和在XML文件里面指定的布局资源文件关联起来，让布局资源文件在需要使用的时候再加载上去。主要作用是性能优化，什么时候用什么时候加载，不用在开始启动的时候一次加载,既可以加快程序的启动速度，又可以节省内存资源。）

嵌套类

接口 ViewStub.OnInflateListener 一个用于接收ViewStub已经成功加载布局资源文件的通知的监听器。

XML属性

属性名称 | 相关方法 | 描述
android:inflatedId | setInflatedId(int) | 覆盖待加载视图的id值。
android:layout | setLayoutResource(int) | 为待加载的资源视图提供一个标识，在ViewStub变为可见或获取焦点时使用它。（译者注：要引用的布局资源文件id）

构造函数

ViewStub(Context context, int layoutResource)

创建一个与指定的布局资源文件关联的ViewStub对象。

参数

layoutResource 要加载的布局资源文件的id值。

公共方法

public void draw (Canvas canvas)

手动在指定的画布绘制这个视图(及所有其子视图)。这个视图必须在调用这个函数之前做好了整体布局。当要自己实现一个视图时，不要重载这个方法；相反，你应该重载onDraw(Canvas)方法。（译者注：主要用于自定义的视图组件的方法。）

参数

canvas 这个画布传到那个已渲染的视图对象。

public int getInflatedId ()

返回加载的布局资源文件的ID，如果加载的布局资源文件的id是NO_ID,那么这个加载的View将保留它原来的id值。

相关XML 属性

android:inflatedId

返回值

一个正整数来标识这个要加载的视图或者NO_ID将保持加载视图原来的id。

参见

setInflatedId(int)

public int getLayoutResource ()

返回加载的布局资源文件的id值。

相关XML 属性

android:layout

返回值

加载到视图对象的布局资源文件id值。

参见

setLayoutResource(int)

setVisibility(int)

inflate()

public View inflate ()

加载getLayoutResource()方法标识的布局资源，并通过加载布局资源替换父容器中它自己。

返回值

这个已加载的布局资源文件.

public void setInflatedId (int inflatedId)

设置加载视图的ID。如果这个id为NO_ID，这个加载视图保持它原来的id不变。

相关XML 属性

android:inflatedId

参数

inflatedId 一个正整数来标识这个加载视图或者NO_ID将保持加载视图原来的id。

参见

getInflatedId()

public void setLayoutResource (int layoutResource)

设置待加载的布局资源文件，当ViewStub被设置为visible或invisible或调用inflate()时使用。这个在加载布局资源文件时创建的视图用来在父容器中替换它自己。

相关XML 属性

android:layout

参数

layoutResource 一个有效的布局资源文件id值（不等于0）。

参见

getLayoutResource()

setVisibility(int)

inflate()

public void setOnInflateListener (ViewStub.OnInflateListener inflateListener)

设置成功加载布局资源文件后事件通知的监听器。

参数

inflateListener 该OnInflateListener在成功加载后得到事件通知。

参见

ViewStub.OnInflateListener

public void setVisibility (int visibility)

当可见性设置为VISIBLE或INVISIBLE，inflate()将被调用，并且加载视图资源在父容器中替换ViewStub。

参数

visibility 设置为VISIBLE（显示）, INVISIBLE（隐藏）, 或 GONE（完全隐藏，不暂用布局位置）.

参见

inflate()

受保护方法

protected void dispatchDraw (Canvas canvas)

调用这个函数去绘制这个控件的子视图。可以通过派生类重写在绘制子类之前获取控制（但是是在他自己的视图已经被绘制完之后）

参数

canvas 这个画布传到那个已渲染的视图对象。

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

测量这个视图以确定其内容的高度和宽度。通过measure(int, int)来调用这个方法，并且应该由子类重写以提高内容测量的效率和精确度。

约定：当该方法被重写时，你必须调用setMeasuredDimension(int, int)来存储已测量视图的高度和宽度。否则将通过measure(int, int)抛出一个IllegalStateException异常。调用父类的onMeasure(int, int)方法是一个有效的办法。

父类的实现是以背景大小为默认大小，除非MeasureSpec（测量细则）允许更大的背景。 为了更好测量内容子类应该重写onMeasure(int, int)。

如果这个方法被重写，子类有责任确保测量它的高度和宽度至少是视图的最小宽度和高度（getSuggestedMinimumHeight()和getSuggestedMinimumWidth()）。

参数

widthMeasureSpec 由于父类有横向空间要求，参见View.MeasureSpec。

heightMeasureSpec 由于父类有纵向空间要求，参见View.MeasureSpec。


ViewTreeObserver

译者署名： 首当其冲

版本：Android 3.0 r1

结构

继承关系

public final class ViewTreeObserver extends Object

java.lang.Object

android.view.ViewTreeObserver

类概述

用于注册监听的视图树观察者(observer)，在视图树种全局事件改变时得到通知。这个全局事件不仅还包括整个树的布局，从绘画过程开始，触摸模式的改变等。ViewTreeObserver不能够被应用程序实例化，因为它是由视图提供，参照 getViewTreeObserver()以查看更多信息。

内部类

interface ViewTreeObserver.OnGlobalFocusChangeListener

当在一个视图树中的焦点状态发生改变时，所要调用的回调函数的接口类

interface ViewTreeObserver.OnGlobalLayoutListener

当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时，所要调用的回调函数的接口类

interface ViewTreeObserver.OnPreDrawListener

当一个视图树将要绘制时，所要调用的回调函数的接口类

interface ViewTreeObserver.OnScrollChangedListener

当一个视图树中的一些组件发生滚动时，所要调用的回调函数的接口类

interface ViewTreeObserver.OnTouchModeChangeListener

当一个视图树的触摸模式发生改变时，所要调用的回调函数的接口类

公共方法

public void addOnGlobalFocusChangeListener (ViewTreeObserver.OnGlobalFocusChangeListener listener)

注册一个回调函数，当在一个视图树中的焦点状态发生改变时调用这个回调函数。

参数

listener 将要被添加的回调函数

异常

IllegalStateException 如果isAlive() 返回false

public void addOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener listener)

注册一个回调函数，当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时调用这个回调函数。

参数

listener 将要被添加的回调函数

异常

IllegalStateException 如果isAlive() 返回false

public void addOnPreDrawListener (ViewTreeObserver.OnPreDrawListener listener)

注册一个回调函数，当一个视图树将要绘制时调用这个回调函数。

参数

listener 将要被添加的回调函数

异常

IllegalStateException 如果isAlive() 返回false

public void addOnScrollChangedListener (ViewTreeObserver.OnScrollChangedListener listener)

注册一个回调函数，当一个视图发生滚动时调用这个回调函数。

参数

listener 将要被添加的回调函数

异常

IllegalStateException 如果isAlive() 返回false

public void addOnTouchModeChangeListener (ViewTreeObserver.OnTouchModeChangeListener listener)

注册一个回调函数，当一个触摸模式发生改变时调用这个回调函数。

参数

listener 将要被添加的回调函数

异常

IllegalStateException 如果isAlive() 返回false

public final void dispatchOnGlobalLayout ()

当整个布局发生改变时通知相应的注册监听器。如果你强制对视图布局或者在一个没有附加到一个窗口的视图的层次结构或者在GONE状态下，它可以被手动的调用

public final boolean dispatchOnPreDraw ()

当一个视图树将要绘制时通知相应的注册监听器。如果这个监听器返回true，则这个绘制将被取消并重新计划。如果你强制对视图布局或者在一个没有附加到一个窗口的视图的层次结构或者在一个GONE状态下，它可以被手动的调用

返回值

当前绘制能够取消并重新计划则返回true，否则返回false。

public boolean isAlive ()

指示当前的ViewTreeObserver是否可用(alive)。当observer不可用时，任何方法的调用（除了这个方法）都将抛出一个异常。如果一个应用程序保持和ViewTreeObserver一个历时较长的引用，它应该总是需要在调用别的方法之前去检测这个方法的返回值。

返回值

但这个对象可用则返回true，否则返回false

public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)

移除之前已经注册的全局布局回调函数。

参数

victim 将要被移除的回调函数

异常

IllegalStateException 如果isAlive() 返回false

public void removeOnGlobalFocusChangeListener (ViewTreeObserver.OnGlobalFocusChangeListener victim)

移除之前已经注册的焦点改变回调函数。

参数

victim 将要被移除的回调函数

异常

IllegalStateException 如果isAlive() 返回false

public void removeOnPreDrawListener (ViewTreeObserver.OnPreDrawListener victim)

移除之前已经注册的预绘制回调函数。

参数

victim 将要被移除的回调函数

异常

IllegalStateException 如果isAlive() 返回false

public void removeOnScrollChangedListener (ViewTreeObserver.OnScrollChangedListener victim)

移除之前已经注册的滚动改变回调函数。

参数

victim 将要被移除的回调函数

异常

IllegalStateException 如果isAlive() 返回false

public void removeOnTouchModeChangeListener (ViewTreeObserver.OnTouchModeChangeListener victim)

移除之前已经注册的触摸模式改变回调函数

参数

victim 将要被移除的回调函数

异常

IllegalStateException 如果isAlive() 返回false

补充

文章链接

Android的选择及文字颜色


ViewParent

译者署名：逝憶流緣

译者链接：http://t.qq.com/pansonphy

版本：Android 3.0 r1

结构

继承关系

public interface ViewParent

android.view.ViewParent

间接子类

AbsListView, AbsSpinner, AbsoluteLayout, AdapterView<T extends Adapter>, AppWidgetHostView, DatePicker, DialerFilter, ExpandableListView, FrameLayout, Gallery, GestureOverlayView, GridView, HorizontalScrollView, ImageSwitcher, LinearLayout, ListView, MediaController, RadioGroup, RelativeLayout, ScrollView, SlidingDrawer, Spinner, TabHost, TabWidget, TableLayout, TableRow, TextSwitcher, TimePicker, TwoLineListItem, ViewAnimator, ViewFlipper, ViewGroup, ViewSwitcher, WebView, ZoomControls

类概述

定义了一些作为View父类，它所具有的功能（译者注：也可以理解为方法）。当一个View与父类交互时，就可以用到这些API了。（译者注：Android中子控件维系一个ViewParent对象，该对象象征着整个控件树的管理者，子控件产生影响整个控件树的事件时，会通知到ViewParent，ViewParent会将其转换成一个自顶向下的事件，分发下去。参照这里）

公共方法

public abstract void bringChildToFront (View child)

把该视图置于其他所有子视图之上。（译者注：如在FrameLayout中切换被叠放的视图）

参数

child 需要改变顺序的子视图

public abstract void childDrawableStateChanged (View child)

当子视图的drawable状态发生变化的时候，调用该方法。

参数

child drawable状态发生变化的子视图

public abstract void clearChildFocus (View child)

当子视图失去焦点的时候调用该方法。

参数

child 失去焦点的子视图

public abstract void createContextMenu (ContextMenu menu)

如果该指定的ContextMenu需要增加菜单，则会由它的父类去填充（同时会向上递归）。

参数

menu 需要填充的菜单

public abstract View focusSearch (View v, int direction)

在指定的方向找到最近的View来切换焦点。

参数

v 当前视图

direction FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, 与FOCUS_RIGHT中取值

public abstract void focusableViewAvailable (View v)

通知父类一个新的并且能够取得焦点的子视图可以使用了。用于处理从没有可取得焦点的视图到出现第一个可以取得焦点的视图的转变。

参数

v 新出现的可以取得焦点的视图

public abstract boolean getChildVisibleRect (View child, Rect r, Point offset)

public abstract ViewParent getParent ()

如果存在父视图，则返回该视图；否则返回NULL。

返回

如果不存在父视图，则返回null

public abstract void invalidateChild (View child, Rect r)

重绘当前child指定的范围。

参数

child 当前视图

r child中无效的范围区域

public abstract ViewParent invalidateChildInParent (int[] location, Rect r)

重绘当前child的全部或者一部分指定范围。location是长度为2的整形数组，两个数分别为child左边和上边的坐标。如果父视图中指定的区域r是无效的，则返回该ViewParent的父视图。如果父视图中指定区域是有效的或者父视图不存在，则返回null。如果方法返回对象不为空，则需要把location数组中的数值更新为返回的ViewParent的左边和上边的坐标值。

参数

location 长度为2的整形数组，数据为需要失效的child左边和上边的坐标值

r child中无效的范围区域

返回

ViewParent，如果不存在父视图，则返回null

public abstract boolean isLayoutRequested ()

返回该视图父类是否有layout控件被请求。

返回

true需要，false 不需要

public abstract void recomputeViewAttributes (View child)

通知父类和子类所有的View属性需要重新生成。

参数

child 改变属性的View

public abstract void requestChildFocus (View child , View focused)

当需要转换子类焦点时调用。

参数

child 该ViewParent需要取得焦点的视图。该视图包含当前聚焦视图。但事实上也不一定会获得焦点

focused child的一个有焦点的子视图

public abstract boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)

当该child视图需要显示在屏幕特定位置时调用。ViewGroup如果需要重写该方法，可以遵循以下几点：

l child必须是该group的直接子类

l rectangle要是child中的坐标

ViewGroup要重写该方法，要坚持几下几点：

l 如果rectangle规定的区域已经是可见的，那么该方法将什么都不会改变

l 只有在rectangle区域可见时，该视图才会有滚动条

参数

child 以起请求的直接子视图

rectangle 需要显示到屏幕上的区域范围

immediate true禁止有滚动 false 则有

返回值

处理请求操作后是否有滚动

public abstract void requestDisallowInterceptTouchEvent (boolean disallowIntercept)

让父类不用 onInterceptTouchEvent(MotionEvent)来拦截触屏事件。

该父类需要把该方法传递给它的父类。同时也要服从触屏的请求（也就是说，只有在按上Up或者clear后才能清除该标识）。

参数

disallowIntercept true表示child不让父类拦截触屏事件

public abstract void requestLayout ()

当父视图的一个child的Layout控件失效时调用。该方法将会重新请求一个Layout控件。

public abstract void requestTransparentRegion (View child)

当一个child希望视图层去收集透明区域并报告给窗口排序服务时调用。例如SurfaceView可以用这个接口来提高接口性能。如果在当前层次没有视图，没有必要用该方法优化，否则有可能会轻微影响该层的性能。

参数

child 要求透明区域进行处理的视图

public abstract boolean showContextMenuForChild (View originalView)

显示该视图或者其祖先类的上下文菜单。

大多数情况下，子类不需要重写该方法。但是，当该子类被直接加到窗口管理器上时（例如：addView(View, android.view.ViewGroup.LayoutParams)），就会重写该方法，并显示上下文菜单。

参数

originalView 需要显示上下文菜单的视图

返回

显示上下文菜单时返回true

public abstract ActionMode startActionModeForChild (View originalView, ActionMode.Callback callback) Since: API Level 11

为指定视图启动一个操作模式。

大多数情况下，一个子类并不需要重新此类。但是，如果子类是直接添加到窗口管理器（例如，addView(View, android.view.ViewGroup.LayoutParams)），那么应重写此方法并启动操作模式。（译者注：关于ActionMode参见这里）

参数

originalView 操作模式首页调用的源视图

callback 处理操作模式生命周期的回调函数

返回值

如果新的操作模式已经启动，返回该操作模式，否则返回null。

补充

文章精选

[推荐]深入Android 【六】 —— 界面构造

Android UI Event Listener


WindowManager

译者署名：逝憶流緣

译者链接：http://t.qq.com/pansonphy

版本：Android 2.3 r1

结构

继承关系

public interface WindowManager extends android.view.ViewManager

android.view.WindowManager

类概述

该接口用于与窗口管理器交互。通过 Context.getSystemService(Context.WINDOW_SERVICE)可以获取到WindowManager的实例。（译者注：如：WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);）

参见

getSystemService(String)

    WINDOW_SERVICE

内部类

public static class WindowManager.LayoutParams

（译者注：继承自android.view.ViewGroup.LayoutParams）

public static class WindowManager.BadTokenException

添加view时，如果该view的WindowManager.LayoutParams的令牌(token)无效，则会抛出该异常

公共方法

public abstract Display getDefaultDisplay()

获取默认的显示对象

返回值

默认的Display对象

public abstract void removeViewImmediate (View view)

是 removeView(View) 的一个特殊扩展，在方法返回前能够立即调用该视图层次的 View.onDetachedFromWindow() 方法。 不适用于一般的程序；如果您要正确无误的使用它，那您就需要格外小心了。

参数

view 需要移除的视图

补充

文章链接

WindowManagerDemo

示例代码(来自文章链接的代码)

        public class WindowManagerDemo extends Activity {

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

        @Override

        public void onCreate(Bundle savedInstanceState) {

               super.onCreate(savedInstanceState);

               setContentView(R.layout.main);

               TextView textView = (TextView) findViewById(R.id.label);

               WindowManager windowManager = (WindowManager)

               getSystemService(Context.WINDOW_SERVICE);

               // print the current window's width and height on the title, eg: 320*480

        setTitle(windowManager.getDefaultDisplay().getWidth() + "*"

                               + windowManager.getDefaultDisplay().getHeight());

               textView.setText("See the Title");

        }

}


GestureDetector

译者署名：Haiya 胡蝶

版本：Android 2.3 r1

结构

继承关系

public class GestureDetector extends Object

java.lang.Object

android.view.GestureDetector

类概述

通过系统提供的 MotionEvent 来监测各种手势和（触摸）事件。当一个指定的手势事件发生时，GestureDetector.OnGestureListener 回调函数将通告用户。这个类仅仅处理由触摸引发的 MotionEvent（不能处理由轨迹球引发的事件）。要使用这个类需执行以下操作：

l 为你的 View 建立一个GestureDetector实例。

l 在View的onTouchEvent(MotionEvent)方法里确保调用（GestureDetector的）onTouchEvent(MotionEvent)方法。当相关事件发生时，定义在回调函数里的方法将被执行。

嵌套类

interface GestureDetector.OnDoubleTapListener

双击和轻击(confirmed single-tap)事件的监听器。（译者注：confirmed single-tap是用户快速点一下触摸屏所引发的动作。区分下面两种情况：

1. 手指按下，停留0.2秒（估计值）以上再抬起时，不算confirmed single-tap

2. 快速点击屏幕两次不会引发两次confirmed single-tap事件，而是引发一次DoubleTap事件。）

interface GestureDetector.OnGestureListener

在有手势动作发生时，通知的监听器

class GestureDetector.SimpleOnGestureListener

当只需要监听部分手势时，用于扩展的便捷类

构造函数

public GestureDetector (GestureDetector.OnGestureListener listener, Handler handler)

已弃用，替代方法：

GestureDetector(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler)

通过提供的监听器来创建一个GestureDetector，这个构造函数只能用于非UI线程（因为它允许指定一个handler）。

参数

listener 用于触发所有回调函数的监听器，不能为空

handler 需要使用到的handler

异常

NullPointerException Listener或者handler为空时

public GestureDetector (GestureDetector.OnGestureListener listener)

已弃用，替代方法：

GestureDetector(android.content.Context, android.view.GestureDetector.OnGestureListener)

通过提供的监听器来创建一个GestureDetector。你只能于UI线程里使用这个构造函数（这是通常的情况）

参数

listener 用于触发所有回调函数的监听器，不能为空

异常

NullPointerException 如果Listener为空

参见

Handler()

public GestureDetector (Context context, GestureDetector.OnGestureListener listener)

通过提供的监听器来创建一个GestureDetector。（通常情况下）你只能于UI线程里使用这个构造函数

参数

context 应用程序上下文

listener 用于触发所有回调函数的监听器，不能为空

异常

NullPointerException 如果Listener为空

参见

Handler()

public GestureDetector (Context context, GestureDetector.OnGestureListener listener, Handler handler)

通过提供的监听器来创建一个GestureDetector. （通常情况下）你只能于UI线程里使用这个构造函数

参数

context 应用程序上下文

listener 用于触发所有回调函数的监听器，不能为空

handler 需要使用到的handler

异常

NullPointerException 如果Listener为空

参见

Handler()

public GestureDetector (Context context, GestureDetector.OnGestureListener listener, Handler handler, boolean ignoreMultitouch)

通过提供的监听器来创建一个GestureDetector. （通常情况下）你只能于UI线程里使用这个构造函数

参数

context 应用程序上下文

listener 用于触发所有回调函数的监听器，不能为空

handler 需要使用到的handler

ignoreMultitouch 是否忽视多点触控（译者注：仅适用于2.2以上的android版本，如果没设置这个参数（即使用的是上一个构造函数），则会忽视多点触控

，由于网上都没有在GestureDetector传入handler的例子，所以我也不明白这里的handler的具体用意。如果有需要深入理解的朋友，请参照GestureDetector的源码

异常

NullPointerException 如果Listener为空

参见

Handler()

公共方法

public boolean isLongpressEnabled ()

返回值

如果允许长按事件，则返回true，否则为false

public boolean onTouchEvent (MotionEvent ev)

分析指定的动作事件，如何满足条件，就触发在 GestureDetector.OnGestureListener 中提供的回调函数

参数

ev 当前的触摸事件（译者注：如MotionEvent_DOWN, MotionEvent_UP）

返回值

如果 GestureDetector.OnGestureListener 消耗了这个事件，则返回true，否则返回false

public void setIsLongpressEnabled (boolean isLongpressEnabled)

设置是否启用长按。如果启用长按，当用户按下并保持按下状态时，将收到一个长按事件，同时不再接收其它事件；如果禁用长按，当用户按下并保持按下状态然后再移动手指时，将会接收到scroll事件。长按默认为启用。

参数

isLongpressEnabled 是否启用接收长按事件

public void setOnDoubleTapListener (GestureDetector.OnDoubleTapListener onDoubleTapListener)

设置双击及其相关手势的监听器

参数

onDoubleTapListener 触发所有回调函数的监听器，或者设为null以停止监听双击的手势

补充

文章链接

GestureDetector手势识别类 - 进阶篇

android GestureDetector使用

GestureDetector和SimpleOnGestureListener的使用教程


Gravity

译者署名：ShoZ

译者链接：http://weibo.com/shostyle

版本：Android 4.0 r1

结构

继承关系

public class Gravity extends Object

java.lang.Object

android.view.Gravity

类概述

用来在一个更大容器中布置对象的标准常量和工具。

常量

public static final int AXIS_CLIP

原始位控制右/底边界是否被剪切到它的容器中，基于已应用的对齐方向。

常量值: 8 (0x00000008)

public static final int AXIS_PULL_AFTER

原始位控制右/底边界如何被放置

常量值: 4 (0x00000004)

public static final int AXIS_PULL_BEFORE

原始位控制左/顶边界如何被放置

常量值: 2 (0x00000002)

public static final int AXIS_SPECIFIED

原始位标明一个已指定的轴的对齐方向

常量值: 1 (0x00000001)

public static final int AXIS_X_SHIFT

横轴位定义

常量值: 0 (0x00000000)

public static final int AXIS_Y_SHIFT

垂直轴位定义

常量值: 4 (0x00000004)

public static final int BOTTOM

将对象推至容器底部但不改变它的尺寸

常量值: 80 (0x00000050)

public static final int CENTER

把对象放置于其容器的垂直轴和横轴的中间而不改变其尺寸（译者注：即全居中）

常量值: 17 (0x00000011)

public static final int CENTER_HORIZONTAL

把对象放置于横轴的中间而不改变其尺寸（译者注：水平居中）

常量值: 1 (0x00000001)

public static final int CENTER_VERTICAL

把对象放置于垂直轴的中间而不改变其尺寸（译者注：垂直居中）

常量值: 16 (0x00000010)

public static final int CLIP_HORIZONTAL

标志剪切对象在其容器中沿横轴的边界

常量值: 8 (0x00000008)

public static final int CLIP_VERTICAL

标志裁剪对象在其容器中沿垂直轴的边界

常量值: 128 (0x00000080)

public static final int DISPLAY_CLIP_HORIZONTAL

使裁剪沿水平层面整体显示的特殊常量。这在使用apply(int, int, int, Rect, int, int, Rect)的默认情况下是不适用的;你必须自己调用applyDisplay(int, Rect, Rect)来做。

常量值: 16777216 (0x01000000)

public static final int DISPLAY_CLIP_VERTICAL

使裁剪沿垂直层面整体显示的特殊常量。这在使用apply(int, int, int, Rect, int, int, Rect)的默认情况下是不适用的;你必须通过调用applyDisplay(int, Rect, Rect)来做。

常量值: 268435456 (0x10000000)

public static final int END

将对象推至其所在容器的X轴的末尾而不改变其尺寸

常量值: 8388613 (0x00800005)

public static final int FILL

拉伸对象的水平和垂直的尺寸以完全填满其所在容器

常量值: 119 (0x00000077)

public static final int FILL_HORIZONTAL

拉伸对象的水平尺寸以完全填满其所在容器（译者注：垂直尺寸不变）

常量值: 7 (0x00000007)

public static final int FILL_VERTICAL

拉伸对象的垂直尺寸以完全填满其所在容器（译者注：水平尺寸不变）

常量值: 112 (0x00000070)

public static final int HORIZONTAL_GRAVITY_MASK

用来得到一个对齐方向的绝对水平对齐方向的二进制掩码。

常量值: 7 (0x00000007)

public static final int LEFT

将对象推至其所在容器的左边而不改变其尺寸

常量值: 3 (0x00000003)

public static final int NO_GRAVITY

用来标明没有设定对齐方向。

常量值: 0 (0x00000000)

public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK

水平对齐方向和脚本的特定方向位的二进制掩码

常量值: 8388615 (0x00800007)

public static final int RELATIVE_LAYOUT_DIRECTION

原始位控制布局方向是否是相对布局（用START/END 代替绝对布局的 LEFT/RIGHT）

常量值: 8388608 (0x00800000)

public static final int RIGHT

将对象推至其所在容器的右边而不改变其尺寸

常量值: 5 (0x00000005)

public static final int START

将对象推至其所在容器X轴起点的位置而不改变其尺寸

常量值: 8388611 (0x00800003)

public static final int TOP

将对象推至其所在容器的顶端而不改变其尺寸

常量值: 48 (0x00000030)

public static final int VERTICAL_GRAVITY_MASK

用来得到一个对齐方向的垂直对齐方向的二进制掩码

常量值: 112 (0x00000070)

公共方法

public static void apply (int gravity, int w, int h, Rect container, Rect outRect)

为一个对象应用一个对齐方向常量

参数

gravity 所需放置的对象，由该类中的常量定义

w 对象的水平尺寸

h 对象的垂直尺寸

container 容器空间的框架，将用来放置指定对象，应该足够大，以包含对象的宽和高。

outRect 接收对象在其容器中的计算帧(computed frame)

public static void apply (int gravity, int w, int h, Rect container, int xAdj, int yAdj, Rect outRect)

为一个对象应用一个对齐方向常量

参数

gravity 所需放置的对象，由该类中的常量定义

w 对象的水平尺寸

h 对象的垂直尺寸

container 容器空间的框架，将用来放置指定对象，应该有足够大，以包含对象的宽和高。

xAdj 应用于X轴的偏移，如果对齐方向是LEFT那么将对象向右推；如果对齐方向是RIGHT那么将对象向左推；如果对齐方向是CENTER_HORIZONTAL那么将其向左或右推移；其他情况忽略

yAdj 应用于Y轴的偏移，如果对齐方向是TOP那么将对象向下推移；如果对齐方向是BOTTOM那么将对象向上推移；如果对齐方向是CENTER_VERTICAL那么将其向上或下推移；其他情况忽略

outRect 接收对象在其容器中的计算帧(computed frame)

public static void applyDisplay (int gravity, Rect display, Rect inoutObj)

应用于对一个已存在对象整体“显示”的额外对齐方向行为。可用于apply(int, int, int, Rect, int, int, Rect)之后来使对象可见.移动或剪切的对象在默认情况下是可见的.对齐方向标志DISPLAY_CLIP_HORIZONTAL和DISPLAY_CLIP_VERTICAL可用于改变该行为

参数

gravity 用来修改显示中位置的对齐方向常量

display 用来放置对象的矩形显示框

inoutObj 提供当前对象的位置;如果需要适应显示窗则返回已修改后的值

public static boolean isHorizontal (int gravity)

表明提供的对齐方向是否能横向的拉伸。

参数

gravity 待检查的是否能横向的拉伸的对齐方向

返回值

若能横向的拉伸返回真

public static boolean isVertical (int gravity)

表明提供的对齐方向是否能垂直的拉伸。

参数

gravity 待检查是否能垂直的拉伸的对齐方向

返回值

若能垂直拉伸返回真

补充

文章精选

【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性

android:layout_gravity 和 android:gravity 的区别


MenuInflater

译者署名：獨鍆躌踄

译者链接：http://www.cnblogs.com/mxgsa/

版本：Android 2.3 r1

结构

继承关系

public class MenuInflater extends Object

java.lang.Object

android.view.MenuInflater

子类及间接子类

直接子类

TabActivity

概述

这个类是用来实例化菜单XML文件成菜单对象。

由于性能的原因，由于程序创建时候就加载一些预处理XML文件，Menu过多就造成很重的负担。因此，这是目前无法在运行时使用多于一个XmlPullParser的xml文件去使用MenuInflater，它只能使用一个XmlPullParser返回的编译过的资源（R.某些文件）

构造函数

public MenuInflater (Context context)

构造填充(inflater)一个菜单

参见

getMenuInflater()

公共方法

public void inflate (int menuRes, Menu menu)

菜单层次从一个指定的xml资源去填充，如果有错误会抛掷 InflateException。

参数

menuRes 要加载XML布局文件中的资源ID（例如 R.menu.main_activity）

menu 要填充的菜单，这些项目和子菜单就被添加到要填充菜单中

补充

文章精选

MenuInflater Android菜单从xml创建方法

Android中MenuInflater实例

Android 中MenuInflater的使用(布局定义菜单)

示例代码

新建一个android2.2的项目，项目文件列表

MenuInfalterTest.java

public class MenuInflaterTest extends Activity {

    @Override

    public void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.main);

    }

    public boolean onCreateOptionsMenu(Menu menu) {

       // 获取当前的菜单

       MenuInflater inflater = getMenuInflater();

       // 填充菜单

       inflater.inflate(R.menu.option_menu, menu);

       return true;

    }

    /**

     * 对菜单点击事件处理

     */

    public boolean onOptionsItemSelected(MenuItem item) {

       switch (item.getItemId()) {

       case R.id.menu_add:

           break;

       case R.id.menu_wallaper:

           break;

       case R.id.menu_search:

           break;

       case R.id.menu_setting:

           showSettings();

           break;

       }

       return super.onOptionsItemSelected(item);

    }

    /**

     * 显示设置选项

     */

    private void showSettings() {

       Intent settings = new Intent

       (android.provider.Settings.ACTION_SETTINGS);

       settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK

              | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

       startActivity(settings);

    }

}

}

Main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<TextView

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/hello"

    />

</LinearLayout>

Option_menu.xml

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/menu_add"

        android:title="Add"

        android:icon="@android:drawable/ic_menu_add"/>

     <item android:id="@+id/menu_wallaper"

        android:title="Wallpaper"

        android:icon="@android:drawable/ic_menu_gallery"/>

    <item  android:id="@+id/menu_search"

        android:title="Search"

        android:icon="@android:drawable/ic_search_category_default"/>

    <item  android:id="@+id/menu_setting"

        android:title="Settings"

      android:icon="@android:drawable/ic_menu_preferences"/>                             </menu>


ScaleGestureDetector

译者署名：一昕

翻译时间：2010-12-05

版本:Android 2.3 r1

结构

继承关系

public class ScaleGestureDetector extends Object

java.lang.Object

android.view.ScaleGestureDetector

类概述

根据接收的MotionEvent, 侦测由多个触点（多点触控）引发的变形手势。callback方法ScaleGestureDetector.OnScaleGestureListener 会在特定手势事件发生时通知用户。该类仅能和Touch事件引发的MotionEvent配合使用。使用该类需要

l 为你的View创建ScaleGestureDetector 实例

l 确保在onTouchEvent(MotionEvent)方法中调用 onTouchEvent (MotionEvent). [译者注：前者为该类的onTouchEvent方法，后者为View的onTouchEvent方法。] 在事件发生时，定义在callback中的方法会被调用。

（译者注：ScaleGestureDetector为Android2.2新增的类，允许Views可以通过提供的MotionEvents检测和处理包括多点触摸在内的手势变化信息。）

内部类

interface ScaleGestureDetector.OnScaleGestureListener

手势发生时接收通知的监听器

class ScaleGestureDetector.SimpleOnScaleGestureListener

一个方便使用的类。 若仅想监听一部分尺寸伸缩事件，可继承该类。

公共构造方法

public ScaleGestureDetector (Context context, ScaleGestureDetector.OnScaleGestureListener listener)

构造函数

公共方法

public float getCurrentSpan ()

返回手势过程中，组成该手势的两个触点的当前距离。

返回值

以像素为单位的触点距离。

public long getEventTime ()

返回事件被捕捉时的时间。

返回值

以毫秒为单位的事件时间。

public float getFocusX ()

返回当前手势焦点的X坐标。 如果手势正在进行中，焦点位于组成手势的两个触点之间。 如果手势正在结束，焦点为仍留在屏幕上的触点的位置。若isInProgress（）返回false，该方法的返回值未定义。

返回值

返回焦点的X坐标值，以像素为单位。

public float getFocusY ()

返回当前手势焦点的Y坐标。 如果手势正在进行中，焦点位于组成手势的两个触点之间。 如果手势正在结束，焦点为仍留在屏幕上的触点的位置。若isInProgress（）返回false，该方法的返回值未定义。

返回值

返回焦点的Y坐标值，以像素为单位。

public float getPreviousSpan ()

返回手势过程中，组成该手势的两个触点的前一次距离。

返回值

两点的前一次距离，以像素为单位。

public float getScaleFactor ()

返回从前一个伸缩事件至当前伸缩事件的伸缩比率。该值定义为 (getCurrentSpan() / getPreviousSpan())。

返回值

当前伸缩比率.

public long getTimeDelta ()

返回前一次接收到的伸缩事件距当前伸缩事件的时间差，以毫秒为单位。

返回值

从前一次伸缩事件起始的时间差，以毫秒为单位。

public boolean isInProgress ()

如果手势处于进行过程中，返回true.

返回值

如果手势处于进行过程中，返回true。否则返回false。

补充

文章精选

android touchexample （中文）

Making Sense of Multitouch（android-developers.blogspot.com）


SoundEffectConstants

译者署名：凌云健笔

译者链接：http://www.cnblogs.com/lijian2010/

版本：Android 2.3 r1

结构

继承关系

public class SoundEffectConstants extends Object

java.lang.Object

android.view.SoundEffectConstants

类概述

playSoundEffect(int)所需的播放声效设定常量。

常量

public static final int CLICK

（译者注：单击事件）常量，取值0 (0x00000000)

public static final int NAVIGATION_DOWN

（译者注：View.FOCUS_DOWN）常量，取值4 (0x00000004)

public static final int NAVIGATION_LEFT

（译者注：View.FOCUS_LEFT）常量，取值1 (0x00000001)

public static final int NAVIGATION_RIGHT

（译者注：View.FOCUS_RIGHT）常量，取值3 (0x00000003)

public static final int NAVIGATION_UP

（译者注：View.FOCUS_UP）常量，取值2 (0x00000002)

公共方法

public static int getContantForFocusDirection(int direction)

针对不同声音方向，获得相应的发声常数。

参数

direction 参数取值为以下常量之一：FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_FORWARD , FOCUS_BACKWARD.

返回值

合适的发声常数

补充

文章链接

触感反馈和声音反馈的效果实现


android.view.inputmethod

接口

InputConnection

InputMethod

InputMethod.SessionCallback

InputMethodSession

InputMethodSession.EventCallback

类

BaseInputConnection

CompletionInfo

EditorInfo

ExtractedText

ExtractedTextRequest

InputBinding

InputConnectionWrapper

InputMethodInfo

InputMethodManager


InputConnection

译者署名：六必治

译者链接：http://www.cnblogs.com/zcmky/

版本：Android 2.3 r1

结构

继承关系

public interface InputConnection

android.view.inputmethod.InputConnection

子类及间接子类

间接子类

BaseInputConnection, InputConnectionWrapper

类概述

InputConnection接口是接收输入的应用程序与 InputMethod 间的通讯通道。它可以完成以下功能，如读取光标周围的文本，向文本框提交文本，向应用程序提交原始按键事件。

BaseInputConnection 的子类应实现这一接口。

常量

public static final int GET_EXTRACTED_TEXT_MONITOR

标志，用在 getExtractedText(ExtractedTextRequest, int)中，表示提取的文本变化时你想接收到更新。

常量值: 1 (0x00000001)

public static final int GET_TEXT_WITH_STYLES

标志，用在 getTextAfterCursor(int, int)和 getTextBeforeCursor(int, int)中，表明返回的文本中包含样式。不设置时，你将仅接收原始文本。设置时，你将收到复合的CharSequence，包括文本和样式段。

常量值: 1 (0x00000001)

公共方法

public abstract boolean beginBatchEdit ()

通知编辑器你将开始批量编辑操作。编辑器尽量避免向你发送状态更新，直到调用 endBatchEdit()为止。

public abstract boolean clearMetaKeyStates (int states)

在指定的输入连接中清除指定的元键(meta key)按下状态。

参数

states 清除的状态，可以是KeyEvent.getMetaState()中的一位或多位结果。

返回值

成功返回true，当连接无效时返回flase。

public abstract boolean commitCompletion (CompletionInfo text)

提交用户的选择，选择先前向 InputMethodSession.displayCompletions()提交的选项中的一个。其结果就像用户从实际UI中做出一样。

参数

text 提交的结果。

返回值

成功返回true，当连接无效时返回flase。

public abstract boolean commitText (CharSequence text, int newCursorPosition)

向文本框提交文本并设置新的光标位置。之前设置的正编辑文字将自动删除。

参数

text 提交的文本。

newCursorPosition 文本范围内新的光标位置。如果大于0，从提交文本末尾－1处计起；<= 0，提交文本开始处计起。所以值为1时，光标将定位于你刚刚插入文本之后。注意你不能光标定位于提交文本中，因为编辑器可以修改你提供的文本，所以不必将光标定位在哪。

返回值

成功返回true，当连接无效时返回flase。

public abstract boolean deleteSurroundingText (int leftLength, int rightLength)

删除当前光标前的leftLength个字符，并删除当前光标后的rightLength个字符，不包联想输入(composing)的文字。

参数

leftLength 删除的当前光标之前字符个数。

rightLength 删除的当前光标之后字符个数。

返回值

成功返回true，当连接无效时返回flase。

public abstract boolean endBatchEdit ()

调用endBatchEdit()方法通知编辑器之前开始的批量编辑已完成。

public abstract boolean finishComposingText ()

强制结束文本编辑器，无论联想输入(composing text)是否激活。文本保持不变，移除任何与此文本的编辑样式或其他状态。光标保持不变。

public abstract int getCursorCapsMode (int reqModes)

取得当前光标位置的文本的大小写状态。参见 TextUtils.getCapsMode 取得更多信息。此方法在输入连接(connection)无效（如线程冲突）或客户端等待时间过长（等待几秒返回）时可能会失败。上述情况时返回0。

参数

reqModes 依据 TextUtils.getCapsMode的定义取得期望的状态。通过已定义的常数，你可以轻易地传递 TextBoxAttribute.contentType到当前。

返回值

返回当前有效的大小写状态。

public abstract ExtractedText getExtractedText (ExtractedTextRequest request, int flags)

获取当前输入连接的编辑器中的当前文本，并监视是否有变化。函数返回当前文本，当文本变化时输入连接可选择性向输入法发送更新。

此方法在输入联接无效时（如线程冲突）或客户端等待时间过长（等待几秒返回）时可能会失败。上述情况时返回null值。

参数

request 描述文本如何返回

flags 控制客户端的附加选项，0或 GET_EXTRACTED_TEXT_MONITOR

返回值

返回一个ExtractedText对象描述文本视窗的状态，及所包含的提取文本。

public abstract CharSequence getSelectedText (int flags)

如果有的话取得所选的文本。

此方法在输入连接无效时（如线程冲突）或客户端等待时间过长（等待几秒返回）时可能会失败。上述情况时返回null值。

参数

flags 提供附加选项控制，控制文本如何返回。可为0 或 GET_TEXT_WITH_STYLES

返回值

如果有的话返回当前选取文本，如果没有文本被选中返回null。

public abstract CharSequence getTextAfterCursor (int n, int flags)

取得当前光标位置后的 n 个字符文本。

此方法在输入连接无效时（如线程冲突）或客户端等待时间过长（等待几秒返回）时可能会失败。上述情况时返回null值。

参数

n 期望的文本长度

flags 提供附加选项控制，控制文本如何返回。可为0 或 GET_TEXT_WITH_STYLES

返回值

返回当前光标后的文本，返回的文本长度可能小于 n

public abstract CharSequence getTextBeforeCursor (int n, int flags)

取得当前光标位置前的 n 个字符文本。

本此方法在输入连接无效（如线程冲突）或客户端等待时间过长（等待几秒返回）时可能会失败。上述情况时返回null值。

参数

n 期望的文本长度

flags 提供附加选项控制，控制文本如何返回。可为0 或 GET_TEXT_WITH_STYLES

返回值

返回当前光标前的文本，返回的文本长度可能小于 n

public abstract boolean performContextMenuAction (int id)

在区域中执行调用上下文菜单动作，其id可能下列之一：selectAll, startSelectingText, stopSelectingText, cut, copy, paste, copyUrl, 或 switchInputMethod。

public abstract boolean performEditorAction (int editorAction)

让编辑器执行一个它可以完成的操作。

参数

editorAction 必须是动作常量EditorInfo.editorType中的一个，如EditorInfo.EDITOR_ACTION_GO。

返回值

成功返回true,如输入连接无效返回false。

public abstract boolean performPrivateCommand (String action, Bundle data)

API从输入法向所连接的编辑器发送私有命令。这可用于提供仅用于特定输入法及其客户端功能的特定域（domain-specific）。注意，因为InputConnection协议是异步的，你无法取回结果或知道客户端是否懂得命令；你可能使用 EditorInfo来确定客户端是否支持某一命令。

参数

action 要执行的命令名称。必须是作用域名，前缀你自己的包名，这样不同的开发者就不会建立让人冲突的命令。

data 命令中的数据

返回值

当命令发送后返回true（无论相关的编辑是否理解它），如输入连接无效返回false。

public abstract boolean reportFullscreenMode (boolean enabled)

由IME调用，通知客户端将在全屏与普通模式间切换。它在 InputMethodService的标准实现中被调用。

public abstract boolean sendKeyEvent (KeyEvent event)

向当前输入连接所附着的进程发送按键事件。事件像普通按键事件一样由当前焦点，通常是提供InputConnection的视图。但由于协议的异步性这一点并不总是这样，焦点可能在事件收到时发生改变。

本方法可用于向应用程序发送按键事件。如屏幕键盘可以用这一方法模拟硬件键盘。标准键盘有三种：数字（12键），预测键盘（20键）和字母（QWERTY）。你可以通过事件的设备码（device id）确定键盘类型。

在你向本API发送的所有按键事件中，你可能希望设置 KeyEvent.FLAG_SOFT_KEYBOARD 标志，但这一标志不可设置。

参数

event 按键事件

返回值

成功返回true，当输入连接无效返回false。

参见

KeyEvent

NUMERIC

PREDICTIVE

ALPHA

public abstract boolean setComposingRegion (int start, int end)

将特定区域设为正在编辑文本。以前设置的正在编辑文本自动移除。文本使用默认正在编辑文本样式。(审核注：”composing text”的翻译还需要后期用例子来推测其含义。)

参数

start 正在编辑文本开始的位置

end 正在编辑文本结束的位置。

返回值

成功返回true，当输入联接无效时返回false。

public abstract boolean setComposingText (CharSequence text, int newCursorPosition)

将当前的光标旁正在联想文本(composing text)替代为给定文本，并设置新光标位置。以前设置的正在编辑文本自动移除。（译者注：

InputConnection ic = getCurrentInputConnection();

ic.setComposingText("Composi", 1);

）

参数

text 如必要正在编辑文本有样式。如文本没有附带样式对象，正在编辑文本将应用默认样式。见如何在文本上附加样式{#link android.text.Spanned}。{#link android.text.SpannableString}和{#link android.text.SpannableStringBuilder}是两种界面实现方式。

newCursorPosition 文本范围内新的光标位置。如果大于0，从提交文本末尾－1处计起；<= 0，提交文本开始处计起。所以值为1时，光标将定位于你刚刚插入文本之后。注意你不能光标定位于提交文本中，因为编辑器可以修改你提供的文本，所以不必将光标定位在哪。

返回值

成功返回true，当输入联接无效时返回false。

public abstract boolean setSelection (int start, int end)

设置文本编辑器的选定文本。设置到当前光标时，开始与结束取相同值。

返回值

成功返回true，当输入联接无效时返回false。

补充

文章链接

android sdk中 softkeyboard的自己解析(4)

开源项目

wifikeyboard


InputMethod

译者署名：六必治

译者链接：http://www.cnblogs.com/zcmky/

版本：Android 2.3 r1

结构

继承关系

public interface InputMethod extends Object

android.view.inputmethod.InputMethod

子类及间接子类

间接子类

AbstractInputMethodService.AbstractInputMethodImpl, InputMethodService.InputMethodImpl

类概述

InputMethod接口代表了输入法，它可生成按键事件，生成文本，如数字，email地址，CJK字符，其它语言字符等等。在处理输入事件时，将文本返回至需要文本输入的应用程序。InputMethodManager 可得到更多关于架构的信息。

应用程序通常不使用这个接口本身，而是依靠TextView 和 EditText提供的标准交互。

输入法实现通常为 InputMethodService 及其子类的派生。在实现输入法时，包含它的服务控件必须提供 SERVICE_META_DATA 元数据字段，该元数据字段联接至一包含输入法细节的XML资源。所有输入法也必定要求客户端包含 BIND_INPUT_METHOD 以便与服务控件交互。如果不这样，系统将无法使用输入法，因其无法确认是否完整。

InputMethod接口实际上分为两部分：接口是输入法的最高级接口，提供所有的访问，只有系统能访问（需要BIND_INPUT_METHOD权限）。另外调用方法 createSession(android.view.inputmethod.InputMethod.SessionCallback)可实例化 InputMethodSession 副接口，用于与客户端通讯。

内部类

interface InputMethod.SessionCallback

常量

public static final String SERVICE_INTERFACE

接口名字，实现输入法的服务应说明它支持输入法，也就是它将用于意向过滤器（intent filter）。服务还需要 BIND_INPUT_METHOD 权限，这样应用程序不会滥用它。

常量值: "android.view.InputMethod"

public static final String SERVICE_META_DATA

输入法通过此名字发布其自身信息。此元数据必须引用一个包含< input-method>标签的XML资源。

常量值: "android.view.im"

public static final int SHOW_EXPLICIT

用于 showSoftInput(int, ResultReceiver)的标志：它表示用户显式地要求其（软键盘）显示。如果没有设置，系统决定可能是一个好主意，显示输入法在用户界面上的导航操作。

常量值: 1 (0x00000001)

public static final int SHOW_FORCED

标志用于 showSoftInput(int, ResultReceiver)：表明用户强制其（软键盘）显示。如设置，输入法保持可见直至用户在UI上取消。

常量值: 2 (0x00000002)

公共方法

public abstract void attachToken (IBinder token)

输入法创建后首先被调用，它提供一个与系统服务会话的唯一令牌。它需要通过服务识别输入法从而验证其操作。令牌不能传递给应用程序，因其取得了应用程序不应得到的特殊权限。

注意：为避免恶意客户端伤害，你应只接收第一个令牌。其后可能来自客户端。

public abstract void bindInput (InputBinding binding)

将输入法与新的应用程序环境绑定，以便稍后启动、停止输入处理。通常在应用程序第一次启用输入法时调用此方法。

参数

binding 与输入法绑定的应用程序窗口信息。

参见

InputBinding

unbindInput()

public abstract void createSession (InputMethod.SessionCallback callback)

创建一个新的InputMethodSession，它可处理客户应用程序与输入法的交互。你可以随后用 revokeSession(InputMethodSession)销毁会话，这样就不会有任何客户端使用它。

参数

callback 新创建会话调用的接口。

public abstract void hideSoftInput (int flags, ResultReceiver resultReceiver)

将输入法的软键盘(soft input)部分对用户隐藏。

参数

flags 显示要求的附加信息。当前总是0。

resultReceiver 向要求显示的客户端通知结果。其结果可能为InputMethodManager.RESULT_UNCHANGED_SHOWN, InputMethodManager.RESULT_UNCHANGED_HIDDEN,InputMethodManager.RESULT_SHOWN, 或 InputMethodManager.RESULT_HIDDEN

public abstract void restartInput (InputConnection inputConnection, EditorInfo attribute)

输入法需重置时调用此方法。

通常输入焦点从一个文本框移至另一个时调用此方法。

参数

inputConnection 可选，确定与文本框通讯的输入通讯通道；如为空，你使用通常绑定的输入通讯通道。

attribute 文本框（通常是EditText）需要输入的属性

参见

EditorInfo

public abstract void revokeSession (InputMethodSession session)

关闭并销毁先前由 createSession(android.view.inputmethod.InputMethod.SessionCallback)创建的会话。调用后，会话不再有效，对其的调用将失败。

参数

session 先前由SessionCallback.sessionCreated()提供的InputMethodSession将被吊销。

public abstract void setSessionEnabled (InputMethodSession session, boolean enabled).

控制某特定输入法会话是否激活。

参数

session 先前由SessionCallback.sessionCreated()提供的InputMethodSession将改变。

public abstract void showSoftInput (int flags, ResultReceiver resultReceiver)

将输入法的软键盘(soft input)部分对用户显示。

参数

flags 提供显示要求的附加信息。当前为0或设置SHOW_EXPLICIT 位。

resultReceiver 向要求显示的客户端通知结果。其结果可能为InputMethodManager.RESULT_UNCHANGED_SHOWN, InputMethodManager.RESULT_UNCHANGED_HIDDEN,InputMethodManager.RESULT_SHOWN, 或 InputMethodManager.RESULT_HIDDEN

public abstract void startInput (InputConnection inputConnection, EditorInfo info)

应用程序开始接收文本，输入法准备好为应用程序处理接收事件并返回文本时调用本方法。

参数

inputConnection 可选，确定与文本框通讯的输入通讯通道；如为空，你使用通常绑定的输入通讯通道。

info 需要输入的文本框（通常是EditText）信息。

参见

EditorInfo

public abstract void unbindInput ()

解除与应用程序的绑定，先前由 bindInput(InputBinding)设定的信息对当前输入法无效时调用。

通常在应用程序变为非前台调用。

补充

文章精选

在Android中创建一种新的输入法（Creating an Input Method）

Android input method panel control

通过一个SoftKeyboard例子（可以看看博客里的其他几篇文章）

Android IMF的一处瑕疵

Android IMF输入法总结

为 Android 平台开发一个输入法

Android IMF学习笔记一

Android Framework系列之IMF（一）

Android Framework系列之IMF（二）

Android Framework系列之IMF（三）


InputMethodSession

译者署名：六必治

译者链接：http://www.cnblogs.com/zcmky/

版本：Android 2.3 r1

结构

继承关系

public interface InputMethodSession

android.view.inputmethod. InputMethodSession

子类及间接子类

间接子类

AbstractInputMethodService.AbstractInputMethodSessionImpl,InputMethodService.InputMethodSessionImpl

类概述

InputMethodSession接口提供给每个客户端的 InputMethod 可安全地暴露在应用程序中。

应用程序通常不自己使用本接口，而是依靠 TextView 和 EditText 提供的标准交互。

内部类

interface InputMethodSession.EventCallback

公共方法

public abstract void appPrivateCommand (String action, Bundle data)

执行由应用程序发往输入法的私有命令。它可用于提供专属域功能，仅专属于特定的输入法及其客户端

参数

action 执行命名的名称。它必须是一个域名称，如前缀你自己的包名称，这样不同的开发者就不产生命令冲突。

data 随命令包括的任何数据。

public abstract void dispatchKeyEvent (int seq, KeyEvent event, InputMethodSession.EventCallback callback)

当按键按下时调用此方法。完成事件时，本方法的实现方法必须调用 callback 回调函数并返回结果。

如果输入法处理此事件返回true，否则返回false，调用者（如应用程序）将处理事件。

参数

event 按键事件

返回值

输入法是否处理本事件。

参见

ERROR(/#dispatchKeyUp)

KeyEvent

public abstract void dispatchTrackballEvent (int seq, MotionEvent event, InputMethodSession.EventCallback callback)

发生轨迹球事件时调用此方法。

如果输入法处理此事件返回true，否则返回false，调用者（如应用程序）将处理事件。

参数

event 移动事件

返回值

输入法是否处理本事件。

参见

MotionEvent

public abstract void displayCompletions (CompletionInfo[] completions)

由文本编辑器调用自动补全，完成后通知输入法补全有效。可被用于输入法向用户显示备选文本以备插入。

参数

completions 补充文本数组有效，并以最佳结果开头。如果数组为空，存在的补充将被移除。

public abstract void finishInput ()

当应用程序要停止接收文字输入时调用此方法。

public abstract void toggleSoftInput (int showFlags, int hideFlags)

切换软键盘(soft input)窗口。应用程序能切换软键盘(soft input)窗口

参数

showFlags 提供附加的操作标志。可能为0或设置SHOW_IMPLICIT, SHOW_FORCED位。

hideFlags 提供附加的操作标志。可能为0或设置HIDE_IMPLICIT_ONLY, HIDE_NOT_ALWAYS位。

public abstract void updateCursor (Rect newCursor)

当目标输入域的光标位置在自身窗口内移动时调用此方法。本方法通常不被调用，但输入法要求更新时可被调用。

参数

newCursor 当前输入区域窗口坐标系下光标显示的矩阵区域。

public abstract void updateExtractedText (int token, ExtractedText text)

当内容变化时文本编辑器调用此方法，通知其新提取文本。本方法仅在输入法调用 InputConnection.getExtractedText()并带有通报更新选项时才被调用。

参数

token 输入法提供了分辨要求的令牌。

text 新的提取文本。

public abstract void updateSelection (int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd)

当目标输入域的光标或选定变化时，调用此方法。

参数

oldSelStart 之前的选择开始位置相对于光标的文本偏移。

oldSelEnd 之前的选择结束位置相对于光标的文本偏移。

newSelStart 新的选择初始位置相对于光标的文本偏移。

newSelEnd 新的选择结束位置相对于光标的文本偏移。

candidatesStart 当前坐标系下文本文本开始位置的文本偏移。

candidatesEnd 当前坐标系下文本文本结束位置的文本偏移。

补充

文章链接

android 鍵盤的啟動關閉、顯示、隱藏及其 bug


BaseInputConnection

译者署名：六必治

译者链接：http://www.cnblogs.com/zcmky/

版本：Android 2.3 r1

结构

继承关系

public class BaseInputConnection extends Object implements InputConnection

java.lang.Object

android.view.inputmethod.BaseInputConnection

类概述

InputConnection接口实现的基类，注意大多数行为提供的是Editable联接。本类的实现一定要实现 getEditable()提供对它们自己的可编辑对象的访问。

公共方法

public boolean beginBatchEdit ()

缺省实现什么也不做。

public boolean clearMetaKeyStates (int states)

缺省实现用 MetaKeyKeyListener.clearMetaKeyState(long, int)来清除状态。

参数

states 要清除的状态，每个 KeyEvent.getMetaState()中可能是1或个状态。

返回值

成功返回true，输入连接无效时返回false。

public boolean commitCompletion (CompletionInfo text)

缺省实现什么也不做。

参数

text 提交的完成。

返回值

成功返回true，输入连接无效时返回false。

public boolean commitText (CharSequence text, int newCursorPosition)

缺省实现将用给出的文本替代正在构建的文本。另外在虚拟状态时，将发送包含新文本的按键事件并清空可编辑控件的缓存。

参数

text 提交的文本。

newCursorPosition 文本范围内新光标位置。如> 0，从文本未尾－1起计算；如<= 0，从文本起始处计算。所以是1时总是在刚插入文本之后。注意这意味着你不能将位置定义在文本中，因为编辑器可以修改你提交的文本，所以无必要将光标定位在文本中。

返回值

成功返回true，输入连接无效时返回false。

public boolean deleteSurroundingText (int leftLength, int rightLength)

缺省实现将删除当前光标位置附近的可编辑文本。

参数

leftLength 删除文本在当前光标位置前的字符数

rightLength 删除文本在当前光标位置后的字符数。

返回值

成功返回true，输入连接无效时返回false。。

public boolean endBatchEdit ()

缺省实现什么也不做。

public boolean finishComposingText ()

缺省实现将用给定的文本替代正在构建的文本。另外在虚拟状态时，将发送包含新文本的按键事件并清空可编辑控件的缓存。

public static int getComposingSpanEnd (Spannable text)

public static int getComposingSpanStart (Spannable text)

public int getCursorCapsMode (int reqModes)

缺省实现时，由TextUtils.getCapsMode返回当前可编辑文本的选定文本的光标大小写状态，虚拟状态时总是返回0。

参数

reqModes 依据 TextUtils.getCapsMode的定义取得期望的状态。通过已定义的常数，你可以轻易地传递 TextBoxAttribute.contentType到当前。

返回值

返回当前有效的大小写状态。

public Editable getEditable ()

返回编辑操作的目标。缺省的实现是返回自己的虚拟可编辑控件，子类须重载一个可编辑控件并提供给它自己。

public ExtractedText getExtractedText (ExtractedTextRequest request, int flags)

缺省实现总是返回空。

参数

request 描述如何返回文本。

flags 额外的客户端控制选项，0或 GET_EXTRACTED_TEXT_MONITOR。

返回值

返回ExtractedText对象描述文本视窗的状态并包含提取文本的本身。

public CharSequence getSelectedText (int flags)

缺省实现是返回当前选择文本，没有选取则为空。

参数

flags 额外选项控制文本如何返回，可能为0或 GET_TEXT_WITH_STYLES。

返回值

返回当前选择文本，没有选取则为空。

public CharSequence getTextAfterCursor (int length, int flags)

缺省的实现是返回缓存中当前光标位置后给定数量的文本。

参数

length 期望的文本长度。

flags 如何返回文本的额外控制。可能为0或 GET_TEXT_WITH_STYLES。

返回值

返回光标位置后的文本，返回文本的长度可能小于n。

public CharSequence getTextBeforeCursor (int length, int flags)

缺省的实现是返回缓存中当前光标位置前给定数量的文本。

参数

length 期望的文本长度。

flags 如何返回文本的额外控制。可能为0或 GET_TEXT_WITH_STYLES。

返回值

返回光标位置前的文本，返回文本的长度可能小于n。

public boolean performContextMenuAction (int id)

缺省实现是什么也不做。

public boolean performEditorAction (int actionCode)

缺省实现将其发送至返回键(enter key)。

参数

actionCode 必须是 EditorInfo.editorType 中一常量之一，如 EditorInfo.EDITOR_ACTION_GO。

返回值

成功返回true，输入连接无效时返回false。

public boolean performPrivateCommand (String action, Bundle data)

缺省实现是什么也不做。

参数

action 执行的命令名称。必须是作用域的名称（译者注：带包名，如”com.test.Command”），如以你自己的包名称前缀，这样不同的开发者就不会创建产生冲突的命令。

data 命令中的数据。

返回值

命令发送返回true（无论相关的编辑器是否理解它），如输入连接无效返回false。

public static final void removeComposingSpans (Spannable text)

public boolean reportFullscreenMode (boolean enabled)

以当前的全屏模式更新InputMethodManager。

public boolean sendKeyEvent (KeyEvent event)

提供窗口附属输入连接视窗的发送按键事件的标准实现。

参数

event 按键事件。

返回值

成功返回true，输入连接无效时返回false。

public boolean setComposingRegion (int start, int end)

将特定区域标记为正在构建文本。任何以前设置的正在构建文本自动清除。正在构建文本应用缺省样式。

参数

start 文本中正在构建区域开始位置。

end 文本中正在构建区域结束位置。

返回值

成功返回true，输入连接无效时返回false。

public static void setComposingSpans (Spannable text)

public boolean setComposingText (CharSequence text, int newCursorPosition).

缺省实现是将给定文本置入可编辑文本，替代任何正在构建文本。新文本标记为正在构建文本并应用构建样式。

参数

text 正在构建文本，如必要应用样式。如文本无附属样式，将正在构建文本应用缺省样式。参见how to attach style object to the text。{#link android.text.SpannableString} 和{#link android.text.SpannableStringBuilder}是实现的接口。

newCursorPosition 文本范围内新光标位置。如> 0，从文本未尾－1起计算；如<= 0，从文本起始处计算。所以是1时总是在刚插入文本之后。注意这意味着你不能将位置定义在文本中，因为编辑器可以修改你提交的文本，所以无必要将光标定位在文本中。

返回值

成功返回true，输入连接无效时返回false。

public boolean setSelection (int start, int end)

缺省实现是在当前可编辑文本中改变选取的位置。

返回值

成功返回true，输入连接无效时返回false。

补充

文章链接

Android全屏绘制

全屏手写输入的笔迹获取

手写输入法实现过程中的问题


InputMethodManager

译者署名：六必治

译者链接：http://www.cnblogs.com/zcmky/

版本：Android 3.0 r1

结构

继承关系

public final class InputMethodManager extends Object

java.lang.Object

android.view.inputmethod.InputMethodManager

类概述

整个输入法框架（IMF）结构的核心API，应用程序之间进行调度和当前输入法交互。你可以用 Context.getSystemService()取得这一接口的实例。

架构总述(Architecture Overview)

输入法框架（IMF）共有三个主要部分：

l 输入法管理器，管理各部分的交互。它是一个客户端API，存在于各个应用程序的context中，用来沟通管理所有进程间交互的全局系统服务。

l 输入法(IME) ，实现一个允许用户生成文本的独立交互模块。系统绑定一个当前的输入法。使其创建和生成，决定输入法何时隐藏或者显示它的UI。同一时间只能有一个IME运行。

l 客户应用程序，通过输入法管理器控制输入焦点和IME的状态。一次只能有一个客户端使用IME。

应用程序(Applications)

大多数情况下，使用标准TextView或其子类的应用程序只要做少量工作就可以让软键盘(soft input methods)正常工作。你要注意的是：

l 正确设置你的可编辑文本视图 inputType，这样输入法有足够的上下文帮助用户向其输入文本。

l 当输入法显示时妥善处理隐藏屏幕空间。理想的情况下应用程序应处理窗口变小，如必要你可以利用系统执行平移窗口。你应在活动（activity）中设置 windowSoftInputMode 属性或调整创建窗口的相应值，以便系统决定平移或缩放（它会尝试自动调整但可能出错）。

l 你还可以通过相同的 windowSoftInputMode 控制窗口的首选软键盘状态（打开、关闭等）。

通过API可以与IMF及其IME交互实现更细致的控制，如显示或输入区域，用户选取某输入法等。

当你编写自己的文本编辑器的时候，你要实现 onCreateInputConnection(EditorInfo)以返回你的 InputConnection 的接口实例，用来允许IME和你的文本编辑域来交互。

输入法(Input Methods)

一个输入法（IME）是 Service（服务）的实现，通常继承自 InputMethodService。IME提供核心的 InputMethod 接口，尽管提供 InputMethod 通常是由 InputMethodService 来处理，而IME的实现只需要处理更高层的API。

更多信息参阅 InputMethodService。

安全(Security)

输入法关系到许多安全问题，因其基本不受约束地驱动UI并监视用户输入。Android输入法框架还允许调度第三方IME，所必须小心以限制他们的选择和相互作用。

以下是IMF背后安全架构的要点：

l 只允许系统访问经 BIND_INPUT_METHOD权限许可访问IME的 InputMethod 接口。通过绑定到要求这个权限的服务来强制实现这一点。所以系统可以保证没有不被信任的客户端在它的控制之外访问到当前的输入法。

l IMF中可能有许多客户进程，但在同一时间只有一个是激活的。未激活客户端不能与IMF核心交互通过下述机制实现。

l 输入法客户端只可访问 InputMethodSession 接口。每个客户端创建一个接口实例，只有与激活客户相关联的会话的调用才会被IME处理。这点通过普通IME的 AbstractInputMethodService执行，必须由IME显式的处理，而IME正是 InputMethodSession 的自定义实现。

l 只有激活的 InputConnection 接受操作。IMF通知每个客户进程是否激活，IMF忽略非激活进程对当前输入联接的调用。这确保了当前IME只将事件和文本编辑交付用户可见焦点的UI。

l 一个IME永远不能在屏幕关闭时与 InputConnection 交互。这是通过当屏幕关闭时所有客户端无效，并防止不良IME在用户无法关注其行为时驱动UI。

l 客户应用程序可以要求系统选取一个新的IME，但不能编程式选择之一。这是避免恶意程序在用户导航到其它应用程序时，选择自己的IME并保持运行。也就是说，IME可以编程式的要求系统选择其它IME，因它完全控制了用户输入。

l 用户在可切换至一个新的IME前必须显式的启用它，以确认系统了解它，使其处于可用状态。

常量

public static final int HIDE_IMPLICIT_ONLY

hideSoftInputFromWindow(IBinder, int)中的标志，表示如果用户未显式地显示软键盘窗口，则隐藏窗口。

常量值: 1 (0x00000001)

public static final int HIDE_NOT_ALWAYS

hideSoftInputFromWindow(IBinder, int)中的标志，表示软键盘窗口总是隐藏，除非开始时以 SHOW_FORCED 显示。

常量值: 2 (0x00000002)

public static final int RESULT_HIDDEN

showSoftInput(View, int, ResultReceiver) 和 hideSoftInputFromWindow(IBinder, int, ResultReceiver)中 ResultReceiver 结果代码标志：软键盘窗口从显示切换到隐藏时的状态。

常量值: 3 (0x00000003)

public static final int RESULT_SHOWN

showSoftInput(View, int, ResultReceiver) 和 hideSoftInputFromWindow(IBinder, int, ResultReceiver)中 ResultReceiver 结果代码标志：软键盘窗口从隐藏切换到显示时的状态。

常量值: 2 (0x00000002)

public static final int RESULT_UNCHANGED_HIDDEN

showSoftInput(View, int, ResultReceiver) 和 hideSoftInputFromWindow(IBinder, int, ResultReceiver)中 ResultReceiver 结果代码标志：软键盘窗口不变保持隐藏时的状态。

常量值: 1 (0x00000001)

public static final int RESULT_UNCHANGED_SHOWN

showSoftInput(View, int, ResultReceiver) 和 hideSoftInputFromWindow(IBinder, int, ResultReceiver)中 ResultReceiver 结果代码标志：软键盘窗口不变保持显示时的状态。

常量值: 0 (0x00000000)

public static final int SHOW_FORCED

showSoftInput(View, int)标志，表示用户强制打开输入法（如长按菜单键），一直保持打开直至只有显式关闭。

常量值: 2 (0x00000002)

public static final int SHOW_IMPLICIT

showSoftInput(View, int)标志，表示隐式显示输入窗口，非用户直接要求。窗口可能不显示。

常量值: 1 (0x00000001)

公共方法

public void displayCompletions (View view, CompletionInfo[] completions)

（译者注：输入法自动完成）

public InputMethodSubtype getCurrentInputMethodSubtype ()

（译者注：获取当前输入法类型？）

public List<InputMethodInfo> getEnabledInputMethodList ()

（译者注：获取已启用输入法列表？）

public List<InputMethodSubtype> getEnabledInputMethodSubtypeList (InputMethodInfo imi, boolean allowsImplicitlySelectedSubtypes)

public List<InputMethodInfo> getInputMethodList ()

（译者注：获取输入法列表）

public Map<InputMethodInfo, List<InputMethodSubtype>> getShortcutInputMethodsAndSubtypes ()

public void hideSoftInputFromInputMethod (IBinder token, int flags)

关闭/隐藏输入法软键盘区域，用户不再看到或与其交互。只能由当前激活输入法调用，因需令牌(token)验证。

参数

token 在输入法启动时提供令牌验证，验证后可对其进行操作。

flags 提供额外的操作标志。当前可以为0或 HIDE_IMPLICIT_ONLY, HIDE_NOT_ALWAYS 等位设置。

public boolean hideSoftInputFromWindow (IBinder windowToken, int flags)

hideSoftInputFromWindow(IBinder, int, ResultReceiver)的无返回值版：从窗口上下文中确定当前接收输入的窗口，隐藏其输入法窗口

参数

windowToken 由窗口请求 View.getWindowToken()返回得到的令牌(token)。

flags 提供额外的操作标志。当前可以为0或 HIDE_IMPLICIT_ONLY 位设置。

public boolean hideSoftInputFromWindow (IBinder windowToken, int flags, ResultReceiver resultReceiver)

从窗口上下文中确定当前接收输入的窗口，要求隐藏其软键盘窗口。它可由用户调用并得到结果而不仅仅是显式要求输入法窗口隐藏。

参数

windowToken 由窗口请求 View.getWindowToken()返回得到的令牌(token)。

flags 提供额外的操作标志。当前可以为0或 HIDE_IMPLICIT_ONLY 位设置。

resultReceiver 如不为空，当IME处理请求告诉你完成时调用。你收到的结果码可以是 RESULT_UNCHANGED_SHOWN, RESULT_UNCHANGED_HIDDEN, RESULT_SHOWN, 或 RESULT_HIDDEN 。

public void hideStatusIcon (IBinder imeToken)

（译者注：隐藏状态栏图标？）

public boolean isAcceptingText ()

当前服务视图接受全文编辑返回真。没有输入法联接为false，这时其只能处理原始按键事件。

public boolean isActive (View view)

视图为当前输入的激活视图时返回真。

public boolean isActive ()

输入法中的任意视图激活时返回真。

public boolean isFullscreenMode ()

判断相关输入法是否以全屏模式运行。全屏时，完全覆盖你的UI时，返回真，否则返回假。

public boolean isWatchingCursor (View view)

如当前输入法要看到输入编辑者的光标位置时返回真。

public void restartInput (View view)

如有输入法联接至视图，重启输入以显示新的内容。可在以下情况时调用此方法：视图的文字导致输入法外观变化或有按键输入流，如应用程序调用TextView.setText()时。

参数

view 文字发生变化的视图。

public void sendAppPrivateCommand (View view, String action, Bundle data)

对当前输入法调用 InputMethodSession.appPrivateCommand()。

参数

view 可选的发送命令的视图，如你要发送命令而不考虑视图附加到输入法，此项可以为空。

action 执行的命令名称。必须是作用域的名称，如前缀包名称，这样不同的开发者就不会创建冲突的命令。

data 命令中包含的任何数据。

public boolean setCurrentInputMethodSubtype (InputMethodSubtype subtype)

（译者注：此方法为3.0中新增的方法）

public void setInputMethod (IBinder token, String id)

强制切换到新输入法部件。只能由持有token的应用程序(application)或服务(service) 调用当前激活输入法。

参数

token 在输入法启动时提供令牌验证，验证后可对其进行操作。

id 切换到新输入法的唯一标识。

public void setInputMethodAndSubtype (IBinder token, String id, InputMethodSubtype subtype)

强制切换到一个新的输入法和指定的类型。只能由持有token的应用程序(application)或服务(service) 调用当前激活输入法。（译者注：此方法为3.0中新增的方法）

参数

token 在输入法启动时提供令牌验证，验证后可对其进行操作。

id 切换到新输入法的唯一标识。

subtype 切换到新输入法的新类型。

public void showInputMethodAndSubtypeEnabler (String topId)

（译者注：此方法为3.0中新增的方法）

public void showInputMethodPicker ()

（译者注：显示输入法菜单列表）

public boolean showSoftInput (View view, int flags, ResultReceiver resultReceiver)

如需要，显式要求当前输入法的软键盘区域向用户显示。当用户与视图交互，用户表示要开始执行输入操作时，可以调用此方法。

参数

view 当前焦点视图，可接受软键盘输入。

flags 提供额外的操作标志。当前可以是0或 SHOW_IMPLICIT 位设置。

resultReceiver 如不为空，当IME处理请求告诉你完成时调用。你收到的结果码可以是 RESULT_UNCHANGED_SHOWN, RESULT_UNCHANGED_HIDDEN, RESULT_SHOWN, 或 RESULT_HIDDEN 。

public boolean showSoftInput (View view, int flags)

showSoftInput(View, int, ResultReceiver)的无返回值版：如需要，显式要求当前输入法的软键盘区域向用户显示。

参数

view 当前焦点视图，可接受软键盘输入。

flags 提供额外的操作标志。当前可以是0或 SHOW_IMPLICIT 位设置。

public void showSoftInputFromInputMethod (IBinder token, int flags)

显示输入法的软键盘区域，这样用户可以到看到输入法窗口并能与其交互。只能由当前激活输入法调用，因需令牌(token)验证。

参数

token 在输入法启动时提供令牌验证，验证后可对其进行操作。

flags 提供额外的操作标志。可以是0或 SHOW_IMPLICIT, SHOW_FORCED 位设置。

public void showStatusIcon (IBinder imeToken, String packageName, int iconId)

（译者注：显示状态栏图标？）

public boolean switchToLastInputMethod (IBinder imeToken)

public void toggleSoftInput (int showFlags, int hideFlags)

（译者注：切换软键盘）

public void toggleSoftInputFromWindow (IBinder windowToken, int showFlags, int hideFlags)

本方法切换输入法的窗口显示。如输入窗口已显示，它隐藏。如无输入窗口则显示。

参数

windowToken 由窗口请求 View.getWindowToken()返回得到的令牌(token)。

showFlags 提供额外的操作标志。当前可以为0或 HIDE_IMPLICIT_ONLY 位设置。

hideFlags 提供额外的操作标志。可以是0或 HIDE_IMPLICIT_ONLY, HIDE_NOT_ALWAYS 位设置。

public void updateCursor (View view, int left, int top, int right, int bottom)

返回窗口的当前光标位置。

public void updateExtractedText (View view, int token, ExtractedText text)

（译者注：当内容变化时文本编辑器调用此方法，通知其新提取文本。）

public void updateSelection (View view, int selStart, int selEnd, int candidatesStart, int candidatesEnd)

返回当前选择区域。

补充

文章链接

android 软键盘 InputMethodManager

Android输入法框的梳理

[推荐]android 输入法框架简介

开源拼音输入法社区的大融合（libpinyin）

android中文输入法实现


android.widget

接口

AbsListView.MultiChoiceModeListener

AbsListView.OnScrollListener

AbsListView.RecyclerListener

AbsListView.SelectionBoundsAdjuster

Adapter

AdapterView.OnItemClickListener

AdapterView.OnItemLongClickListener

AdapterView.OnItemSelectedListener

AutoCompleteTextView.Validator

CalendarView.OnDateChangeListener

Checkable

Chronometer.OnChronometerTickListener

CompoundButton.OnCheckedChangeListener

DatePicker.OnDateChangedListener

ExpandableListAdapter

ExpandableListView.OnChildClickListener

ExpandableListView.OnGroupClickListener

ExpandableListView.OnGroupCollapseListener

ExpandableListView.OnGroupExpandListener

Filter.FilterListener

Filterable

FilterQueryProvider

HeterogeneousExpandableList

ListAdapter

MediaController.MediaPlayerControl

MultiAutoCompleteTextView.Tokenizer

NumberPicker.Formatter

NumberPicker.OnScrollListener

NumberPicker.OnValueChangeListener

PopupMenu.OnMenuItemClickListener

PopupWindow.OnDismissListener

RadioGroup.OnCheckedChangeListener

RatingBar.OnRatingBarChangeListener

RemoteViewsService.RemoteViewsFactory

SearchView.OnCloseListener

SearchView.OnQueryTextListener

SearchView.OnSuggestionListener

SectionIndexer

SeekBar.OnSeekBarChangeListener

SimpleAdapter.ViewBinder

SimpleCursorAdapter.CursorToStringConverter

SimpleCursorAdapter.ViewBinder

SimpleCursorTreeAdapter.ViewBinder

SlidingDrawer.OnDrawerCloseListener

SlidingDrawer.OnDrawerOpenListener

SlidingDrawer.OnDrawerScrollListener

SpinnerAdapter

TabHost.OnTabChangeListener

TabHost.TabContentFactory

TextView.OnEditorActionListener

TimePicker.OnTimeChangedListener

ViewSwitcher.ViewFactory

WrapperListAdapter

ZoomButtonsController.OnZoomListener

类

AbsListView

AbsListView.LayoutParams

AbsoluteLayout

AbsoluteLayout.LayoutParams

AbsSeekBar

AbsSpinner

AdapterView<T extends Adapter>

AdapterView.AdapterContextMenuInfo

AdapterViewAnimator

AdapterViewFlipper

AlphabetIndexer

AnalogClock

ArrayAdapter<T>

AutoCompleteTextView

BaseAdapter

BaseExpandableListAdapter

Button

CalendarView

CheckBox

CheckedTextView

Chronometer

CompoundButton

CursorAdapter

CursorTreeAdapter

DatePicker

DialerFilter

DigitalClock

EditText（部分）

ExpandableListView

ExpandableListView.ExpandableListContextMenuInfo

Filter

Filter.FilterResults

FrameLayout

FrameLayout.LayoutParams

Gallery

Gallery.LayoutParams

GridView

GridLayout

HeaderViewListAdapter

HorizontalScrollView

ImageButton

ImageSwitcher

ImageView

LinearLayout

LinearLayout.LayoutParams

ListPopupWindow

ListView

ListView.FixedViewInfo

MediaController

MultiAutoCompleteTextView

MultiAutoCompleteTextView.CommaTokenizer

NumberPicker

OverScroller

PopupMenu

PopupWindow

ProgressBar

QuickContactBadge

RadioButton

RadioGroup

RadioGroup.LayoutParams

RatingBar

RelativeLayout

RelativeLayout.LayoutParams

RemoteViews

RemoteViewsService

ResourceCursorAdapter

ResourceCursorTreeAdapter

Scroller

ScrollView

SearchView

SeekBar

SimpleAdapter

SimpleCursorAdapter

SimpleCursorTreeAdapter

SimpleExpandableListAdapter

SlidingDrawer

Spinner

StackView

TabHost

TabHost.TabSpec

TableLayout

TableLayout.LayoutParams

TableRow

TableRow.LayoutParams

TabWidget

TextSwitcher

TextView（部分）

TextView.SavedState

TimePicker

Toast

ToggleButton

TwoLineListItem

VideoView

ViewAnimator

ViewFlipper

ViewSwitcher

ZoomButton

ZoomButtonsController

ZoomControls

枚举

ImageView.ScaleType

TextView.BufferType

异常

RemoteViews.ActionException


AbsListView

译者署名： cnmahj

译者链接：http://blog.toolib.net/cnmahj

版本：Android 2.3 r1

结构

继承关系

public abstract class AbsListView extends AdapterView <T extends Adapter>

implements TextWatcher ViewTreeObserver.OnGlobalLayoutListener ViewTreeObserver.OnTouchModeChangeListener Filter.FilterListener

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

android.widget.AbsListView

类概述

用于实现条目的虚拟列表的基类. 这里的列表没有空间的定义。 例如，该类的子类可以以网格的形式、走马灯的形式显示，或者作为堆栈等等。

嵌套类

class AbsListView.LayoutParams

AbsListView 扩展了 LayoutParams 以提供空间来保存试图类型。

interface AbsListView.OnScrollListener

为了在列表或网格滚动时执行回调函数而定义的接口。

interface AbsListView.RecyclerListener

RecyclerListener 是用于接收视图被移动到待回收堆中时的消息的监听器.

XML属性

属性名称 | 描述
android:cacheColorHint | 指示该列表总是在固定的单色、不透明的背景下绘制。这允许列表优化其绘制过程
android:drawSelectorOnTop | 如果设为真，选择器将绘制在选中条目的上层。否则绘制在下层。默认为假
android:fastScrollEnabled | 允许使用快速滚动滑块，可以通过拖动该滑块在列表中快速滚动
android:listSelector | 用于在列表中指示当前选中条目的可绘制对象
android:scrollingCache | 当为真时，列表滚动使用绘图缓存。该选项使渲染更快，但占用更多的内存。 默认值为真
android:smoothScrollbar | 为真时，列表会使用更精确的基于条目在屏幕上的可见像素高度的计算方法。 默认该属性为真，如果你的适配器需要绘制可变高的条目，他应该设为假。 当该属性为真时，你在适配器在显示变高条目时，滚动条的把手会在滚动的 过程中改变大小。当设为假时，列表只使用适配器中的条目数和屏幕上的 可见条目来决定滚动条的属性
android:stackFromBottom | 用于 ListView 和 GridView，指示他们的内容栈从底部开始
android:textFilterEnabled | 设为真时，列表会过滤根据用户的要求，过滤结果集。列表的适配器必须实现了 Filterable 接口，才能使其可用
android:transcriptMode | 设置列表的跳转模式。在跳转模式下，当加入新条目时，列表会滚动到底部， 使新条目可见

常量

int TRANSCRIPT_MODE_ALWAYS_SCROLL

无视当前可见条目，总是自动滚动到列表的底部。

int TRANSCRIPT_MODE_DISABLED

禁用跳转模式。

int TRANSCRIPT_MODE_NORMAL

仅当最后的条目在屏幕上可见，并且收到数据集变更消息时列表将自动滚动到底部。

公共方法

public void addTouchables (ArrayList<View> views)

想views添加可触控视图，该可触控视图是该视图的后代（如果该视图可触控， 也可以添加该视图）。

参数

views 现在为止的可触控视图。

public void afterTextChanged (Editable s)

为关联到文本过滤器的文本监视器准备的。什么也不做。

public void beforeTextChanged (CharSequence s, int start, int count, int after)

为关联到文本过滤器的文本监视器准备的。什么也不做。

public boolean checkInputConnectionProxy (View view)

测试是否为了过滤信息，为文本编辑器使用了输入连接代理，该操作允许使用代理。

参数

view 生成InputMethodManager调用的视图。

返回值

允许调用返回true，拒绝返回false。

public void clearTextFilter ()

清楚文本过滤器。

public void draw (Canvas canvas)

在指定的画布上手动绘制视图（及其子视图）. 调用该函数之前，视图必须已经完成整个布局过程。 当实现一个视图时，不需要继承这个方法；而是实现onDraw(Canvas)方法。

参数

canvas 要绘制视图的画布

public AbsListView.LayoutParams generateLayoutParams (AttributeSet attrs)

返回一组基于提供的属性集合的布局参数集合.

参数

attrs 用于生成布局参数的属性集.

返回值

ViewGroup.LayoutParams 或其子类的实例.

public int getCacheColorHint ()

如果该值为非零，表示该视图总是在固定的、单色、不透明的背景上绘制。

返回值

缓存颜色。

public void getFocusedRect (Rect r)

在视图拥有焦点时，用户将焦点移向其他视图，可以使用该方法取得下一个视图的 矩形填充区域。 默认情况，该矩形为视图的 getDrawingRect(Rect)。当然，如果你的视图维护着 内部选中状态，比如游标、选中的行或列，你应该重写该方法，并返回特定的矩形。

参数

r 要填充的矩形，使用视图的坐标系。

public int getListPaddingBottom ()

列表内边距是普通视图内边距和选择器内边距的最大值。

返回值

列表底部的内边距。

参见

getPaddingBottom()

getSelector()

public int getListPaddingLeft ()

列表内边距是普通视图内边距和选择器内边距的最大值。

返回值

列表左侧的内边距。

参见

getPaddingLeft()

getSelector()

public int getListPaddingRight ()

列表内边距是普通视图内边距和选择器内边距的最大值。

返回值

列表右侧的内边距。

参见

getPaddingRight()

getSelector()

public int getListPaddingTop ()

列表内边距是普通视图内边距和选择器内边距的最大值。

返回值

列表顶部的内边距。

参见

getPaddingTop()

getSelector()

public View getSelectedView ()

返回值

当前选中条目对应的视图；无选中条目时返回空。

public Drawable getSelector ()

返回用于在列表中绘制选择器的 可绘制对象。

返回值

用于显示选择器的可绘制对象。

public int getSolidColor ()

如果你的视图总是在单色背景上绘制，并且需要渐变的边时，重载该函数。 返回非零的颜色值，使视图系统可以优化渐进边的绘制。返回非零颜色值时， 阿尔法通道应设为 0xFF。

返回值

该视图的单色背景色；为零表示不是单色。

public CharSequence getTextFilter ()

如果存在，则返回列表的文本过滤器。

返回值

文本的列表过滤器；如果过滤器未启用返回空。

public int getTranscriptMode ()

返回当前跳转模式。

返回值

TRANSCRIPT_MODE_DISABLED、TRANSCRIPT_MODE_NORMAL 或者 TRANSCRIPT_MODE_ALWAYS_SCROLL

public boolean hasTextFilter ()

返回列表视图是否具有文本过滤器。

public void invalidateViews ()

使所有的视图重新构建并重绘。

public boolean isFastScrollEnabled ()

返回当前快速滚动特性的状态。

返回值

如果快速滚动已启用返回真，否则返回假。

参见

setFastScrollEnabled(boolean)

public boolean isScrollingCacheEnabled ()

指示滚动时是否使用子视图的绘图缓存。默认为使用绘图缓存，这会占用更多的内存。

返回值

如果启用了滚动缓存返回真，否则返回假。

参见

setScrollingCacheEnabled(boolean)

setDrawingCacheEnabled(boolean)

public boolean isSmoothScrollbarEnabled ()

返回平滑滚动特性的当前状态。

返回值

如果平滑滚动启用返回真，否则返回假。

参见

setSmoothScrollbarEnabled(boolean)

public boolean isStackFromBottom ()

指示该视图的内容是否为向上插入，或者说栈底在底边。

返回值

如果该视图内容以底边为栈底返回真，否则返回假。

public boolean isTextFilterEnabled ()

指示该视图是否启用了输入过滤。

返回值

如启用了输入过滤则为真，否则为假。

参见

setTextFilterEnabled(boolean)

Filterable

public InputConnection onCreateInputConnection (EditorInfo outAttrs)

返回用于编辑过滤文本的 InputConnection 对象。

参数

outAttrs 链接使用的属性信息。

public void onFilterComplete (int count)

过滤操作结束的通知。

参数

count 过滤结果的数量

public void onGlobalLayout ()

视图树的可视性或全局布局状态发生变化时执行的回调函数。

public boolean onInterceptTouchEvent (MotionEvent ev)

使用此方法可以拦截所有触摸屏动作引发的事件.这意味着你可以监视分派给子项的事件， 并且可以在当前手势的任何一点获得其控制权。

使用此方法需谨慎.因为它与 View.onTouchEvent(MotionEvent) 有相当复杂的交互。使用它需要像该方法实现一样正确的实现该方法.触控事件是按如下顺序接收的：

l 首先该函数收到按下事件

l 按下事件会在视图组的子视图以及本视图的 onTouchEvent()方法中处理. 这意味着若要处理之后的手势（代替父视图来处理该事件），你应该实现 onTouchEvent() 方法并返回真.另外，如果你的onTouchEvent() 方法返回真， onInterceptTouchEvent() 方法将不会收到接下来发生的事件， 整个触控处理必须在 onTouchEvent() 方法中进行.

l 如果该方法返回假，接下来的每个事件（直到最后的抬起事件） 都会首先由该函数来处理，之后传给目标对象的 onTouchEvent() 方法.

l 如果该函数返回真，你不会收到接下来的任何事件： 目标视图会接收到该事件，但其动作被标记为 ACTION_CANCEL，之后的事件都会交由你的 onTouchEvent() 方法来处理，不再出现在该方法中。

参数

ev 沿着层次结构向下分派的动作事件。

返回值

若将动作事件从子视图中截获并通过 onTouchEvent() 将他们分派给当前视图组，则返回真。当前目标将收到 ACTION_CANCEL 事件，并且不再会有其他消息传入该函数。

public boolean onKeyDown (int keyCode, KeyEvent event)

KeyEvent.Callback.onKeyMultiple() 的默认实现. 如果视图可用并可按， 当按下 KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER 时执行视图的按下事件。

参数

keyCode 表示按下的键的、在 KEYCODE_ENTER 中定义的键盘代码。

event KeyEvent 对象，定义了按钮动作。

返回值

如果处理了事件，返回真。如果允许下一个事件接受器处理该事件，可以返回假。

public boolean onKeyUp (int keyCode, KeyEvent event)

KeyEvent.Callback.onKeyMultiple() 的默认实现. 当释放 KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER 时执行视图的单击事件。

参数

keyCode 表示按下的键的、在 KEYCODE_ENTER 中定义的键盘代码。

event KeyEvent 对象，定义了按钮动作。

返回值

如果处理了事件，返回真.如果允许下一个事件接受器处理该事件，可以返回假。

public void onRestoreInstanceState (Parcelable state)

允许视图重新应用之前由 onSaveInstanceState() 保存的内部状态的回调函数。该方法得 state 参数不可能为空。

参数

state 之前由 onSaveInstanceState() 返回的状态信息。

public Parcelable onSaveInstanceState ()

允许视图保存其内部状态的回调函数，以便于之后使用相同状态创建新实例. 该状态应该只包含非持久的或者之后不可重现的信息.例如，你不能保存视图在屏幕上的位置， 因为在创建新视图时，会在视图得层次结构中重新计算它的位置。

这里是一些可以保存的信息的例子：文本框中当前光标的位置（通常不是文字内容本身， 因为文字内容一般保存在内容提供者或其他持久的储存器中），列表视图中的当前选中条目等等。

返回值

返回包含视图当前状态的 Parcelable 对象，当不想保存状态时返回空。默认实现返回空。

public void onTextChanged (CharSequence s, int start, int before, int count)

为关联到文本过滤器的文本监视器准备的。当文本变更时，执行实际的过滤操作， 并维护弹出显示中的当前输入的过滤文本隐藏和显示。

public boolean onTouchEvent (MotionEvent ev)

实现该方法来处理触屏事件。

参数

ev 触屏事件.

返回值

如果事件已经处理返回真；否则返回假。

public void onTouchModeChanged (boolean isInTouchMode)

触摸模式发生改变时调用的回调函数。

参数

isInTouchMode 如果视图结构当前处于触摸模式，参数为真；否则为假。

public void onWindowFocusChanged (boolean hasWindowFocus)

包含该视图的窗体获得或失去焦点时调用该函数。注意，该动作是与视图的焦点 分开的：为了受到键盘事件，你的视图及其窗口都必须拥有焦点。如果有窗口 覆盖在你的窗口上方并得到输入焦点，你的窗口会失去焦点，但是视图的焦点 保持不变。

参数

hasWindowFocus 如果包含该视图的窗口拥有焦点，值为真；否则为假。

public int pointToPosition (int x, int y)

将坐标点转换为列表中的位置。

参数

x 本地坐标系的 X。

y 本地坐标系的 Y。

返回值

包含指定点的条目的位置，如果点不再任何条目上返回 INVALID_POSITION。

public long pointToRowId (int x, int y)

将坐标点转换为列表条目的行ID。

参数

x 本地坐标系的 X。

y 本地坐标系的 Y。

返回值

包含指定点的条目的条目的行ID；如果点不再任何条目上返回 INVALID_ROW_ID。

public void reclaimViews (List<View> views)

将该 AbsListView 中的所有视图（不包含头尾视图）移到提供的列表中。 这些视图包括显示在屏幕上的以及放入 AbsListView 内部视图回收器的视图。

参数

views 用于填充视图的列表。

public void requestLayout ()

当某些变更导致视图的布局失效时调用该方法.该方法按照视图树的顺序调用。

public void setCacheColorHint (int color)

当color的值不为0时，此值表示的颜色将提示使用者，列表正在一片单色不透明的背景上被画出。 当 color 的值非零时，示意该列表使用实心、单色不透明的背景，可以缓存背景色。

参数

color 背景色。

public void setDrawSelectorOnTop (boolean onTop)

控制选择高亮可绘制对象应该在条目的前面绘制还是在后面绘制。

参数

onTop 如果为真，选择器的高亮在条目上面显示。默认值为假。

相关 XML 属性

android:drawSelectorOnTop

public void setFastScrollEnabled (boolean enabled)

允许使用快速滚动手柄，可以通过拖动该手柄在列表中快速滚动。 若要显示字母预览并在其间跳转，与列表关联的适配器应该实现 SectionIndexer 接口。

参数

enabled 是否允许快速滚动。

参见

SectionIndexer

isFastScrollEnabled()

public void setFilterText (String filterText)

为文本过滤器设置初始值。

参数

filterText 过滤器使用的文本。

参见

setTextFilterEnabled(boolean)

public void setOnScrollListener (AbsListView.OnScrollListener l)

设置每次列表滚动时收到消息的监听器。

参数

l 滚动监听器。

public void setOverScrollMode (int mode)

为视图设置过滚动模式。有效的过滚动模式有 OVER_SCROLL_ALWAYS（默认值）、 OVER_SCROLL_IF_CONTENT_SCROLLS（视图内容大于容器时允许过滚动）、 和 OVER_SCROLL_NEVER. 只有当视图可以滚动时，才可以设置视图的过滚动模式.

参数

mode 视图的新的过滚动模式

public void setRecyclerListener (AbsListView.RecyclerListener listener)

设置当视图被放入回收器等待被重用时得到通知的回收监听器。 该监听器用于释放关联到视图的资源。

参数

listener 视图被放入回收器时收到通知的回收监听器。

参见

AbsListView.RecycleBin

AbsListView.RecyclerListener

public void setScrollIndicators (View up, View down)

(译者注：用途参见这里：how to define scrollbar's thumb Drawables from java code?)

public void setScrollingCacheEnabled (boolean enabled)

启用或停止在滚动时使用子视图的绘图缓存。默认为使用绘图缓存，这会占用更多的内存。 当启用滚动缓存时，首次滚动后会保留缓存。你可以通过调用 setChildrenDrawingCacheEnabled(boolean) 手动清除缓存。

参数

enabled 启用滚动缓存时为真，否则为假。

参见

isScrollingCacheEnabled()

setDrawingCacheEnabled(boolean)

public void setSelector (Drawable sel)

设置用于将当前选择条目设置为高亮的可绘制对象。

public void setSelector (int resID)

设置用于将当前选择条目设置为高亮的可绘制对象。

参数

resID 作为选择高亮的可绘制对象资源。

相关 XML 属性

android:listSelector

public void setSmoothScrollbarEnabled (boolean enabled)

当平滑滚动启用时，滚动条把手的位置和大小基于可见条目的可见像素数来计算。 该处里假定所有列表条目具有相同的高度。如果你使用条目高度不同的类表， 滚动条会在用户滚动过程中改变大小。为了避免这种情况，应该禁用该特性。 当平滑滚动被禁用后，滚动条把手的大小和位置只是基于适配器中的条目数， 以及适配器中的可见条目来确定。这样可以为使用可变高条目列表的用户， 提供稳定的滚动条。

参数

enabled 是否启用平滑滚动。

相关 XML 属性

android:smoothScrollbar

参见

setSmoothScrollbarEnabled(boolean)

public void setStackFromBottom (boolean stackFromBottom)

当栈从底部开始设置为真时，列表从底部开始向上填充视图。

参数

stackFromBottom 为真时，视图内容固定于底部；为假时，固定在顶部。

public void setTextFilterEnabled (boolean textFilterEnabled)

启用或禁用输入过滤窗口。如启用，在视图具有焦点时，将会过滤子对象，以匹配用户输入。 注意，视图使用的适配器必须实现了Filterable接口。

参数

textFilterEnabled 为真表示启用输入过滤，反之则为假。

参见

Filterable

public void setTranscriptMode (int mode)

将列表或网格设置为跳转模式。该模式下，列表或网格总是滚动到底部，以显示新条目。

参数

mode 设置的跳转模式。

参见

TRANSCRIPT_MODE_DISABLED

TRANSCRIPT_MODE_NORMAL

TRANSCRIPT_MODE_ALWAYS_SCROLL

public boolean showContextMenuForChild (View originalView)

为指定的视图或者其父类显示上下文菜单。

大部分情况下，子类不需要重写该方法。但是，如果直接将子类添加到窗口管理器（例如：使用 addView(View, android.view.ViewGroup.LayoutParams) 函数），此时就需要重写来显示上下文菜单。

参数

originalView 首先显示的上下文菜单的原始视图.

返回值

如果显示了上下文菜单返回真。

public void smoothScrollBy (int distance, int duration)

平滑滚动 distance 个像素，持续 duration 毫秒。

参数

distance 滚动的距离，像素数。

duration 滚动动画持续的时间，毫秒。

public void smoothScrollToPosition (int position, int boundPosition)

平滑滚动到指定的适配器位置。视图会滚动到指定位置显示出来，如果滚动会使 boundPosition 滚动到视图外，滚动会先被停止。

参数

position 要滚动到的适配器位置。

boundPosition 如果要将这个适配器位置移出视图，滚动会停止。

public void smoothScrollToPosition (int position)

平滑滚动到指定的适配器位置。视图会滚动到指定位置显示出来。

参数

position 要滚动到的适配器位置。

public boolean verifyDrawable (Drawable dr)

如果你的视图子类显示自己的可绘制对象，他应该重写此方法并为自己的每个可绘制对象返回真。该函数允许为这些可绘制对象准备动画效果。

重写此方法时，要保证调用其父类的该方法。

参数

dr 待校验的可绘制对象。如果是你显示的对象之一，返回真；否则返回调用父类的返回值。

返回值

boolean 如果可绘制对象已经显示在视图上了，返回真；否则返回假，不允许动画效果。

受保护方法

protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

（译者注：检测是不是AbsoluteLayout.LayoutParams的实例）

protected int computeVerticalScrollExtent ()

计算滚动条把手在纵向滚动范围内占用的幅度。该值用于计算滚动条把手在滚动条滑道中的长度。

范围使用与 computeVerticalScrollRange() 和 computeVerticalScrollOffset() 相同的任意单位。

默认的长度是视图的可绘制高度。

返回值

滚动条把手在纵向滚动范围内占用的幅度。

protected int computeVerticalScrollOffset ()

计算滚动条把手在纵向滚动范围内的位置。该值用于计算滚动条把手在滚动条滑道中的位置。

范围使用与 computeVerticalScrollRange() 和 computeVerticalScrollExtent() 相同的任意单位。

默认位置是视图的滚动条位置。

返回值

滚动条把手的纵向位置

protected int computeVerticalScrollRange ()

计算滚动条代表的纵向范围。

范围使用与 computeVerticalScrollExtent() 和 computeVerticalScrollOffset() 相同的任意单位。

返回值

纵向滚动条代表的整个纵向范围。

默认纵向范围时视图的绘制高度。

protected void dispatchDraw (Canvas canvas)

调用此方法来绘出子视图。可被衍生类重写，以便在其子项被画出之前取得控制权。此方法由 draw 方法在绘制子视图时调用。子类可以重写该方法，在绘制其子视图之前获得控制权。（但是在绘制其自身的视图之后。）

参数

canvas 绘制视图的画布。

protected void dispatchSetPressed (boolean pressed)

为视图的所有子视图调用 setPressed 方法。

参数

pressed 新的按下状态。

protected void drawableStateChanged ()

在视图状态的变化影响到所显示可绘制对象的状态时调用该方法。

覆盖该方法时，要确保调用了父类的该方法。

protected ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)

基于提供的布局参数返回一组安全的布局参数集合。当传入 ViewGroup 的视图的参数没有通过 checkLayoutParams(android.view.ViewGroup.LayoutParams) 的检测时，调用该方法。该方法会返回适合 ViewGroup 的新的布局参数，可能从指定的布局参数中复制适当的属性。

参数

p 要转换为适合于 ViewGroup 的布局参数的集合.

返回值

ViewGroup.LayoutParams 或其子类的实例。

protected float getBottomFadingEdgeStrength ()

返回底部渐变边缘的强度或密集度。强度的值介于0.0（无渐变）到1.0（全渐变）之间。缺省实现只返回0.0或1.0，而不返回中间值。子类应该重载此方法来给滚动时提供更平滑的渐变过程。

返回值

底部渐变的强度，即介于0.0f和1.0f之间的浮点值。

protected ContextMenu.ContextMenuInfo getContextMenuInfo ()

如果视图要向上下文菜单加入额外信息，就应该实现该方法。返回的结果作为 onCreateContextMenu(ContextMenu, View, ContextMenuInfo) 回调函数的参数。

返回值

上下文菜单要显示的条目的额外信息.该信息会根据视图子类的不同而变化。

protected float getTopFadingEdgeStrength ()

返回顶部渐变边缘的强度或密集度。强度的值介于0.0（无渐变）到1.0（全渐变）之间. 缺省实现只返回0.0或1.0，而不返回中间值。子类应该重载此方法来给滚动时提供更平滑的渐变过程。

返回值

顶部渐变的强度，即介于0.0f和1.0f之间的浮点值。

protected void handleDataChanged ()

protected boolean isInFilterMode ()

指示视图是否处于过滤状态。过滤状态在用户在键盘上输入信息时启动。

返回值

如果视图处于过滤状态，返回真；否则返回假。

protected void layoutChildren ()

子类必须重写此方法，以为其子视图布局。

protected void onAttachedToWindow ()

当视图附加到窗体上时调用该方法。在这个时点，视图拥有了用于显示的表面，将开始绘制。注意，系统保证在调用onDraw(Canvas) 之前调用该方法，但可能在调用 onDraw(Canvas) 之前的任何时刻，包括调用 onMeasure(int, int) 之前或之后。

protected int[] onCreateDrawableState (int extraSpace)

为当前视图生成新的 Drawable 状态时发生。当视图系统检测到缓存的可绘制对象失效时，调用该方法。你可以使用 getDrawableState() 方法重新取得当前的状态。

参数

extraSpace 如果为非零，该值为你要在返回值的数组中存放的你自己的状态信息的数量。

返回值

返回保存了视图的当前 Drawable 状态的数组。

protected void onDetachedFromWindow ()

将视图从屏幕上分离的时候调用该方法。这个时点视图已经不具有可绘制部分。

protected void onDisplayHint (int hint)

得到视图是否处于显示状态的提示信息。例如，当视图移出屏幕时，他收到视图没有显示的提示 信息。应用程序不应该依靠该回调函数，不保证一定会收到该提示。

参数

hint 关于视图是否处于显示状态：VISIBLE 或 INVISIBLE。

protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect)

当视图的焦点改变时调用。由定向导航导致的焦点变更时， direction 和 previouslyFocusedRect 提供了焦点是从那里来的进一步信息。

参数

gainFocus 如果视图具有焦点，值为真；否则为假。

direction 当调用 requestFocus() 为该视图设置焦点时，该值为焦点移动的方向。其值为 FOCUS_UP、FOCUS_DOWN、 FOCUS_LEFT 或者 FOCUS_RIGHT。当使用无参数的 requestFocus() 时，可能无值。

previouslyFocusedRect 失去焦点的视图的矩形坐标，使用该视图的坐标系统.如果指定了， 它将传入可以知道焦点来自哪里的详细信息（作为对 direction 的补充）。否则，其值为 null。

protected void onLayout (boolean changed, int l, int t, int r, int b)

子类不要重载此方法，如需要请重载 layoutChildren() 来代替。

参数

changed 是否为视图设置了新的大小和位置。

l 相对于父视图的左侧的位置。

t 相对于父视图的顶部的位置。

r 相对于父视图的右侧的位置。

b 相对于父视图的底部的位置。

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

评估视图及其内容，以决定其宽度和高度.此方法由 measure(int, int) 调用，子类可以重载以提供更精确、更有效率的衡量其内容尺寸的方法。

约定： 覆盖该方法时，必须调用 setMeasuredDimension(int, int) 方法来保存评估结果的视图的宽度和高度.如果忘记将导致 measure(int, int) 方法抛出IllegalStateException异常.要有效的利用父类的 onMeasure(int, int)方法。

基类测量的是背景的大小，除非 MeasureSpec 允许超过背景.子类应该重写 onMeasure(int, int) 方法，以为其内容提供更适合的大小。

如果重写了该方法，子类要确保其高度和宽度大于等于视图的最小高度和宽度. （getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()）

参数

widthMeasureSpec 父视图要求的横向空间大小.该要求由 View.MeasureSpec 进行了编码处理。

heightMeasureSpec 父视图要求的纵向空间大小.该要求由 View.MeasureSpec 进行了编码处理。

protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)

由 overScrollBy(int, int, int, int, int, int, int, int, boolean) 调用，用于响应过滚动操作。

参数

scrollX 新的 X 轴滚动位置，以像素为单位。

scrollY 新的 Y 轴滚动位置，以像素为单位。

clampedX 当 scrollX 被限制在过滚动边界时，为真。

clampedY 当 scrollY 被限制在过滚动边界时，为真。

protected void onSizeChanged (int w, int h, int oldw, int oldh)

布局时该视图的大小发生改变时调用该方法.如果是刚加入的视图，变更前的值为 0。

参数

w 视图的当前宽度。

h 视图的当前高度。

oldw 视图变更前的宽度。

oldh 视图变更前的高度。

补充

文章精选

android UI 优化之 AbsListView之深度优化


AbsListView.LayoutParams

译者署名： cnmahj

译者链接：http://blog.toolib.net/cnmahj

版本：Android 2.3 r1

结构

继承关系

public static class AbsListView.LayoutParams extends ViewGroup.LayoutParams

java.lang.Object

android.view.ViewGroup.LayoutParams

android.widget.AbsListView.LayoutParams

概述

AbsListView 扩展了 LayoutParams 以提供空间来保存试图类型。


AbsListView.OnScrollListener

译者署名： cnmahj

译者链接：http://blog.toolib.net/cnmahj

版本：Android 2.3 r1

结构

继承关系

public static class AbsListView.OnScrollListener

android.widget.AbsListView.OnScrollListener

概述

为了在列表或网格滚动时执行回调函数而定义的接口。

常量

public static final int SCROLL_STATE_FLING

用户之前通过触控滚动并执行了快速滚动。滚动动画正滑向停止点。

常量值： 2 (0x00000002)

public static final int SCROLL_STATE_IDLE

视图没有滚动。注意，使用轨迹球滚动时，在滚动停止之前，一直处于空闲状态。

常量值： 0 (0x00000000)

public static final int SCROLL_STATE_TOUCH_SCROLL

用户通过触控滚动，并且手指没有离开屏幕。

常量值： 1 (0x00000001)

公共方法

public abstract void onScroll (AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)

当列表或网格的滚动已经完成时调用的回调函数。会在滚动完成后调用。

参数

view 报告滚动状态的对象视图。

firstVisibleItem 第一个可见单元格的索引（如果 visibleItemCount == 0 则忽略该参数）。

visibleItemCount 可见单元格数。

totalItemCount 列表适配器中的条目数。

public abstract void onScrollStateChanged (AbsListView view, int scrollState)

当列表视图或网格视图正在滚动是执行的回调函数。如果视图正在滚动， 该方法会在渲染下一帧之前调用该方法。就是说，会在调用任何 getView(int, View, ViewGroup)方法之前调用。

参数

view 报告滚动状态的对象视图。

scrollState 当前滚动状态。值为 SCROLL_STATE_IDLE、 SCROLL_STATE_TOUCH_SCROLL或SCROLL_STATE_IDLE。


AbsListView.RecyclerListener

译者署名： cnmahj

译者链接：http://blog.toolib.net/cnmahj

版本：Android 2.3 r1

结构

继承关系

public static interface AbsListView.RecyclerListener

android.widget.AbsListView.RecyclerListener

概述

RecyclerListener 是用于接收视图被移动到待回收堆中时的消息的监听器。该监听器用于释放分配到被放入回收站的视图的资源。

公共方法

public abstract void onMovedToScrapHeap (View view)

指示指定的视图被移动到待回收堆中。视图不再显示在屏幕上，关联到该视图的贵重的资源应该被释放。


AbsoluteLayout

译者署名：madgoat

译者链接：http://madgoat.cn/

版本：Android 2.2 r1

public class AbsoluteLayout extends ViewGroup

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AbsoluteLayout

直接子类

WebView

此类不赞成使用。

推荐使用 FrameLayout，RelativeLayout 或者定制的layout代替。

概述

让你指定子元素的xy精确坐标的布局。绝对布局缺乏灵活性，在没有绝对定位的情况下相比其他类型的布局更难维护。

公共方法

public ViewGroup.LayoutParams generateLayoutParams (AttributeSet attrs)

返回一组新的基于所支持的属性集的布局参数

参数

attrs 构建layout布局参数的属性集合

返回值

一个ViewGroup.LayoutParams的实例或者它的一个子类

受保护方法

protected ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)

返回一组合法的受支持的布局参数。当一个ViewGroup传递一个布局参数没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)检测的视图时，此方法被调用。此方法会返回一组新的适合当前ViewGroup的布局参数，可能从指定的一组布局参数中复制适当的属性。

参数

p 被转换成一组适合当前 ViewGroup的布局参数

返回值

an instance of ViewGroup.LayoutParams or one of its descendants

一个ViewGroup.LayoutParams的实例或者其中的一个子节点

protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

（译者注：检测是不是AbsoluteLayout.LayoutParams的实例，见源码：

protected ViewGroup.LayoutParams generateDefaultLayoutParams ()

返回一组宽度为WRAP_CONTENT,高度为WRAP_CONTENT,坐标是（0，0）的布局参数

返回值

一组默认的布局参数或null值

protected void onLayout (boolean changed, int l, int t, int r, int b)

在此视图view给他的每一个子元素分配大小和位置时调用。 派生类可以重写此方法并且重新安排他们子类的布局。

参数

changed 这是当前视图view的一个新的大小或位置

l 相对于父节点的左边位置

t 相对于父节点的顶点位置

r 相对于父节点的右边位置

b 相对于父节点的底部位置

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

测量视图以确定其内容宽度和高度。此方法被measure(int, int)调用。需要被子类重写以提供对其内容准确高效的测量。

约定：当重写此方法时，你必须调用setMeasuredDimension(int, int)来保存当前视图view的宽度和高度。不成功调用此方法将会导致一个IllegalStateException异常，是由measure(int, int)抛出。所以调用父类的onMeasure(int, int)方法是必须的。

父类的实现是以背景大小为默认大小，除非MeasureSpec（测量细则）允许更大的背景。子类可以重写onMeasure(int,int)以对其内容提供更佳的尺寸。

如果此方法被重写，那么子类的责任是确认测量高度和测量宽度要大于视图view的最小宽度和最小高度（getSuggestedMinimumHeight() and getSuggestedMinimumWidth()），使用这两个方法可以取得最小宽度和最小高度。

参数

widthMeasureSpec 强加于父节点的横向空间要求。要求是使用View.MeasureSpec进行编码

heightMeasureSpec 强加于父节点的纵向空间要求。要求是使用View.MeasureSpec进行编码。

补充

文件链接

Android的几种布局方式

第六讲：用户界面 View（二）

如何动态改变 AbsoluteLayout布局中其它布局的坐标

示例代码

<AbsoluteLayout

android:id="@+id/AbsoluteLayout01" android:layout_height="wrap_content"

android:layout_width="fill_parent" >

<TextView

android:text="TextView01" android:id="@+id/TextView01"

android:layout_height="wrap_content" android:layout_y="10px"

android:layout_width="wrap_content" android:layout_x="110px">

</TextView>

</AbsoluteLayout>


AbsoluteLayout.LayoutParams

译者署名：绵白糖

版本：Android 2.2 r1

public static class AbsoluteLayout.LayoutParams extends ViewGroup.LayoutParams

java.lang.Object

android.view.ViewGroup.LayoutParams

android.widget.AbsoluteLayout.LayoutParams

类概述

每个子元素布局信息与绝对布局相关联。参见绝对布局属性中该类所支持的子视图属性列表。（译者注: AbsoluteLayout 的这种“绝对”定位的布局方式和我们非常熟悉的 Windows 编程中的 Left 和Top设置UI元素的位置是基本一致的。）

字段

public int x

在View Group内部子元素中的X水平位置。

public int y

在View Group内部子元素中的Y垂直位置。

构造函数

public AbsoluteLayout.LayoutParams(int width, int height, int x, int y)

创建一个新的具有指定宽度、高度和位置的布局参数。

参数：

width MATCH_PARENT, WRAP_CONTENT或者固定大小的像素

height MATCH_PARENT, WRAP_CONTENT或者固定大小的像素

x 子元素的X位置

y 子元素的Y位置

public AbsoluteLayout.LayoutParams(Context c, AttributeSet attrs)

创建一组新的布局参数，通过上下文提取的相关属性值设置。XML属性映射到这个布局参数设置如下：

· layout_x: 子元素的X位置

· layout_y: 子元素的Y位置

· 所有来自ViewGroup.LayoutParams的XML属性

参数：

c 上下文环境.

attrs 从属性设置中提取布局参数值。

public AbsoluteLayout.LayoutParams(ViewGroup.LayoutParams source)

（译者注：根据ViewGroup.LayoutParams实例化布局参数，从源码可以看出：

公共方法

public String debug (String output)

返回设置的布局参数的字符串表示形式。

参数

output 用于内部表示的预置字符串

返回值

返回如下格式字符串：输出 + "ViewGroup.LayoutParams={ width=WIDTH, height=HEIGHT }"


AbsSeekBar

译者署名：madgoat

译者链接：http://madgoat.cn/

版本：Android 2.2 r1

public abstract class AbsSeekBar extends ProgressBar

java.lang.Object

android.view.View

android.widget.ProgressBar

android.widget.AbsSeekBar

概述

此类为抽象类。供拖动条SeekBar和评分条RatingBar继承。

公共方法

public int getKeyProgressIncrement ()

返回方向键改变后的进度值

默认情况下此值是根据最大值而得出的。

返回值

当用户按下方向键后减少或增加之后的进度值。这个进度值是正数。

public int getThumbOffset ()

参见

setThumbOffset(int)

public boolean onKeyDown (int keyCode, KeyEvent event)

默认实现KeyEvent.Callback.onKeyMultiple():如果视图已启用并且可点击，当KEYCODE_DPAD_CENTER或者KEYCODE_ENTER被释放时，执行按下（Down）此视图的操作。

参数

keyCode KeyEvent中用于表示按键被按下的识别码

event 按键操作中定义的KeyEvent对象

返回值

假如你已经处理了当前事件，返回true。假如你想继续让下一个事件接收者（receiver）处理，则返回false；

public boolean onTouchEvent (MotionEvent event)

实现这个方法来处理触摸屏幕引发的事件。

参数

event 动作事件

返回值

如果事件已经处理返回True，否则返回false。

public void setKeyProgressIncrement (int increment)

设置使用方向键更改进度时每次的增加值（注：设置此值后，使用按键修改进度值时，每次增加或减少increment大小的幅度）

参数

increment The amount to increment or decrement when the user presses the arrow keys.

increment 当用户按下指示键时增加或减少的值

public synchronized void setMax (int max)

设置进度条的范围，从0到max

参数

max 进度条的最大值

public void setThumb (Drawable thumb)

设置可绘制对象thumb为SeekBar中显示的进度表的结束位置的图案（注：例如下图）

如果thumb是一个有效的可绘制对象（例如不是null值），那么需要设置thumb的偏移量为他的一半宽度（参见setThumbOffset(int)）

参数

thumb 可绘制对象

public void setThumbOffset (int thumbOffset)

设置thumb的偏移量允许thumb扩展超出轨道的范围

参数

thumbOffset 以像素为单位的偏移量

（注：例如下图，两图同样取SeekBar的最大值）

默认Offset为thumb的一半时：

setThumbOffset(0)时：

受保护方法

protected boolean verifyDrawable (Drawable who)

如果你的视图子类显示他自己的可视化对象，他将要重写此方法并且为了显示可绘制返回true。此操作允许进行绘制时有动画效果。

确认当重写从方法时，需调用父类相应方法。（注：即记得调用super.verifyDrawable(who)）

参数

who 需判断的可绘制对象（Drawable）。如果是你要显示的对象，返回True，否则返回调用父类的结果。

返回值

如果可绘制对象（Drawable）已经在视图中显示，返回True否则返回false。并且此处不允许使用动画。


AbsSpinner

译者署名：思考的狼

译者链接：http://blog.163.com/sikaodelang@126/

版本：Android 2.2 r1

public abstract class AbsSpinner extends AdapterView<T extends Adapter>

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

android.widget.AbsSpinner

直接子类

Gallery, Spinner

概述

下拉列表的基类。 Sdk可能不再使用到该类（译者注：我认为是过时了）

XML属性

属性名称 | 描述
android:entries | 引用一个数据源填充Spinner。对于静态内容，这是一种比编程填充Spinner更简单的方式 。

公共方法

public SpinnerAdapter getAdapter ()

返回与当前部件相关联的适配器

返回值

该适配器用于提供视图内容

public int getCount ()

返回值

与此相关的适配器AdapterView所拥有的项目数量。（这个数据项，可能比显示的视图数据量还大。）

public View getSelectedView ()

返回值

这个视图对应当前选择的项，或者如果不选择视图则为null

public void onRestoreInstanceState (Parcelable state)

允许视图重新应用以前通过onSaveInstanceState()生成代表内部的状态。这个函数决不能以一个空值状态被调用。

参数

state返回以前调用onSaveInstanceState()保存下来的状态。

public Parcelable onSaveInstanceState ()

允许视图生成一个代表内部的状态，以后可用于创建一个与之相同的新的实例。这个状态只可包含那些暂时的或不能被重建的信息。例如，你无法将你目前的位置保存在屏幕上，因为当有一个新的对象出现在这个视图层次上就会自动重新计算。

以下有些实例：当光标停留在一个文本视区上（但是通常来说不能是实文档，因为那个是己储存在内容提供者或者其它长久储存器中），当前所选的项位于一个列表视图中

返回值

返回一个Parcelable对象包含了当前视图动态状态，或者返回null如果没有保存，默认返回值为null。

public int pointToPosition (int x, int y)

映射到列表中的一个坐标（译者注：根据这个坐标可以确定点击的是哪一个item，看这里）

参数

x 局部坐标X（译者注：列表范围内的坐标X）

y 局部坐标Y（译者注：列表范围内的坐标Y）

返回值

返回这个位置包含的指定点（译者注：返回坐标(item)在列表中的顺序），如果这2个点不相交返回INVALID_POSITION

public void requestLayout ()

重写以防止布局视图时出现大量布局要求。（译者注：这个方法通常在视图认为它自己不再合适它当前的边界的情况下被调用）

public void setAdapter (SpinnerAdapter adapter)

该适配器用于提供数据支持这个Spinner。他还提供了改变基于他们选择的相对位置 的选定项

参数

adapter 该SpinnerAdapter用于下拉列表

public void setSelection (int position, boolean animate)

直接跳到数据适配器中指定项

public void setSelection (int position)

设置当前选中项，为了支持可访问的子类重写此方法，必须首先调用父类的方法。

参数

position 索引，被选中的数据项(从0开始)

受保护方法

protected ViewGroup.LayoutParams generateDefaultLayoutParams ()

返回默认设置的布局参数。这些参数是在请求传递给addView(View)还没有布局的时候已经设置好了的。如果是返回null，则从addView抛出一个异常

返回值

参数的默认布局或null


AdapterView

译者署名：cnmahj

译者链接：http://android.toolib.net/blog

版本：Android 2.3 r1

结构

继承关系

public abstract class AdapterView<T extends Adapter> extends ViewGroup

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

子类及间接子类

直接子类

AbsListView, AbsSpinner

间接子类

ExpandableListView, Gallery, GridView, ListView, Spinner

类概述

AdapterView 是内容由 Adapter 来决定的视图类。

参见 ListView、GridView、Spinner 和 Gallery 等常见子类。

常量

public static final int INVALID_POSITION

代表无效的位置。有效值的范围是 0 到当前适配器项目数减 1 。

常量值： -1 (0xffffffff)

public static final long INVALID_ROW_ID

代表空或者无效的行ID。

常量值： -9223372036854775808 (0x8000000000000000)

public static final int ITEM_VIEW_TYPE_HEADER_OR_FOOTER

当条项是列表头或列表尾时，调用 getItemViewType(int) 函数的返回值。

常量值： -2 (0xfffffffe)

public static final int ITEM_VIEW_TYPE_IGNORE

当适配器禁止条项的视图再利用时，调用 getItemViewType(int) 函数的返回值。

常量值： -1 (0xffffffff)

公有构造函数

public AdapterView (Context context)

构造函数

public AdapterView (Context context, AttributeSet attrs)

构造函数

public AdapterView (Context context, AttributeSet attrs, int defStyle)

构造函数

公有方法

public void addView (View child)

该类不支持该方法，如果调用将抛出 UnsupportedOperationException 异常。

参数

child忽略

抛出

UnsupportedOperationException 调用该方法时

public void addView (View child, int index)

该类不支持该方法，如果调用将抛出 UnsupportedOperationException 异常。

参数

child 忽略。

index 忽略。

抛出

UnsupportedOperationException 调用该方法时

public void addView (View child, int index, ViewGroup.LayoutParams params)

该类不支持该方法，如果调用将抛出 UnsupportedOperationException 异常。

参数

child 忽略。

index 忽略。

params 忽略。

抛出

UnsupportedOperationException 调用该方法时

public void addView (View child, ViewGroup.LayoutParams params)

该类不支持该方法，如果调用将抛出 UnsupportedOperationException 异常。

参数

child 忽略。

params 忽略。

抛出

UnsupportedOperationException 调用该方法时

public boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)

分发 AccessibilityEvent 事件到 该视图 的子视图中。

参数

event 事件。

返回值

如果事件分发完成，返回真。

public abstract T getAdapter ()

返回当前与该小部件关联的适配器。

返回值

用于提供视图内容的适配器。

public int getCount ()

返回值

与 AdapterView 相关联的适配器的条目数量。（该值是数据条目的数量， 可能大于可见的视图的数量。）

public View getEmptyView ()

当前适配器无内容时，AdapterView 会显示特殊的空视图。 空视图用于告诉用户，该 AdapterView 没有数据。

返回值

适配器为空时显示的视图。

public int getFirstVisiblePosition ()

返回显示在屏幕上的第一个元素在适配器中所处的位置。

返回值

在适配器数据集中的位置。

public Object getItemAtPosition (int position)

取得列表中指定位置的数据。

参数

position 要取得数据的位置。

返回值

列表中指定位置的数据。

public long getItemIdAtPosition (int position)

(译者注：关于此方法的分析，参见这里。)

public int getLastVisiblePosition ()

返回显示在屏幕上的最后一个元素在适配器中所处的位置。

返回值

在适配器数据集中的位置。

public final AdapterView.OnItemClickListener getOnItemClickListener ()

返回值

点击 AdapterView 中的条目时执行的回调函数；没有设置时返回空。

public final AdapterView.OnItemLongClickListener getOnItemLongClickListener ()

返回值

取得长按 AdapterView 中的条目时执行的回调函数的监听器；未设置则返回空。

public final AdapterView.OnItemSelectedListener getOnItemSelectedListener ()

public int getPositionForView (View view)

取得适配器项目对应的视图或其子视图在适配器的数据中所处的位置。

参数

view 适配器条目或其后代的视图。调用时该项目在 AdapterView 中必须可见。

返回值

视图在适配器数据集中的位置；如果视图不在数据列表中或当前不可见，则返回 INVALID_POSITION。

public Object getSelectedItem ()

返回值

当前选中条目对应的数据；无选中条目时返回空。

public long getSelectedItemId ()

返回值

当前选中条目相应的 ID；无选中条目则返回 INVALID_ROW_ID。

public int getSelectedItemPosition ()

返回当前选中项目在适配器数据中的位置。

返回值

返回从零开始的位置（索引）信息，没有选择条目时返回 INVALID_POSITION。

public abstract View getSelectedView ()

返回值

当前选中条目对应的视图；无选中条目时返回空。

public boolean performItemClick (View view, int position, long id)

如果定义了 OnItemClickListener 则调用它。

参数

view AdapterView 中被点击的视图。

position 视图在适配器中的索引。

id 点击的条目的行 ID。

返回值

如果成功调用了定义的 OnItemClickListener 则返回真；否则返回假。

public void removeAllViews ()

该类不支持该方法，如果调用将抛出 UnsupportedOperationException 异常。

抛出

UnsupportedOperationException调用该方法时

public void removeView (View child)

该类不支持该方法，如果调用将抛出 UnsupportedOperationException 异常。

参数

child 忽略。

抛出

UnsupportedOperationException调用该方法时

public void removeViewAt (int index)

该类不支持该方法，如果调用将抛出 UnsupportedOperationException 异常。

参数

index 忽略。

抛出

UnsupportedOperationException调用该方法时

public abstract void setAdapter (T adapter)

设置用于为该小部件的视图提供用于显示的数据的适配器。

参数

adapter 用于创建视图内容的适配器。

public void setEmptyView (View emptyView)

设置适配器内容为空时显示的视图。

public void setFocusable (boolean focusable)

设置该视图是否可以获取焦点。 设为假时，可以确保在触控模式中该视图不能得到焦点。

参数

focusable 设为真时，该视图可以得到焦点。

public void setFocusableInTouchMode (boolean focusable)

设置在触控模式下该视图是否可以获取焦点。 设为真时，可以保证视图可以得到焦点。

参数

focusable 设为真时，该视图在触控模式下可以得到焦点。

public void setOnClickListener (View.OnClickListener l)

注册点击该视图时执行的回调函数。如果该视图不可点击，会将其改为可以点击的状态。

参数

l 事件发生时运行的回调函数。

public void setOnItemClickListener (AdapterView.OnItemClickListener listener)

注册单击 AdapterView 中的条目时执行的回调函数。

参数

listener 将要调用的回调。

public void setOnItemLongClickListener (AdapterView.OnItemLongClickListener listener)

注册长按 AdapterView 中的条目时执行的回调函数。

参数

listener 事件发生时运行的回调函数。

public void setOnItemSelectedListener (AdapterView.OnItemSelectedListener listener)

注册选中 AdapterView 中的条目时执行的回调函数。

参数

listener 事件发生时运行的回调函数。

public abstract void setSelection (int position)

设置当前选择条目。为了支持无障碍功能，重写该方法的子类必须首先调用父类的该方法。

参数

position 选择的数据条目的索引（从零开始）。

保护方法

protected boolean canAnimate ()

指示视图组是否能够在首次布局后为其子视图提供动画效果的显示。

返回值

如果子视图可以使用动画效果则返回真，否则返回假。

protected void dispatchRestoreInstanceState (SparseArray<Parcelable> container)

为了防止适配器生成的视图被解冻而重写。

参数

container 保存有之前存储的状态信息的 SparseArray。

protected void dispatchSaveInstanceState (SparseArray<Parcelable> container)

为了防止适配器生成的视图被冻结而重写。

参数

container 保存视图状态的 SparseArray。

protected void onLayout (boolean changed, int left, int top, int right, int bottom)

该视图设置其子视图的大小及位置时调用。派生类可以重写此方法，并为其子类布局。

参数

changed 是否为视图设置了新的大小和位置。

left 相对于父视图的左侧的位置。

top 相对于父视图的顶部的位置。

right 相对于父视图的右侧的位置。

bottom 相对于父视图的底部的位置。

补充

补充说明

本文由Android中文在线文档 转换而成。

文章精选

小胖's blog

Android SDK 中文文档计划 (14) 使用AdapterView来绑定数据


AdapterView.AdapterContextMenuInfo

译者署名：cnmahj

译者链接：http://android.toolib.net/blog

版本：Android 2.3 r1

结构

继承关系

public static class AdapterContextMenuInfo extends Object

implements ContextMenu.ContextMenuInfo

java.lang.Object

android.widget.AdapterView.AdapterContextMenuInfo

类概述

当显示 AdapterView 的上下文菜单时，为 onCreateContextMenu(ContextMenu, View, ContextMenuInfo) 回调函数提供的额外的菜单信息。

字段

public long id

用于显示上下文菜单的子视图的行 ID。

public int position

用于显示上下文菜单的子视图在适配器中的位置。

public View targetView

用于显示上下文菜单的子视图。也是 AdapterView 的子视图之一。

公有构造函数

public AdapterView.AdapterContextMenuInfo (View targetView, int position, long id)

构造函数

补充

本文由Android中文在线文档 转换而成。


AdapterView.OnItemLongClickListener

译者署名：cnmahj

译者链接：http://android.toolib.net/blog

版本：Android 2.3 r1

结构

继承关系

public static interface AdapterView.OnItemLongClickListener

类概述

定义了当长按视图中的项目时调用的回调函数的接口。

公有方法

public abstract boolean onItemLongClick (AdapterView<?> parent, View view, int position, long id)

当按下视图中的项目并保持按下状态（长按）时执行的回调函数。 实现时如果需要访问与选中条目关联的数据，可以调用 getItemAtPosition(position)。

参数

parent 发生点击事件的 AbsListView。

view AbsListView 中被点击的视图。

position 视图在一览中的位置（索引）。

id 被点击条目的行 ID。

返回值

如果回调函数处理了长按事件，返回真；否则返回假。

补充

本文由Android中文在线文档 转换而成。


AdapterView.OnItemSelectedListener

译者署名：cnmahj

译者链接：http://android.toolib.net/blog

版本：Android 2.3 r1

结构

继承关系

public static interface AdapterView.OnItemSelectedListener

类概述

定义了当选中视图中的项目时调用的回调函数的接口。

公有方法

public abstract void onItemSelected (AdapterView<?> parent, View view, int position, long id)

当选中视图中的项目时执行的回调函数。 实现时如果需要访问与选中条目关联的数据，可以调用 getItemAtPosition(position)。

参数

parent 发生选中事件的 AbsListView。

view AbsListView 中被选中的视图。

position 视图在一览中的位置（索引）。

id 被点击条目的行 ID。

public abstract void onNothingSelected (AdapterView<?> parent)

当视图中的处于选中状态的条目全部消失时执行的回调函数。 启动触控功能或适配器为空都可能导致选中条目消失。

参数

parent 没有任何选中条目的 AdapterView。

补充

本文由Android中文在线文档 转换而成。


AdapterView.OnItemClickListener

译者署名： 麦子

译者链接：0mellisa0@gmail.com

版本：Android 2.3 r1

结构

继承关系

public static interface AdapterView.OnItemClickListener

子类及间接子类

直接子类

CharacterPickerDialog, PreferenceScreen

类概述

这个接口定义了当AdapterView中一元素被点击时，一个回调函数被调用。

公共方法

public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)

当AdapterView中一元素被点击时，回调方法被调用。

如果需要访问与被选项相关的数据，执行程序可以调用getItemAtPosition(position)。

参数

parent 　发生点击动作的AdapterView。

            view 在AdapterView中被点击的视图(它是由adapter提供的一个视图)。

position　视图在adapter中的位置。

        id 被点击元素的行id。


AnalogClock

农民伯伯

版本：Android 2.2 r1

public class AnalogClock extends View

java.lang.Object

android.view.View

android.widget.AnalogClock

概述

这个控件是一个带有时针和分针的模拟时钟。

受保护方法

protected void onAttachedToWindow ()

视图（AnalogClock）附在窗体时调用。在调用时，视图在窗体表面并开始绘制。注意保证这个方法在onDraw(Canvas)以前被调用，但是它可以在首次onDraw以前任何时间调用——包括onMeasure(int, int)之前或之后。

protected void onDetachedFromWindow ()

视图（DigitalClock）从窗体上分离（移除）时调用，同时窗体表面不再绘制视图。

protected void onDraw (Canvas canvas)

实现你自己的绘制。

参数

canvas 在画布上绘制背景

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

测量这个视图以确定其内容的高度和宽度。通过measure(int, int)来调用这个方法，并且应该由子类重写以提高内容测量的效率和精确度。

约定：当该方法被重写时，你必须调用setMeasuredDimension(int, int)来存储已测量视图的高度和宽度。否则将通过measure(int, int)抛出一个IllegalStateException异常。调用父类的onMeasure(int, int)方法是一个有效的办法。

父类的实现是以背景大小为默认大小，除非MeasureSpec（测量细则）允许更大的背景。 为了更好测量内容子类应该重写onMeasure(int, int)。

如果这个方法被重写，子类有责任确保测量它的高度和宽度至少是视图的最小宽度和高度（getSuggestedMinimumHeight()和getSuggestedMinimumWidth()）。

参数

widthMeasureSpec 由于父类有横向空间要求，参见View.MeasureSpec。

heightMeasureSpec 由于父类有纵向空间要求，参见View.MeasureSpec。

protected void onSizeChanged (int w, int h, int oldw, int oldh)

布局期间当视图的大小发生改变时调用。如果只是添加到视图，调用时显示的是旧值0。（译者注：也就是添加到视图时，oldw和oldh返回的是0）

参数

w 视图当前宽度

h 视图当前高度

oldw 视图以前的宽度

oldh 视图以前的高度


BaseAdapter

译者署名： 德罗德

译者链接：http://sparkrico.javaeye.com

翻译时间：2010-11-03

版本：Android 2.2 r1

结构

继承关系

public abstract class BaseAdapter

extends Object implements ListAdapter SpinnerAdapter

java.lang.Object

android.widget.BaseAdapter

子类及间接子类

直接子类

ArrayAdapter<T>, CursorAdapter, SimpleAdapter

间接子类

ResourceCursorAdapter, SimpleCursorAdapter

类概述

用于ListView(实现指定的ListAdapter接口)和Spinner(实现指定的SpinnerAdapter接口)的共同实现一个公共基类适配器。

公共方法

public abstract boolean areAllItemsEnabled ()

在ListAdapter中所有的项目都是可用的？如果是，则代表所有的项目都是可选择，可用鼠标点击的。

返回值

如果所有项目是可用的返回真

public abstract View getDropDownView (int position, View convertView, ViewGroup parent)

获得一个在指定位置上显示下拉弹出数据的视图。

参数

position 想得到项目视图的索引

convertView 如果可能旧有的视图重新使用。注解：在使用之前应该检查这个视图不是空的并且类型合适。如果转换视图显示正确的数据是不可能的，这个方法能够创建一个新的视图

parent 视图最终将依附的父对象。

返回值

一个对应指定位置的数据的视图。

public int getItemViewType (int position)

获取通过getView为指定项目创建的视图的类型。

参数

position 在adapter数据里我们想知道视图类型的项目的位置

返回值

一个整形的视图类型的描述。如果一个视图通过getView(int, View, ViewGroup)方法转换成另一个视图，则两个视图将共享同一类型。注意：整形必须在0和getViewTypeCount()– 1之间。IGNORE_ITEM_VIEW_TYPE也可以返回。

public int getViewTypeCount ()

返回通过getView(int, View, ViewGroup))创建的视图的类型数量。每一个类型表示一组通过getView(int, View, ViewGroup)方法转换过的视图。如果adapter针对所有项目返回相同的视图类型，这个方法返回1。

这个方法仅仅当adapter设置在AdapterView时调用。

返回值

通过这个adapter创建的视图类型的数量

public boolean hasStableIds ()

表明是否项目ID时对基础数据的变化保持稳定的。

返回值

如果相同的ID指相同的对象，返回真

public boolean isEmpty ()

adapter数据项是否等于零

public boolean isEnabled (int position)

如果指定的位置不是一个隔离项目（隔离项目是一个不可选择，不可用鼠标点击的项目）则返回真。如果位置是无效的，其结果将是不确定的。在这种情况下一个ArrayIndexOutOfBoundsException(越界)异常将抛出

参数

position 项目的索引

返回值

如果这个项目不是一个隔离项目则返回真。

public void notifyDataSetChanged ()

通知附属的视图基础数据已经改变，视图应该自动刷新。

public void notifyDataSetInvalidated ()

监控数据的observer不再有效

public void registerDataSetObserver (DataSetObserver observer)

注册一个用于adapter的observer(观察者:监控数据发生改变时被调用)

参数

observer 当数据发生改变时得到通知的对象

public void unregisterDataSetObserver (DataSetObserver observer)

移除先前通过registerDataSetObserver(DataSetObserver)方法注册过的observer(观察者:监控数据发生改变的类)

参数

observer 移除注册的对象

补充

文章链接

Android BaseAdapter 例子

BaseAdapter的Bug

Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用！


BaseExpandableListAdapter

译者署名： 天涯明月刀

译者博客：http://sd6733531.javaeye.com/

版本：Android 2.3 r1

结构

继承关系

public abstract class BaseExpandableListAdapter extends Object

implements ExpandableListAdapter, HeterogeneousExpandableList

java.lang.Object

android.widget.BaseExpandableListAdapter

子类及间接子类

直接子类

CursorTreeAdapter,SimpleExpandableListAdapter

间接子类

ResourceCursorTreeAdapter, SimpleCursorTreeAdapter

类概述

BaseExpandableListAdapter是ExpandableListAdapter的抽象基类，从一些数据中提供数据和视图给可折叠列表视图。

所有继承本类的Adapters需要保证实现的 getCombinedChildId(long, long)和 getCombinedGroupId(long)方法能正确地从View组或View子元素的ID中生成唯一的ID号。

（译者注：组元素表示可折叠的列表项，子元素表示列表项展开后看到的多个子元素项。由于可折叠列表单纯寻找组元素和子元素的ID不是很方便，因此使用联合ID的方式来解决。于是有了getCombinedChildId()和getCombinedGroupId()方法。在andorid自带的ApiDomos的例子中有这个的代码：App/View/ExpandableList1）。

公共方法

public boolean areAllItemsEnabled ()

是否启用所有元素。

public int getChildType (int groupPosition, int childPosition)

获取由 getChildView(int, int, boolean, View, ViewGroup)方法创建的指定子元素类型。

参数

groupPosition 子元素所在的组位置

childPosition 子元素所在的位置

返回值

0表示任意一个子元素类型，因此此时应当只声明一种子元素类型。

public int getChildTypeCount()

获取由 getChildView(int, int, boolean, View, ViewGroup)创建的所有子元素类型个数。每种类型表示一个能被 getChildView(int, int, boolean, View, ViewGroup)转换的(任意组中的)View集合。如果适配器总是从所有的子元素中返回同一种类型，本方法将返回1。

本方法将仅仅在AdapterView设置适配器时被调用。

返回值

BaseExpandableListAdapter默认返回1。

public long getCombinedChildId (long groupId, long childId)

若你预见以下默认实现的IDs可能出现冲突，请重写本方法。

实现返回一个long型：

l 第0位:不管ID指向的是一个子元素（未设置）还是一个组（已设置），对于本方法bit值为1.

l 第1-31位:小于31位的组ID。

l 第32-63位:小于32位的子元素ID。

从列表所有项（组或子项）中获得一个唯一的子ID号。可折叠列表要求每个元素（组或子项）在所有的子元素和组中有一个唯一的ID。本方法负责根据所给的子ID号和组ID号返回唯一的ID。此外，若 hasStableIds()是true，那么必须要返回稳定的ID。

参数

groupID 包含该子元素的组ID

childID 子元素的ID号

返回

列表所有项（组或子项）中唯一的（和可能稳定）的子元素ID号。

public long getCombinedGroupId (long groupId)

若你预见以下默认实现产生IDs冲突的话，请重写本方法。

实现返回一个long型：

l 第0位:不管ID指向的是一个子元素（未设置）还是一个组（已设置），对于本方法bit值为1.

l 第1-31位:小于31位的组ID。

l 第32-63位:小于32位的子元素ID。

从列表所有项（组或子项）中获得一个唯一的子ID号。可折叠列表要求每个元素（组或子项）在所有的子元素和组中有一个唯一的ID。本方法负责根据所给的子ID号和组ID号返回唯一的ID。此外，若 hasStableIds()是true，那么必须要返回稳定的ID。

参数

groupID 包含该子元素的组ID

返回

列表所有项（组或子项）中唯一的（和可能稳定）的子元素ID号。

public int getGroupType (int groupPosition)

获得由 getGroupView(int, boolean, View, ViewGroup)方法创建的组元素类型。为设置的组元素。

     参数

         groupPosition   应返回类型所在组的位置

     返回

         0表示任意组位置，因此此时应当只申明了一种组类型。

public int getGroupTypeCount ()

返回由getGroupView(int, boolean, View, ViewGroup)方法创建的组视图类型个数。每个类型表示一个能被getGroupView(int, boolean, View, ViewGroup)转换的View集合。如果适配器总是返回同一种组类型，则此时本方法将返回1.

本方法将仅当适配器被AdapterView设置时调用。

返回

BaseExpandableListAdapter默认返回1.

public boolean isEmpty ()

（译者注：如果适配器没有任何数据，返回真。参见Adapter）

public void notifyDataSetChanged ()

（译者注：当后台数据集发生改变时，调用此方法响应数据集的更改。）

参见

notifyChanged()

public void notifyDataSetInvalidated ()

（译者注：当后台数据集不被验证的时候，调用此方法。）

        参见

            notifyInvalidated()

public void onGroupCollapsed (int groupPosition)

当组折叠的时候被调用。

参数

groupPosition 要折叠的组所在位置

public void onGroupExpanded (int groupPosition)

当组展开的时候被调用。

参数

groupPosition 要折叠的组所在位置

public void registerDataSetObserver (DataSetObserver observer)

（译者注：注册当用该适配器修改数据时调用的观察器。）

public void unregisterDataSetObserver (DataSetObserver observer)

（译者注：注销之前通过 registerDataSetObserver(DataSetObserver) 方法注册到该适配器的观察器。）

补充

文章链接

Android BaseExpandableListAdapter 教程


Button

农民伯伯

版本：Android 2.2 r1

public class Button extends TextView

java.lang.Object

android.view.View

android.widget.TextView

android.widget.Button

直接子类

CompoundButton

间接子类

CheckBox, RadioButton, ToggleButton

概述

代表一个按钮部件。用户通过按下按钮，或者点击按钮来执行一个动作。以下是一个按钮在activity中典型的应用：

然后，你能在xml布局中通过button的android:onClick属性指定一个方法，以替代在activity中为button设置OnClickListener。例如：

现在，当用户点击按钮时，Android系统调用activity的 selfDestruct(View)方法。为了正确执行，这个方法必须是public并且仅接受一个View类型的参数。例如：

方法的View参数是被点击部件的引用。

按钮样式

每个按钮的样式默认为系统按钮的背景,不同的设备、不同的平台版本有不同按钮风格。如你不满意默认的按钮样式，想对其定制以符合您应用程序的设计，那么你能用state list drawable替换按钮的背景图片。一个状态列表drawable是一个在XML中定义的drawable资源，根据当前按钮的状态改变其图片。一旦你在XML中定义了一个状态列表drawable,你可以将它应用于你的android:background属性。欲了解更多信息和示例，参见State List Drawable.

实现一个按钮的例子可参见Form Stuff tutorial

XML属性

参见Button、TextView、View的XML属性。


CheckBox

农民伯伯

版本：Android 2.2 r1

public class CheckBox extends CompoundButton

java.lang.Object

android.view.View

android.widget.TextView

android.widget.Button

android.widget.CompoundButton

android.widget.CheckBox

概述

复选框是一种有双状态按钮的特殊类型，可以选中或者不选中。如下是一个在activity中使用复选框的例子：


CheckedTextView

译者署名：easy

译者博客：http://blog.sina.com.cn/xjtuyi

版本：Android 2.2 r1

public class CheckedTextView extends TextView implements Checkable

java.lang.Object

android.view.View

android.widget.TextView

android.widget.CheckedTextView

概述

类CheckedTextView继承TextView并实现Checkable接口。当ListView的setChoiceMode方法并设定为CHOICE_MODE_SINGLE或者 CHOICE_MODE_MULTIPLE，而非CHOICE_MODE_NONE时，使用此类是很有用的。

公共方法

public boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)

在子视图的构建时分派一个辅助事件。（译者注：通过源码可以看出，视图构建时设置其选中状态。）

参数

event 事件

返回值

如果事件处理完成，则返回true

public boolean isChecked ()

是否选中。

public void setCheckMarkDrawable (Drawable d)

为一个给定的Drawable设定检查标记。当isChecked()为true时则绘制

参数

d 用于检查标记的Drawable

public void setCheckMarkDrawable (int resid)

为一个给定的Drawable设定检查标记，使用它的资源id来标识。当isChecked()为true时则绘制

参数

resid 用于检查标记的Drawable

public void setChecked (boolean checked)

改变文本视图的选中状态

参数

checked 选中文本返回true，未选中返回false

public void setPadding (int left, int top, int right, int bottom)

设置页边距。视图可能会增加一些必要的空间用于显示滚动条，并依赖滚动条的类型和可见性。因此，设定的值用于回调getPaddingLeft(), getPaddingTop(), getPaddingRight() 和 getPaddingBottom()时则返回不同的值

参数

left 左边距（使用“像素”单位）

top 上边距（使用“像素”单位）

right 右边距（使用“像素”单位）

bottom 下边距（使用“像素”单位）

public void toggle ()

反转当前视图的选中状态

补充

文章链接

            关于CheckedTextView的一些小东西

            Android API之CheckedTextView代码演示

            CheckedTextView 显示问题

示例代码

实现代码参加文章1和2，或者点这里下载。


Checkable

CN七号

版本：Android 2.2 r1

public interface Checkable

android.widget.Checkable

间接子类

CheckBox, CheckedTextView, CompoundButton, RadioButton, ToggleButton

类概述

此接口定义了一个扩展，使得继承它的视图控件具有可选状态属性。

（译者注：凡是继承了此接口的类，便有了android:checked 属性

）

公共方法

public abstract boolean isChecked ()

查询当前视图控件的选中状态。

返回：

返回一个boolean的值来表示当前视图控件的选中状态，如果当前控件被选中，返回true值，否则返回false值。

（译者注：并不一定是控件上显示了对号或者点就是被选中，很可能某个思维不同于常人的程序员会把有对号的定义为未选中而返回一个false。当然这只是可能，按照常理来说还是有对号和点的表示选中true，反之亦然。）

public abstract void setChecked (boolean checked)

设置当前视图控件的选中状态。（译者注：

执行前 | 执行 | 执行后
任何状态 | setChecked(true) | 选中
任何状态 | setChecked(false) | 未选中

参数：

checked 指定控件的选中状态true表示设置为选中，false为未选中。

public abstract void toggle ()

此方法用来切换当前视图控件的选中状态。（译者注：即将视图控件的当前状态变为其相反状态

执行前 | 执行 | 执行后
选中 | toggle() | 未选中
未选中 | toggle() | 选中


Chronometer

农民伯伯

版本：Android 2.2 r1

public class Chronometer extends TextView

java.lang.Object

android.view.View

android.widget.TextView

android.widget.Chronometer

概述

类实现了一个简单的计时器。

你可以通过 elapsedRealtime()来给它一个基准时间，并从该时间开始计数。如果你不给它基准时间，它将使用你调用 start()时的时间。默认它将显示当前"MM:SS"或 "H:MM:SS"格式的时间,或者你能通过 setFormat(String)设置一个任意字符串来格式化显示计时器显示的时间。

XML属性

属性名称 | 描述
android:format | 格式化字符串:如果指定，计时器将根据这个字符串来显示，替换字符串中第一个“%s”为当前"MM:SS"或 "H:MM:SS"格式的时间显示。如果不指定，计时器将简单的显示"MM:SS" or "H:MM:SS"格式的时间。（译者注：如：“This is a Chronometer %s”）

构造函数

public Chronometer (Context context)

初始化计时器对象。设置当前时间为基准时间。（译者注：通过程序动态创建计时器对象）

public Chronometer (Context context, AttributeSet attrs)

初始化标准视图布局信息。设置当前时间为基准时间。（译者注：指通过XML来指定一个计时器）

public Chronometer (Context context, AttributeSet attrs, int defStyle)

初始化标准视图布局信息和风格。设置当前时间为基准时间。

公共方法

public long getBase ()

返回先前由setBase(long)设置的基准时间。

public String getFormat ()

返回先前由setFormat(String)设置的格式化字符串。

public Chronometer.OnChronometerTickListener getOnChronometerTickListener ()

返回值

返回这个监听器（可能为空）是用于监听计时器变化的事件。

public void setBase (long base)

设置基准时间（译者注：基准时间为真正意义上开始计时的时间，而不是调用start时时间，比如调用本函数并设置参数base为SystemClock.elapsedRealtime()即表示从当前时间开始重新计时）。

参数

base 使用elapsedRealtime()为基准时间

public void setFormat (String format)

设置用于显示的格式化字符串。格式化字符串:如果指定，计时器将根据这个字符串来显示，替换字符串中第一个“%s”为当前"MM:SS"或 "H:MM:SS"格式的时间显示。如果这个格式化字符串为空，或者你从未调用过setFormat()方法，计时器将简单的显示"MM:SS" or "H:MM:SS"格式的时间。（译者注：如："This is a Chronometer %s"）

参数

format 格式化字符串

public void setOnChronometerTickListener (Chronometer.OnChronometerTickListener listener)

设置计时器变化时调用的监听事件。

参数

listener The listener.

public void start ()

开始计时。不会影响到由setBase(long)设置的基准时间，仅显示视图。即使部件不显示，计时器也会通过定时处理消息来工作。为了确保不发生资源泄漏，用户应确保每个start()方法都有对应的stop()调用（译者注：有一个start就有一个stop）。（译者注：start只是显示计时，实际上计时是从基准时间开始的，所以通过stop停止计时若干秒后再start时，显示的计时会突然跳到当前显示的计时后的若干秒后继续计时，见此帖子。）

public void stop ()

停止计时。不会影响到由setBase(long)设置的基准时间，仅显示视图。这将停止消息发送，有效地释放计时器运行时start()占用的资源。

受保护方法

protected void onDetachedFromWindow ()

视图从窗体上移除时调用，同时窗体表面不再显示视图。

protected void onWindowVisibilityChanged (int visibility)

当窗体中视图的可视性（GONE, INVISIBLE, VISIBLE）发生改变时调用。注意它将告诉你你的窗口是否可以被窗口管理器识别，这并不能说明窗口是否被屏幕上的其他窗口遮挡，即使它本身是可见的。

参数

visibility 窗口新的可见性

补充

文章链接

android中的时间服务–Chronometer计时器服务

示例代码

Java文件

public class ChronometerDemo extends Activity {

           private Chronometer cher1;

           @Override

           protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.chronometer);

              cher1 = (Chronometer) findViewById(R.id.cher1);

              cher1.setFormat("计时：%s");

           }

           /**

           * 开始计时

           * @param view

           */

           public void onStart(View view) {

              cher1.start();

           }

           /**

           * 停止计时

           * @param view

           */

           public void onStop(View view) {

              cher1.stop();

           }

           /**

           * 重置

           * @param view

           */

           public void onReset(View view) {

              cher1.setBase(SystemClock.elapsedRealtime());

           }

}

XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"

    android:layout_width="wrap_content" android:layout_height="wrap_content">

    <Chronometer android:id="@+id/cher1" android:layout_width="wrap_content"

       android:layout_height="wrap_content"></Chronometer>

    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content">

       <Button android:onClick="onStart" android:text="开始计时" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

       <Button android:onClick="onStop" android:text="停止计时" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

       <Button android:onClick="onReset" android:text="重置" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

    </LinearLayout>

</LinearLayout>


Chronometer.OnChronometerTickListener

农民伯伯

版本：Android 2.2 r1

public static interface Chronometer.OnChronometerTickListener

android.widget.Chronometer.OnChronometerTickListener

概述

计时器递增的时候通知这个回调。

公共方法

public abstract void onChronometerTick (Chronometer chronometer)

在计时器变化时通知。

参数

chronometer 计时器对象。


CompoundButton

翻译署名：德罗德

译者博客：sparkrico.javaeye.com

版本：Android 2.2 r1

public abstract class CompoundButton extends Button implements Checkable

java.lang.Object

android.view.View

android.widget.TextView

android.widget.Button

android.widget.CompoundButton

间接子类

CheckBox, RadioButton, ToggleButton

概述

一个带有选中/未选中状态的按钮。当按钮按下或点中时自动改变状态。

公共方法

public boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)

在子视图的构建时分派一个辅助事件。（译者注：通过源码可以看出，视图构建时设置其选中状态。）

参数

event 事件

返回值

如果事件全部完成返回True。

public boolean isChecked ()

（译者注：是否选中）

public void onRestoreInstanceState (Parcelable state)

允许视图重新应用以前通过onSaveInstanceState()生成代表内部的状态。这个函数决不调用一个空的状态。

参数

state 返回以前调用onSaveInstanceState()保存下来的状态。

public Parcelable onSaveInstanceState ()

允许视图生成一个代表内部的状态，以后可用于创建一个与之相同的新的实例。这种状态应该只包含非持久或以后不能够重建的信息。例如，你决不存储你当前在屏幕上的位置，因为这会在视图的层面上重新计算放置一个新的实例。

你可以存储到这里的一些例子：一个文本框中当前光标的位置（但通常不是文字本身，文字通常保存在内容提供者(content provider)或其他持久的储存中），一个列表视图中的当前选中项。

返回值

返回一个包含视图当前状态的Parcelable对象，或没有什么状态保存时返回null。默认实现返回null。

public boolean performClick ()

如果视图定义了OnClickListener监听器，调用此方法来执行。

返回值

定义了的OnClickListener被调用返回True，否则返回False

public void setButtonDrawable (Drawable d)

给按钮背景设置一个可绘制对象（如：图像）

参数

d 用作背景的可绘制对象（如：图像）

public void setButtonDrawable (int resid)

通过资源Id给按钮背景设置一个图像

参数

resid 作为背景图像的资源id

public void setChecked (boolean checked)

改变按钮的选中状态

参数

checked true选中，false非选中

public void setOnCheckedChangeListener (CompoundButton.OnCheckedChangeListener listener)

注册一个在按钮状态发生改变时执行的回调函数

参数

listener 当选中状态改变时调用的函数

public void toggle ()

改变选中状态为当前状态的逆状态

受保护方法

protected void drawableStateChanged ()

在视图状态的变化影响到所显示可绘制的状态时调用这个方法。

确保在重载时中调用父类方法

protected int[] onCreateDrawableState (int extraSpace)

为当前视图生成新的可绘图区状态。这个方式当缓存的图像绘图区状态确定失效时通过视图系统调用。你可以使用getDrawableState()方法重新取得当前的状态。

参数

extraSpace 如果为非零，这是你应该返回的数组在你可以存放你的状态的额外条目的数量。

返回值

返回一个记录着视图中当前绘图区状态的数组

protected void onDraw (Canvas canvas)

实现你自己的绘制。

参数

canvas 在画布上绘制背景

protected boolean verifyDrawable (Drawable who)

如果你的视图子类显示他自己的可视化对象，他将要重写此方法并且为了显示可绘制返回true。此操作允许进行绘制时有动画效果。

    确认当重写从方法时，需调用父类相应方法。

参数

who 需判断的可绘制对象（Drawable）。如果是你要显示的对象，返回True，否则返回调用父类的结果。

返回值

boolean 如果可绘制对象（Drawable）已经在视图中显示，返回True否则返回false。并且此处不允许使用动画。


CompoundButton.OnCheckedChangeListener

翻译署名：德罗德

译者博客：sparkrico.javaeye.com

版本：Android 2.2 r1

public static interface CompoundButton.OnCheckedChangeListener

android.widget.CompoundButton.OnCheckedChangeListener

概述

接口定义了一个在按钮的选中状态改变时要调用的回调函数。

公共方法

public abstract void onCheckedChanged(CompoundButton buttonView, boolean isChecked)

在按钮选中状态发生改变时被调用

参数

buttonView 选中状态发生改变的那个按钮

isChecked 按钮新的状态


CursorAdapter

译者署名： 深夜未眠

译者链接：http://chirs1012f.javaeye.com/

翻译时间：2011-1-20

版本：Android 2.3 r1

结构

继承关系

public abstract class CusrorAdapter extends BaseAdpater implements Filterable

java.lang.Object

android.widget.BaseAdapter

android.widget.CursorAdapter

子类及间接子类

直接子类

ResourceCursorAdapter

间接子类

SimpleCursorAdapter

类概述

通过该类可用 Cursor 的方式访问数据库，并将查询出来的数据展示到列表视图(ListView)部件上。其中游标携带的结果集中必须有列名为“_id”的列，否则这个类无法工作。

构造函数

public CusorAdapter(Context context,Cursor c)

构造函数。每当数据库的数据发生改变时，适配器将调用requery()重新查询以显示最新的数据。

参数

context 应用程序上下文。

c 用来获取数据的游标(Coursor)

public CusorAdapter(Context context,Cursor c, boolean autoRequery)

构造函数。每当数据库的数据发生改变时，适配器将调用requery()重新查询以显示最新的数据。

参数

context 应用程序上下文。

c 用来获取数据的Coursor

autoRequry 设置为true时，每当数据库的数据发生改变时，适配器将调用requery()重新查询以显示最新的数据。

公共方法

public abstract void bindView (View view, Context context, Cursor cursor)

重用一个已有的view，使其显示当前cursor所指向的数据。

参数

view 已存在的视图, 返回之前newView方法创建的视图。

context 应用程序上下文

cursor 用于获取数据的Coursor。Coursor已经移到正确的位置。

public void changeCursor (Cursor cursor)

更改底层的游标为新传入的游标。如果游标已经存在则先关闭这个已存在的游标。

参数

cursor 新Cursor。

public CharSequence convertToString (Cursor cursor)

将cursor转换成CharSequence。子类应该重写这个方法并转换它们的结果。这个方法的默认实现是：当cursor为空时返回一个空串，否则直接返回调用cursor的toString()方法。

参数

cursor 将cursor转换成CharSequence对象。

返回值

返回表示CharSequence的值。

public int getCount ()

（译者注：获取适配器中数据的总行数。）

参见

getCount()

public Cursor getCursor ()

返回当前适配器绑定的Cursor对象。

返回值

Cursor对象。

public View getDropDownView (int position, View convertView, ViewGroup parent)

获取下拉列表选项指定位置的视图对象

参数

position 视图(View)对象的行索引。

convertView 重用已有的视图(View)对象。备注：在使用前你应该检查 一下这个视图对象是否非空并且这个对象的类型是否合适 。由此引伸出，如果该对象不能被转换并显示正确的数据， 这个方法内部就会重新创建一个合适的视图(View)对象。

parent 不管是转换后的还是重新创建的视图(View)对象，始终都会依附于parent对象上。

返回值

返回视图(View)对象,该对象显示数据集指定位置上的数据。

public Filter getFilter ()

返回一个可以通过一种过滤模式来约束数据的过滤器。

这个方法通常在Adapter类实现。

返回值

一个用于约束数据的过滤器

public FilterQueryProvider getFilterQueryProvider ()

返回一个提供过滤的查询过滤器。若过滤器为null，则不再过滤。

返回值

返回当前过滤器对象，如果不存在返回null。

参见

setFilterQueryProvider(android.widget.FilterQueryProvider)

runQueryOnBackgroundThread(CharSequence)

public Object getItem (int position)

（译者注：获取数据集中指定位置上的数据项目）

参见

getItem(int)

public long getItemId (int position)

（译者注：获取数据集中的指定位置上的行id。）

参见

getItemId(int)

public View getView (int position, View convertView, ViewGroup parent)

（译者注：获取一个显示数据集中指定位置数据段视图。可以手动创建视图，或者从XML设计文件填充。当视图从XML设计文件填充时，父视图（如GridView，ListView等）将接受默认的设计参数，除非使用inflate(int, android.view.ViewGroup, boolean)去指定一个根视图和防止依附于根视图。）

参见

getView(int, View, ViewGroup)

public boolean hasStableIds ()

无论项ID代表的基础数据的是否变化都保持不变。

返回值

如果为TRUE，意味着相同的ID始终引用相同的对象。

public View newDropDownView (Context context, Cursor cursor, ViewGroup parent)

生成一个新的下拉视图来保存cursor指向的数据

参数

context 应用程序全局信息接口（应用上下文）

cursor 获取数据的游标，它已经移动到正确的位置

parent 与新视图相关联的上级视图

返回值

新创建的视图。

public abstract View newView (Context context, Cursor cursor, ViewGroup parent)

新建一个视图来保存cursor指向的数据

参数

context 应用程序全局信息接口（应用上下文）

cursor 获取数据的游标，它已经移动到正确的位置

parent 与新视图相关联的上级视图

返回值

新创建的视图。

public Cursor runQueryOnBackgroundThread (CharSequence constraint)

执行含指定约束的查询。此查询依赖于适配器的过滤器。查询是由 FilterQueryProvider 提供。如果没有指定FilterQueryProvider，当前cursor不过滤只返回。该方法会通过changeCursor(Cursor)方法返回一个Cursor对象，并且关闭掉先前的Cursor对象。这个方法始终在后台线程执行，而不是在应用程序的主线程（或是UI线程）中运行。规定：当参数constraint为null或为空时，该方法返回原始结果。

参数

constraint 该查询必须被过滤的约束。

返回值

返回含有新的查询结果的Cursor。

参考

getFilter()

getFilterQueryProvider()

setFilterQueryProvider(android.widget.FilterQueryProvider)

public void setFilterQueryProvider (FilterQueryProvider filterQueryProvider)

设置一个过滤器，用来过滤当前的Cursor对象。当这个适配器需要进行过滤操作时， runQuery(CharSequence)方法被调用。

参数

filterQueryProvider 过滤器对象，设置为null时，就相当于移除了该过滤器。

参考

getFilterQueryProvider()

runQueryOnBackgroundThread(CharSequence)

受保护方法

protected void init (Context context, Cursor c, boolean autoRequery)

（译者注：供构造函数使用初始化相关参数）

protected void onContentChanged ()

当cursor对象上的ContentObserver接收到改变的通知时就会调用该方法，其默认实现提供了自动重新查询方式，但可以被子类重写。

补充

文章精选

android CursorAdapter的监听事件

实现基于Android的英文电子词典


CursorTreeAdapter

译者署名： 深夜未眠

译者链接：http://chris1012f.javaeye.com/

翻译时间：2011-1-24

版本：Android 3.0 r1

结构

继承关系

public abstract class CusrorTreeAdapter

extends BaseExpandableListAdpater implements Filterable

java.lang.Object

android.widget.BaseExpandableListAdapter

android.widget.CursorTreeAdapter

子类及间接子类

直接子类

ResourceCursorTreeAdapter

间接子类

SimpleCursorTreeAdapter

类概述

通过该适配类可以用一连续的游标(Coursor)对象访问数据库，并将查询出来的数据展示到可伸缩的列表视图(ExpandableListView)部件上。顶层游标(Cursor)对象(在构造器中指定)显示全部组，后面的游标(Cursor)对象从 getChildrenCursor(Cursor)获取并展示子元素组。其中游标携带的结果集中必须有个名为“_id”的列，否则这个类不起任何作用。

构造函数

public CursorTreeAdapter (Cursor cursor, Context context)

构造函数。每当数据库的数据发生改变时，适配器将调用requery()重新查询以显示最新的数据。

参数

cursor 为组(groups)提供数据的游标(Coursor)

context 应用程序上下文。

public CursorTreeAdapter (Cursor cursor, Context context, boolean autoRequery)

构造函数。

参数

cursor 为组(groups)提供数据的游标(Coursor)

context 应用程序上下文。

autoRequery 设置为true时，每当数据库的数据发生改变时，适配器将调用requery()重新查询以显示最新的数据。

公共方法

public void changeCursor (Cursor cursor)

更改相关的游标为新传入的游标。如果游标已经存在则先关闭这个已存在的游标。

参数

cursor 新游标(Cursor)对象。

public CharSequence convertToString (Cursor cursor)

将cursor转换成CharSequence。子类应该重写这个方法并转换它们的结果。这个方法的默认实现是：当cursor为空时返回一个空串，否则直接返回调用cursor的toString()方法。

参数

cursor 将cursor转换成CharSequence对象。

返回值

返回CharSequence类型的值（译者注：这个值是通过转换参数cursor类型而获得的。）

public Cursor getChild (int groupPosition, int childPosition)

获取指定组中的指定子元素的相关数据。

参数

groupPosition 组位置（该组内部含有子元素）

childPosition 子元素位置（相对于其它子元素）

返回值

返回指定子元素数据。

public long getChildId (int groupPosition, int childPosition)

获取指定组中的指定子元素ID，这个ID在组里一定是唯一的。联合ID（参见 getCombinedChildId(long, long)）在所有条目（所有组和所有元素）中也是唯一的。

参数

groupPosition 组位置（该组内部含有子元素）

childPosition 子元素位置（相对于其它子元素）

返回值

子元素关联ID。

public View getChildView (int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)

获取一个视图对象，显示指定组中的指定子元素数据。

参数

groupPosition 组位置（该组内部含有子元素）

childPosition 子元素位置（决定返回哪个视图）

isLastChild 子元素是否处于组中的最后一个

convertView 重用已有的视图(View)对象。注意：在使用前你应该检查一下这个视图对象是否非空并且这个对象的类型是否合适。由此引伸出，如果该对象不能被转换并显示正确的数据，这个方法就会调用 getChildView(int, int, boolean, View, ViewGroup)来创建一个视图(View)对象。

parent 返回的视图(View)对象始终依附于的视图组。

返回值

指定位置上的子元素返回的视图对象

public int getChildrenCount (int groupPosition)

获取指定组中的子元素个数

参数

groupPosition 组位置（决定返回哪个组的子元素个数）

返回值

返回组中的子元素个数

public Cursor getCursor ()

返回当前适配器绑定的Cursor对象。

返回值

Cursor对象。

public Filter getFilter ()

返回一个可以通过一种过滤模式来约束数据的过滤器。

这个方法通常在Adapter类中实现。

返回值

返回一个用来限制数据的过滤器(Filter)对象。

public FilterQueryProvider getFilterQueryProvider ()

返回一个提供过滤的查询过滤器。若过滤器为null，则不再过滤。

返回值

返回当前过滤器对象，如果不存在返回null。

参考

getFilterQueryProvider()

public Cursor getGroup (int groupPosition)

获取指定组中的数据

参数

groupPosition 组位置

返回值

返回组中的数据，也就是该组中的子元素数据。

public int getGroupCount ()

获取组的个数

返回值

组的个数

public long getGroupId (int groupPosition)

获取指定组的ID，这个组ID必须是唯一的。联合ID(参见 getCombinedGroupId(long))在所有条目(所有组和所有元素)中也是唯一的。

参数

groupPosition 组位置

返回值

返回组ID

public View getGroupView (int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)

获取显示指定组的视图对象。这个方法仅返回关于组的视图对象，要想获取子元素的视图对象，就需要调用 getChildView(int, int, boolean, View, ViewGroup)。

参数

groupPosition 组位置（决定返回哪个视图）

isExpanded 该组是展开状态还是伸缩状态

convertView 重用已有的视图对象。注意：在使用前你应该检查一下这个视图对象是否非空并且这个对象的类型是否合适。由此引伸出，如果该对象不能被转换并显示正确的数据，这个方法就会调用 getGroupView(int, boolean, View, ViewGroup)来创建一个视图(View)对象。

parent 返回的视图对象始终依附于的视图组。

返回值

返回指定组的视图对象

public boolean hasStableIds ()

组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们。

返回值

返回一个Boolean类型的值，如果为TRUE，意味着相同的ID永远引用相同的对象。

public boolean isChildSelectable (int groupPosition, int childPosition)

是否选中指定位置上的子元素。

参数

groupPosition 组位置（该组内部含有子元素）

childPosition 子元素位置

返回值

是否选中子元素

public void notifyDataSetChanged (boolean releaseCursors)

通知数据集已改变，该方法还为任何带有缓存功能的游标提供不用释放资源的可选功能。

参数

releaseCursors 是否释放任何带有缓冲功能的游标资源

public void notifyDataSetChanged ()

该方法内部实现了在每个观察者上面调用onChanged事件。每当发现数据集有改变的情况，或者读取到数据的新状态时，就会调用此方法。

public void notifyDataSetInvalidated ()

该方法内部实现了在每个观察者上面调用onInvalidated事件。每当发现数据集监控有改变的情况，比如该数据集不再有效，就会调用此方法。

public void onGroupCollapsed (int groupPosition)

当指定组收缩状态的时候调用此方法。

参数

groupPosition 指定组收缩状态

public Cursor runQueryOnBackgroundThread (CharSequence constraint)

执行含指定约束的查询。此查询依赖于适配器的过滤器。查询是由 FilterQueryProvider 提供。如果没有指定FilterQueryProvider，当前cursor不过滤只返回。该方法会通过changeCursor(Cursor)方法返回一个Cursor对象，并且关闭掉先前的Cursor对象。这个方法始终在后台线程执行，而不是在应用程序的主线程（或是UI线程）中运行。规定：当参数constraint为null或为空时，该方法返回原始结果。

参数

constraint 当某个查询需要过滤功能，使用参数constraint作为约束条件。

返回值

返回含有新的查询结果的Cursor。

参考

getFilter()

getFilterQueryProvider()

setFilterQueryProvider(android.widget.FilterQueryProvider)

public void setChildrenCursor (int groupPosition, Cursor childrenCursor)

为指定组子元素设置游标(Cursor)，并关闭已存在的游标。这个方法是非常有用的，当进行异步查询操作的时候用来避免UI发生阻塞的情况。

参数

groupPosition 组位置(组中的哪个子元素要设置游标对象)

childrenCursor 组子元素的游标(Cursor)

public void setFilterQueryProvider (FilterQueryProvider filterQueryProvider)

设置一个过滤器，用来过滤当前的Cursor对象。当这个适配器需要进行过滤操作时， runQuery(CharSequence)方法被调用。

参数

filterQueryProvider 过滤生成器对象，设置为null时，就相当于移除了该生 成器 。

参考

getFilterQueryProvider()

runQueryOnBackgroundThread(CharSequence)

public void setGroupCursor (Cursor cursor)

设置组游标对象。

参数

cursor 设置组游标对象，并关闭已存在的游标对象。

受保护方法

protected abstract void bindChildView (View view, Context context, Cursor cursor, boolean isLastChild)

用游标(Coursor)的方式将子元素数据绑定在一个已存在的视图(View)对象上。

参数

view 已存在的视图(View)对象, 也就是之前new出来的。

context 应用程序上下文对象

cursor 获取数据的游标对象，它已经移动到正确的位置

IsLastChild 子元素是否处于组中的最后一个

protected abstract void bindGroupView (View view, Context context, Cursor cursor, boolean isExpanded)

用游标(Coursor)的方式将组数据绑定在一个已存在的视图(View)对象上。

参数

view 已存在的组视图(View)对象, 也就是早先new出来的。

context 应用程序上下文对象，它已经移动到正确的位置

cursor 获取数据的游标对象

isExpanded 该组是展开状态还是伸缩状态

protected abstract Cursor getChildrenCursor (Cursor groupCursor)

获取指定组中的子元素游标对象。子类必须实现这个方法，用于在指定组中返回子元素数据。

如果你想用异步查询的方式避免UI阻塞的情况发生，可能会返回null或是在稍后调用 setChildrenCursor(int, Cursor)。

你有责任在Activity生命周期中管理这个游标对象，有一个非常好的思路：使用 managedQuery(Uri, String[], String, String[], String)来管理它们。在某些情况下，适配器本身会使游标停止工作，但这个特例不会总是出现，所以我们要确保有效地管理好游标对象。

参数

groupCursor 组游标对象，决定返回哪个组中的子元素游标对象。

返回值

返回指定组中的子元素游标对象或者为null。

protected abstract View newChildView (Context context, Cursor cursor, boolean isLastChild, ViewGroup parent)

创建一个新的子元素视图并持有指向数据的游标cursor。

参数

context 应用程序上下文对象

cursor 获取数据的游标对象，它已经移动到正确的位置

IsLastChild 子元素是否处于组中的最后一个

parent 新视图(View)所依附于的父对象。

protected abstract View newGroupView (Context context, Cursor cursor, boolean isExpanded, ViewGroup parent)

创建一个新的组视图并持有组中指向数据的游标cursor。

参数

context 应用程序上下文对象

cursor 获取数据的游标对象，它已经移动到正确的位置

isExpanded 该组是否展开状态

parent 新视图(View)所依附于的父对象。

补充

文章精选

说说定制自己的CursorAdapter


DatePicker

农民伯伯

版本：Android 2.2 r1

public class DatePicker extends FrameLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.DatePicker

概述

一个选择年月日的日历布局视图。对于对话框样式的日历视图，参见 DatePickerDialog.

公共方法

public int getDayOfMonth ()

获取选择的天数

public int getMonth ()

获取选择的月份。（注意：返回数值为0..11，需要自己+1来显示）

public int getYear ()

获取选择的年份

public void init (int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)

初始化状态。（译者注：初始化年月日）

参数

year 初始年（译者注：注意使用 new Date()初始化年时，需要+1900，如下：date.getYear() + 1900）

monthOfYear 初始月。

dayOfMonth 初始日。

onDateChangedListener 日期改变时通知用户的事件监听，可以为空(null)。

public void setEnabled (boolean enabled)

设置视图的启用状态。该启用状态随子类的不同而有不同的解释。

参数

enabled True if this view is enabled, false otherwise.设置为true表示启动视图，反之禁用。

public void updateDate (int year, int monthOfYear, int dayOfMonth)

更新日期

受保护方法

protected void dispatchRestoreInstanceState (SparseArray<Parcelable> container)

重写使我们能够完全控制这小部件的保存或恢复。（译者注：此处直接调用了父类的 ViewGroup. dispatchThawSelfOnly 方法）

参数

container SparseArray 持有保存以前的状态。The SparseArray which holds previously saved state.

protected void onRestoreInstanceState (Parcelable state)

允许视图重新应用以前通过onSaveInstanceState()生成代表内部的状态。这个函数决不调用一个空的状态。

参数

state 返回以前调用onSaveInstanceState()保存下来的状态。

protected Parcelable onSaveInstanceState ()

允许视图生成一个代表内部的状态，以后可用于创建一个与之相同的新的实例。这种状态应该只包含非持久或以后不能够重建的信息。例如，你决不存储你当前在屏幕上的位置，因为这会在视图的层面上重新计算放置一个新的实例。

你可以存储到这里的一些例子：一个文本框中当前光标的位置（但通常不是文字本身，文字通常保存在内容提供者(content provider)或其他持久的储存中），一个列表视图中的当前选中项。

返回值

返回一个包含视图当前状态的Parcelable对象，或没有什么状态保存时返回null。默认实现返回null。


DatePicker.OnDateChangedListener

译者署名：cnmahj

译者链接：http://android.toolib.net/blog

版本：Android 2.3 r1

结构

继承关系

public static interface DatePicker.OnDateChangedListener

子类及间接子类

直接子类

DatePickerDialog

类概述

表明用户变更了日期的回调函数。

公共方法

public abstract void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)

（译者注：当用户修改日期onDateChanged()将被调用）

参数

view 与监听器关联的视图。

year 用户设置的年。

monthOfYear 用户设置的月份(0-11)，与 Calendar 兼容。

dayOfMonth 用户设置的日期。

补充

示例代码

package com.adakoda.android.datepickerdialogsample;

import java.util.Calendar;

import android.app.Activity;

import android.app.DatePickerDialog;

import android.os.Bundle;

import android.widget.DatePicker;

import android.widget.Toast;

public class DatePickerDialogSampleActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

final Calendar calendar = Calendar.getInstance();

final int year = calendar.get(Calendar.YEAR);

final int month = calendar.get(Calendar.MONTH);

final int day = calendar.get(Calendar.DAY_OF_MONTH);

final DatePickerDialog datePickerDialog = new DatePickerDialog(

this,

new DatePickerDialog.OnDateSetListener() {

@Override

public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

Toast.makeText(DatePickerDialogSampleActivity.this,

String.valueOf(year) + "/" +

String.valueOf(monthOfYear + 1) + "/" +

String.valueOf(dayOfMonth),

Toast.LENGTH_SHORT).show();

}

},

year, month, day);

datePickerDialog.show();

}

}


DialerFilter

译者署名： cnmahj

译者链接：http://blog.toolib.net/cnmahj

版本：Android 3.1 r1

结构

继承关系

public class DialerFilter extends RelativeLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.RelativeLayout

android.widget.DialerFilter

类概述

（译者注：拨号器过滤，暂时不清楚使用方法和场景。）

常量

public static final int DIGITS_AND_LETTERS

该模式包含两行。

常量值： 1 (0x00000001)

public static final int DIGITS_AND_LETTERS_NO_DIGITS

DIGITS_AND_LETTERS 模式开始后，过滤器移除了所有匹配的数字， 只剩字母行时的模式。

常量值： 2 (0x00000002)

public static final int DIGITS_AND_LETTERS_NO_LETTERS

DIGITS_AND_LETTERS 模式开始后，过滤器移除了所有匹配的字母， 只剩数字行时的模式。

常量值： 3 (0x00000003)

public static final int DIGITS_ONLY

该模式只有数字行。

常量值： 4 (0x00000004)

public static final int LETTERS_ONLY

该模式只有字母行。

常量值： 5 (0x00000005)

公共方法

public void append (String text)

public void clearText ()

清除数值和过滤器文本。

public CharSequence getDigits ()

public CharSequence getFilterText ()

public CharSequence getLetters ()

public int getMode ()

public boolean isQwertyKeyboard ()

public boolean onKeyDown (int keyCode, KeyEvent event)

KeyEvent.Callback.onKeyMultiple() 的默认实现. 如果视图可用并可按， 当按下 KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER 时执行视图的按下事件.

参数

keyCode 表示按下的键的、在 KEYCODE_ENTER 中定义的键盘代码.

event KeyEvent 对象，定义了按钮动作.

返回值

如果处理了事件，返回真.如果允许下一个事件接受器处理该事件，可以返回假.

public boolean onKeyUp (int keyCode, KeyEvent event)

KeyEvent.Callback.onKeyMultiple() 的默认实现. 当释放 KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER 时执行视图的单击事件.

参数

keyCode 表示按下的键的、在 KEYCODE_ENTER 中定义的键盘代码.

event KeyEvent 对象，定义了按钮动作.

返回值

如果处理了事件，返回真.如果允许下一个事件接受器处理该事件，可以返回假.

public void removeFilterWatcher (TextWatcher watcher)

public void setDigitsWatcher (TextWatcher watcher)

public void setFilterWatcher (TextWatcher watcher)

public void setLettersWatcher (TextWatcher watcher)

public void setMode (int newMode)

改变小部件的模式。

参数

newMode 变更的目标模式。

受保护方法

protected void onFinishInflate ()

根据 XML 生成视图工作完成.该函数在生成视图的最后调用，在所有子视图添加完之后。

即使子类覆盖了 onFinishInflate 方法，也应该调用父类的方法，使该方法得以执行。

protected void onFocusChanged (boolean focused, int direction, Rect previouslyFocusedRect)

如果有图标，只是在得到焦点时显示图标视图。

参数

focused 如果视图具有焦点，值为真；否则为假.

direction 当调用 requestFocus() 为该视图设置焦点时，该值为焦点移动的方向. 其值为 FOCUS_UP、FOCUS_DOWN、 FOCUS_LEFT 或者 FOCUS_RIGHT. 当使用无参数的 requestFocus() 时，可能无值.

previouslyFocusedRect 失去焦点的视图的矩形坐标，使用该视图的坐标系统.如果指定了， 它将传入可以知道焦点来自哪里的详细信息（作为对 direction 的补充）. 否则，其值为 null。

protected void onModeChange (int oldMode, int newMode)

在模式变更后调用，为子类提供可以用于重新更改风格的等附加操作的机会。

补充

示例代码

<?xml version="1.0" encoding="utf-8"?>

<DialerFilter android:id="@+id/dialer_filter"

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

    <EditText android:id="@android:id/hint"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:background="@android:drawable/editbox_background"/>

    <EditText android:id="@android:id/primary"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_below="@android:id/hint"/>

</DialerFilter>

测试代码

DialerFilterTest.java


DigitalClock

农民伯伯

版本：Android 2.2 r1

public class DigitalClock extends TextView

java.lang.Object

android.view.View

android.widget.TextView

android.widget.DigitalClock

概述

像AnalogClock（ [image] ），但是是数字的。显示秒。修正：分开显示小时/分钟/秒，均衡的字体不能够摆动显示。（译者注：根据字体按比例显示小时/分钟/秒，无法像AnalogClock转动显示）

受保护方法

protected void onAttachedToWindow ()

视图（DigitalClock）附在一个窗体上时调用。在这个点的表面进行绘制。注意这个方法保证在onDraw(Canvas)以前调用，但是它可以在第一次调用onDraw以前任何时间调用——包括onMeasure(int, int)之前或之后。

protected void onDetachedFromWindow ()

视图（DigitalClock）从窗体上分离（移除）时调用。在这个点的表面不再有画面绘制。


EditText

农民伯伯

版本：Android 2.2

java.lang.Object

android.view.View

android.widget.TextView

android.widget.EditText

直接子类：

AutoCompleteTextView, ExtractEditText

间接子类：

MultiAutoCompleteTextView

继承自TextView的xml属性说明：

属性名称

描述

android:autoLink

设置是否当文本为URL链接/email/电话号码/map时，文本显示为可点击的链接。可选值(none/web/email/phone/map/all)。这里只有在同时设置text时才自动识别链接，后来输入的无法自动识别。

android:autoText

自动拼写帮助。这里单独设置是没有效果的，可能需要其他输入法辅助才行，效果参见视频。

android:bufferType

指定getText()方式取得的文本类别。选项editable 类似于StringBuilder可追加字符，

也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式，参见这里1、这里2。

android:capitalize

设置英文字母大写类型。设置如下值：sentences仅第一个字母大写；words每一个单词首字母大小，用空格区分单词；characters每一个英文字母都大写。在模拟器上用PC键盘直接输入可以出效果，但是用软键盘无效果。

android:cursorVisible

设定光标为显示/隐藏，默认显示。如果设置false，即使选中了也不显示光标栏。

android:digits

设置允许输入哪些字符。如“1234567890.+-*/%\n()”

android:drawableTop

在text的正上方输出一个drawable。在EditView中的效果比较搞笑： ，居然在文本框里，而且删不了。

android:drawableBottom

在text的下方输出一个drawable(如图片)。如果指定一个颜色的话会把text的背景设为该颜色，并且同时和background使用时覆盖后者。

android:drawableLeft

在text的左边输出一个drawable(如图片)。

android:drawablePadding

设置text与drawable(图片)的间隔，与drawableLeft、drawableRight、drawableTop、drawableBottom一起使用，可设置为负数，单独使用没有效果。

android:drawableRight

在text的右边输出一个drawable，如图片。

android:editable

设置是否可编辑。仍然可以获取光标，但是无法输入。

android:editorExtras

指定特定输入法的扩展，如“com.mydomain.im.SOME_FIELD”。源码跟踪至EditorInfo.extras，暂无相关实现代码。

android:ellipsize

设置当文字过长时,该控件该如何显示。有如下值设置：”start”—–省略号显示在开头；”end”——省略号显示在结尾；”middle”—-省略号显示在中间；”marquee” ——以跑马灯的方式显示(动画横向移动)

android:freezesText

设置保存文本的内容以及光标的位置。参见：这里。

android:gravity

设置文本位置，如设置成“center”，文本将居中显示。

android:hint

Text为空时显示的文字提示信息，可通过textColorHint设置提示信息的颜色。

android:imeOptions

设置软键盘的Enter键。有如下值可设置：normal，actionUnspecified，actionNone，actionGo，actionSearch，actionSend，actionNext，actionDone，flagNoExtractUi，flagNoAccessoryAction，flagNoEnterAction。可用’|’设置多个。这里仅设置显示图标之用，参见文章末尾例子。

android:imeActionId

设置IME动作ID，在onEditorAction中捕获判断进行逻辑操作。

android:imeActionLabel

设置IME动作标签。但是不能保证一定会使用，猜想在输入法扩展的时候应该有用。

android:includeFontPadding

设置文本是否包含顶部和底部额外空白，默认为true。

android:inputMethod

为文本指定输入法，需要完全限定名（完整的包名）。例如：com.google.android.inputmethod.pinyin，但是这里报错找不到。关于自定义输入法参见这里。

sentences仅第一个字母大写；words每一个单词首字母大小，用空格区分单词；characters每一个英文字母都大写

android:inputType

设置文本的类型，用于帮助输入法显示合适的键盘类型。有如下值设置：none、text、textCapCharacters字母大小、textCapWords单词首字母大小、textCapSentences仅第一个字母大小、textAutoCorrect、textAutoComplete自动完成、textMultiLine多行输入、textImeMultiLine输入法多行（如果支持）、textNoSuggestions不提示、textEmailAddress电子邮件地址、textEmailSubject邮件主题、textShortMessage短信息（会多一个表情按钮出来，点开如下图：

）、textLongMessage长讯息？、textPersonName人名、textPostalAddress地址、textPassword密码、textVisiblePassword可见密码、textWebEditText作为网页表单的文本、textFilte文本筛选过滤、textPhonetic拼音输入、numberSigned有符号数字格式、numberDecimal可带小数点的浮点格式、phone电话号码、datetime时间日期、date日期、time时间。部分参考这里。

android:marqueeRepeatLimit

在ellipsize指定marquee的情况下，设置重复滚动的次数，当设置为 marquee_forever时表示无限次。

android:ems

设置TextView的宽度为N个字符的宽度。参见TextView中此属性的截图。

android:maxEms

设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:minEms

设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:maxLength

限制输入字符数。如设置为5，那么仅可以输入5个汉字/数字/英文字母。

android:lines

设置文本的行数，设置两行就显示两行，即使第二行没有数据。

android:maxLines

设置文本的最大显示行数，与width或者layout_width结合使用，超出部分自动换行，超出行数将不显示。

android:minLines

设置文本的最小行数，与lines类似。

android:linksClickable

设置链接是否点击连接，即使设置了autoLink。

android:lineSpacingExtra

设置行间距。

android:lineSpacingMultiplier

设置行间距的倍数。如”1.2”

android:numeric

如果被设置，该TextView有一个数字输入法。有如下值设置：integer正整数、signed带符号整数、decimal带小数点浮点数。

android:password

以小点”.”显示文本

android:phoneNumber

设置为电话号码的输入方式。

android:privateImeOptions

提供额外的输入法选项(字符串格式)。依据输入法而决定是否提供，如这里所见。自定义输入法继承

InputMethodService。这篇文章也许有帮助。

android:scrollHorizontally

设置文本超出TextView的宽度的情况下，是否出现横拉条。

android:selectAllOnFocus

如果文本是可选择的，让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。TextView中设置后无效果。

android:shadowColor

指定文本阴影的颜色，需要与shadowRadius一起使用。参见TextView中此属性的截图。

android:shadowDx

设置阴影横向坐标开始位置。

android:shadowDy

设置阴影纵向坐标开始位置。

android:shadowRadius

设置阴影的半径。设置为0.1就变成字体的颜色了，一般设置为3.0的效果比较好。

android:singleLine

设置单行显示。如果和layout_width一起使用，当文本不能全部显示时，后面用“…”来表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"将只显示“t…”。如果不设置singleLine或者设置为false，文本将自动换行

android:text

设置显示文本.

android:textAppearance

设置文字外观。如“?android:attr/textAppearanceLargeInverse

”这里引用的是系统自带的一个外观，？表示系统是否有这种外观，否则使用默认的外观。可设置的值如下：textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse

android:textColor

设置文本颜色

android:textColorHighlight

被选中文字的底色，默认为蓝色

android:textColorHint

设置提示信息文字的颜色，默认为灰色。与hint一起使用。

android:textColorLink

文字链接的颜色.

android:textScaleX

设置文字缩放，默认为1.0f。参见TextView的截图。

android:textSize

设置文字大小，推荐度量单位”sp”，如”15sp”

android:textStyle

设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个，用“|”隔开

android:typeface

设置文本字体，必须是以下常量值之一：normal 0, sans 1, serif 2, monospace(等宽字体) 3]

android:height

设置文本区域的高度，支持度量单位：px(像素)/dp/sp/in/mm(毫米)

android:maxHeight

设置文本区域的最大高度

android:minHeight

设置文本区域的最小高度

android:width

设置文本区域的宽度，支持度量单位：px(像素)/dp/sp/in/mm(毫米)，与layout_width的区别看这里。

android:maxWidth

设置文本区域的最大宽度

android:minWidth

设置文本区域的最小宽度

android:imeOptions例子:

    <EditText android:id="@+id/txtTest" android:imeOptions="actionGo"

     android:layout_width="100dp" android:layout_height="wrap_content"></EditText>

((EditText)findViewById(R.id.txtTest)).setOnEditorActionListener(new TextView.OnEditorActionListener() {

           @Override

           public boolean onEditorAction(TextView v, int actionId,

                  KeyEvent event) {

              if (actionId == EditorInfo.IME_ACTION_GO) {

                  Toast.makeText(TestActivity.this, "你点了Go!", Toast.LENGTH_SHORT).show();

              }

              return false;

           }

});


Filter

译者署名：henly.zhang

译者链接：lovecoool@gmail.com

翻译时间：2010-11-07

版本：Android 2.2 r1

结构

继承关系

public abstract class Filter extends Object

java.lang.Object

android.widget.Filter

类概述

过滤器通过过滤模式来约束数据，通常由实现了Filterable接口的子类来生成。

过滤操作是通过调用 filter(CharSequence) 或者 filter(CharSequence, android.widget.Filter.FilterListener)这些异步方法来完成的。以上方法一旦被调用，过滤请求就会被递交到请求队列中等待处理，同时该操作会取消那些之前递交的但是还没有被处理的请求。

构造函数

public Filter ()

创建一个新的异步过滤器。

公共方法

public CharSequence convertResultToString (Object resultValue)

将受过滤的集合对象转换成CharSequence文本。所有继承了Filter的子类应该重写该方法。该方法的默认实现：如果参数为null则返回空字符串或者返回参数的字符串形式.

参数

resultValue 转换成CharSequence文本的对象

返回值

CharSequence 文本

public final void filter(CharSequence constraint, Filter.FilterListener listener)

启动一个异步的过滤操作。对该方法的调用会取消之前队列中等待处理的过滤请求并且递交新的过滤请求等待执行。完成过滤操作之后，通知监听器。

参数

constraint 过滤数据的约束条件

listener 监听过滤操作完成之后发出的通知

参见

filter(CharSequence)

performFiltering(CharSequence)

publishResults(CharSequence, android.widget.Filter.FilterResults)

public final void filter(CharSequence constraint)

启动一个异步的过滤操作。对该方法的调用会取消之前队列中等待处理的过滤请求并且递交新的过滤请求等待执行。

参数

constraint 过滤数据的约束条件

参见

filter(CharSequence, android.widget.Filter.FilterListener)

受保护方法

protected abstract Filter.FilterResults performFiltering (CharSequence constraint)

根据约束条件调用一个工作线程过滤数据。子类必须实现该方法来执行过滤操作。过滤结果以Filter.FilterResults的形式返回，然后在UI线程中通过publishResults(CharSequence,android.widget.Filter.FilterResults)方法来发布。

约定：当约束条件为null时，原始数据必须被恢复。

参数

constraint 约束条件

返回值

过滤结果

参见

filter(CharSequence, android.widget.Filter.FilterListener)

publishResults(CharSequence, android.widget.Filter.FilterResults)

Filter.FilterResults

protected abstract void publishResults (CharSequence constraint, Filter.FilterResults results)

通过调用UI线程在用户界面发布过滤结果。子类必须实现该方法来显示performFiltering(CharSequence)的过滤结果。

参数

constraint 约束条件

results 过滤结果

参见

filter(CharSequence, android.widget.Filter.FilterListener)

performFiltering(CharSequence)

Filter.FilterResults

补充

示例代码

未过滤的数据如下图所示：

为过滤器设置约束条件（只显示年龄为22的用户）：

Java：TestFilter.java

public class TestFilter extends ListActivity {

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

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ArrayList<HashMap<String,String>> list = new

ArrayList <HashMap<String, String>>();

HashMap<String, String> map1 = new HashMap<String, String>();

HashMap<String, String> map2 = new HashMap<String, String>();

HashMap<String, String> map3 = new HashMap<String, String>();

map1.put("name", "henly");

map1.put("age", "22");

map2.put("name", "john");

map2.put("age", "23");

map3.put("name", "lilei");

map3.put("age", "22");

list.add(map1);

list.add(map2);

list.add(map3);

SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.user, new String[]{"name","age"}, new int[]{R.id.name,R.id.age});

String str = new String("22");

CharSequence constraint = str.subSequence(0, str.length());

Filter filter = simpleAdapter.getFilter(); //得到一个过滤器

filter.filter(constraint); //为该过滤器设置约束条件

setListAdapter(simpleAdapter);

}

}

XML：main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<LinearLayout android:id="@+id/listlinearlayout"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

<ListView android:id="@id/android:list"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:drawSelectorOnTop="false"

android:scrollbars="vertical" />

</LinearLayout>

</LinearLayout>

XML：user.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingLeft="12dip"

android:paddingRight="12dip"

android:paddingTop="1dip"

android:paddingBottom="1dip"

>

<TextView android:id="@+id/name"

android:layout_width="150dip"

android:layout_height="30dip"

android:textSize="12pt"

/>

<TextView android:id="@+id/age"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="12pt"

/>

</LinearLayout>


Filter.FilterListener

译者署名：henly.zhang

译者链接：lovecoool@gmail.com

版本：Android 2.2 r1

结构

继承关系

public static interface Filter.FilterListener

子类及间接子类

直接子类

AbsListView, AutoCompleteTextView, ExpandableListView, GridView, ListView, MultiAutoCompleteTextView

类概述

监听器用于接收过滤操作完成之后发出的通知。

公共方法

public abstract void onFilterComplete (int count)

过滤操作结束的通知

参数

count 被过滤数据的数量


Filter.FilterResults

译者署名：henly.zhang

译者链接：lovecoool@gmail.com

版本：Android 2.2 r1

结构

继承关系

protected static class Filter.FilterResults

java.lang.Object

android.widget.Filter.FilterResults

类概述

持有过滤操作完成之后的数据。该数据包括过滤操作之后的数据的值以及数量。

字段

public int count

包含过滤操作之后的数据的数量

public Object values

包含过滤操作之后的数据的值

构造函数

public Filter.FilterResults ()

构造一个FilterResults对象。


ExpandableListAdapter

译者署名： 深夜未眠

译者链接：http://chris1012f.javaeye.com/

翻译时间：2011-1-25

版本：Android 3.0 r1

结构

继承关系

public interface ExpandableListAdapter

android.widget.ExpandableListAdapter

子类及间接子类

间接子类 BaseExpandableListAdapter,CursorTreeAdapter,ResourceCursorTreeAdapter, SimpleCursorTreeAdapter, SimpleExpandableListAdapter

类概述

这个适配器在 ExpandableListView 和底层数据之间起到了一个衔接的作用。该接口的实现类提供了访问子元素（以组的形式将它们分类）的数据；同样，也提供了为子元素和组创建相应的视图。

公共方法

public abstract boolean areAllItemsEnabled ()

ExpandableListAdapter里面的所有条目都可用吗？如果是yes，就意味着所有条目可以选择和点击了。

返回值

返回True表示所有条目均可用。

参见

areAllItemsEnabled()

public abstract Cursor getChild (int groupPosition, int childPosition)

获取指定组中的指定子元素数据。

参数

groupPosition 组位置（该组内部含有子元素）

childPosition 子元素位置（相对于其它子元素）

返回值

返回指定子元素数据。

public abstract long getChildId (int groupPosition, int childPosition)

获取指定组中的指定子元素ID，这个ID在组里一定是唯一的。联合ID（参见 getCombinedChildId(long, long)）在所有条目（所有组和所有元素）中也是唯一的。

参数

groupPosition 组位置（该组内部含有子元素）

childPosition 子元素位置（相对于其它子元素）

返回值

子元素关联ID。

public abstract View getChildView (int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)

获取一个视图对象，显示指定组中的指定子元素数据。

参数

groupPosition 组位置（该组内部含有子元素）

childPosition 子元素位置（决定返回哪个视图）

isLastChild 子元素是否处于组中的最后一个

convertView 重用已有的视图(View)对象。注意：在使用前你应该检查一下这个视图对象是否非空并且这个对象的类型是否合适。由此引伸出，如果该对象不能被转换并显示正确的数据，这个方法就会调用 getChildView(int, int, boolean, View, ViewGroup)来创建一个视图(View)对象。

parent 返回的视图(View)对象始终依附于的视图组。

返回值

指定位置上的子元素返回的视图对象

public abstract int getChildrenCount (int groupPosition)

获取指定组中的子元素个数

参数

groupPosition 组位置（决定返回哪个组的子元素个数）

返回值

指定组的子元素个数

public abstract long getCombinedChildId (long groupId, long childId)

从列表所有项(组或子项)中获得一个唯一的子ID号。可折叠列表要求每个元素(组或子项)在所有的子元素和组中有一个唯一的ID。本方法负责根据所给的子ID号和组ID号返回唯一的ID。此外，若hasStableIds()是true，那么必须要返回稳定的ID。

参数

groupId 包含该子元素的组ID

childId 子元素的ID

返回值

列表所有项(组或子项)中唯一的(和可能稳定)的子元素ID号。（译者注：ID理论上是稳定的，不会发生冲突的情况。也就是说，这个列表会有组、子元素，它们的ID都是唯一的。）

public abstract Cursor getGroup (int groupPosition)

获取指定组中的数据

参数

groupPosition 组位置

返回值

返回组中的数据，也就是该组中的子元素数据。

public abstract int getGroupCount ()

获取组的个数

返回值

组的个数

public abstract long getGroupId (int groupPosition)

获取指定组的ID，这个组ID必须是唯一的。联合ID(参见 getCombinedGroupId(long))在所有条目(所有组和所有元素)中也是唯一的。

参数

groupPosition 组位置

返回值

返回组相关ID

public abstract View getGroupView (int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)

获取显示指定组的视图对象。这个方法仅返回关于组的视图对象，要想获取子元素的视图对象，就需要调用 getChildView(int, int, boolean, View, ViewGroup)。

参数

groupPosition 组位置（决定返回哪个视图）

isExpanded 该组是展开状态还是伸缩状态

convertView 重用已有的视图对象。注意：在使用前你应该检查一下这个视图对象是否非空并且这个对象的类型是否合适。由此引伸出，如果该对象不能被转换并显示正确的数据，这个方法就会调用 getGroupView(int, boolean, View, ViewGroup)来创建一个视图(View)对象。

parent 返回的视图对象始终依附于的视图组。

返回值

返回指定组的视图对象

public abstract boolean hasStableIds ()

组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们。

返回值

返回一个Boolean类型的值，如果为TRUE，意味着相同的ID永远引用相同的对象。

public abstract boolean isChildSelectable (int groupPosition, int childPosition)

是否选中指定位置上的子元素。

参数

groupPosition 组位置（该组内部含有这个子元素）

childPosition 子元素位置

返回值

是否选中子元素

public abstract boolean isEmpty ()

返回值

如果当前适配器不包含任何数据则返回True。经常用来决定一个空视图是否应该被显示。一个典型的实现将返回表达式getCount() == 0的结果，但是由于getCount()包含了头部和尾部，适配器可能需要不同的行为。

参见

isEmpty()

public abstract void onGroupCollapsed (int groupPosition)

当组收缩状态的时候此方法被调用。

参数

groupPosition 收缩状态的组索引

public abstract void onGroupExpanded (int groupPosition)

当组展开状态的时候此方法被调用。

参数

groupPosition 展开状态的组位置

public abstract void registerDataSetObserver (DataSetObserver observer)

注册一个观察者(observer)，当此适配器数据修改时即调用此观察者。

参数

observer 当数据修改时通知调用的对象。

public abstract void unregisterDataSetObserver (DataSetObserver observer)

取消先前通过registerDataSetObserver(DataSetObserver)方式注册进该适配器中的观 察者对象。

参数

observer 取消这个观察者的注册

补充

文章精选

android 可展开（收缩）的列表ListView(ExpandableListView)

android CursorAdapter的监听事件


ExpandableListView.OnChildClickListener

译者署名： 情敌贝多芬

译者链接：http://liubey.javaeye.com/

版本：Android 3.0 r1

结构

继承关系

public static interface ExpandableListView.OnChildClickListener

java.lang.Object

android.widget.ExpandableListView.OnChildClickListener

子类及间接子类

间接子类

ExpandableListActivity

类概述

这是一个定义了当可折叠列表(expandable list)里的子元素(child)发生点击事件时调用的回调方法的接口。

公共方法

public abstract boolean onChildClick (ExpandableListView parent, View v, int groupPosition, int childPosition, long id)

用当可折叠列表里的子元素(child)被点击的时候被调用的回调方法。

参数

parent 发生点击动作的ExpandableListView

v 在expandable list/ListView中被点击的视图(View)

groupPosition 包含被点击子元素的组(group)在ExpandableListView中的位置(索引)

childPosition 被点击子元素(child)在组(group)中的位置

id 被点击子元素(child)的行ID(索引)

返回值

当点击事件被处理时返回true


ExpandableListView.OnGroupClickListener

译者署名： 情敌贝多芬

译者链接：http://liubey.javaeye.com/

版本：Android 3.0 r1

结构

继承关系

public static interface ExpandableListView.OnGroupClickListener

java.lang.Object

android.widget.ExpandableListView.OnGroupClickListener

类概述

这是一个定义了当可折叠列表(expandable list)里的组(group)发生点击事件时调用的回调方法的接口。

公共方法

public abstract boolean onGroupClick (ExpandableListView parent, View v, int groupPosition, long id)

用当可折叠列表里的组(group)被点击的时候被调用的回调方法。

参数

parent 发生点击事件的ExpandableListConnector

v 在expandable list/ListView中被点击的视图(View)

groupPosition 被点击的组(group)在ExpandableListConnector中的位置(索引)

id 被点击的组(group)的行ID(索引)

返回值

当点击事件被处理的时候返回true


ExpandableListView.OnGroupCollapseListener

译者署名： 深夜未眠

译者链接：http://chris1012f.javaeye.com/

翻译时间：2011-1-26

版本：Android 3.0 r1

结构

继承关系

public interface ExpandableListView.OnGroupCollapseListener

java.lang.Object

android.widget.ExpandableListView.OnGroupCollapseListener

子类及间接子类

间接子类

ExpandableListActivity

类概述

当收缩某个组时，就会发出通知。

公共方法

public abstract void onGroupCollapse (int groupPosition)

每当收缩当前可伸缩列表中的某个组时，就调用该方法。

参数

groupPosition 组位置，也就是收缩的那个组的位置。


ExpandableListView.OnGroupExpandListener

译者署名： 深夜未眠

译者链接：http://chris1012f.javaeye.com/

翻译时间：2011-1-26

版本：Android 3.0 r1

结构

继承关系

public interface ExpandableListView.OnGroupExpandListener

java.lang.Object

android.widget.ExpandableListView.OnGroupExpandListener

子类及间接子类

间接子类

ExpandableListActivity

类概述

当展开某个组时，就会发出通知。

公共方法

public abstract void onGroupExpand (int groupPosition)

每当展开当前可伸缩列表中的某个组时，就调用该方法。

参数

groupPosition 组位置，也就是展开的那个组的位置。


Filterable

译者署名： 德罗德

译者链接：http://sparkrico.javaeye.com

翻译时间：2010-11-03

版本：Android 2.2 r1

结构

继承关系

public interface Filterable

android.widget.Filterable

子类及间接子类

直接子类

ArrayAdapter<T>, CursorAdapter, CursorTreeAdapter, HeaderViewListAdapter, ResourceCursorAdapter, ResourceCursorTreeAdapter, SimpleAdapter, SimpleCursorAdapter, SimpleCursorTreeAdapter

类概述

定义一个可过滤的行为。一个可过滤的类可以通过一个过滤器筛选它的数据。过滤类通常由适配器（Adapter）实现。

公共方法

public abstract Filter getFilter ()

返回一个可以通过一种过滤模式来约束数据的过滤器。

这个方法通常被Adapter类实现。

返回值

一个用于约束数据的过滤器

补充

文章链接

自动匹配的联系人多选框（Filterable用法）

如何在 ListView 上加上按鍵過濾的功能


Gallery

译者署名： henly.zhang

译者链接：http://www.blogjava.net/zlh320321

版本：Android 2.3 r1

结构

继承关系

public class Gallery extends AbsSpinner

implements GestureDetector.OnGestureListener

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

android.widget.AbsSpinner

android.widget.Gallery

类概述

一个锁定中心条目并且拥有水平滚动列表的视图。

Gallery（画廊）使用 Theme_galleryItemBackground 作为Gallery（画廊）适配器中的各视图的默认参数。如果你没有设置，你就需要调整一些Gallery（画廊）的属性，比如间距。

Gallery（画廊）中的视图应该使用Gallery.LayoutParams作为它们的布局参数类型。

参见Gallery tutorial。

内部类

class Gallery.LayoutParams

Gallery(画廊)扩展了LayoutParams，以此提供可以容纳当前的转换信息和先前的位置转换信息的场所。

XML属性

属性名称

描述

android:animationDuration

设置布局变化时动画的转换所需的时间（毫秒级）。仅在动画开始时计时。该值必须是整数，比如：100。

android:gravity

指定在对象的X和Y轴上如何放置内容。指定一下常量中的一个或多个（使用 “|”分割）

Constant | Value | Description
top | 0x30 | 紧靠容器顶端，不改变其大小
bottom | 0x50 | 紧靠容器底部，不改变其大小
left | 0x03 | 紧靠容器左侧，不改变其大小
right | 0x05 | 紧靠容器右侧，不改变其大小
center_vertical | 0x10 | 垂直居中，不改变其大小
fill_vertical | 0x70 | 垂直方向上拉伸至充满容器
center_horizontal | 0x01 | 水平居中，不改变其大小
Fill_horizontal | 0x07 | 水平方向上拉伸使其充满容器
center | 0x11 | 居中对齐，不改变其大小
fill | 0x77 | 在水平和垂直方向上拉伸，使其充满容器
clip_vertical | 0x80 | 垂直剪切（当对象边缘超出容器的时候，将上下边缘超出的部分剪切掉）
clip_horizontal | 0x08 | 水平剪切（当对象边缘超出容器的时候，将左右边缘超出的部分剪切掉）

android:spacing

（译者注:设置图片之间的间距）

android:unselectedAlpha

设置未选中的条目的透明度(Alpha)。该值必须是float类型，比如：“1.2”。

公共方法

public boolean dispatchKeyEvent (KeyEvent event)

在焦点路径上分发按钮事件到下一个视图。该路径从视图树的顶端遍历到当前获得焦点的视图。如果当前视图已获得焦点，就分发给自身。否则，就分发到下一个节点的焦点路径上。该方法监听任何按钮事件。

参数

event 被分发的按钮事件

返回值

boolean 时间被处理返回true，否则false

public void dispatchSetSelected (boolean selected)

分发setSelected给视图的子类。

参数

selected 新选中的状态

public ViewGroup.LayoutParams generateLayoutParams (AttributeSet attrs)

返回一个新的已设置属性集合的布局参数。

参数

attrs 用于生成布局参数的属性集合

返回值

一个ViewGroup.LayoutParams实例或者它的子类

public boolean onDown (MotionEvent e)

当轻击和按下手势事件发生时通知该方法。任何按下事件都会直接触发该方法。所有其他的事件都要先于该方法。

参数

e 按下动作事件

public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

当初始化的按下动作事件和松开动作事件匹配时通知fling（译者注：快滑，用户按下触摸屏、快速移动后松开）事件。该动作的速度通过计算X和Y轴上每秒移动多少像素得来。

参数

e1 导致开始fling的按下动作事件。

e2 触发当前onFling方法的移动动作事件

velocityX 测量fling沿X轴上的速度，像素/每秒

velocityY 测量fling沿Y轴上的速度，像素/每秒

返回值

如果该事件被消耗返回true，否则false。

public boolean onKeyDown (int keyCode, KeyEvent event)

处理左，右和点击事件

参数

keyCode 代表按下按钮的按键码，来自 KeyEvent。

event 定义按钮动作的KeyEvent对象。

返回值

如果已经处理了按钮事件，则返回true。如果你想让下一个事件接收者处理，就返回false

参见

onKeyDown(int, KeyEvent)

public boolean onKeyUp (int keyCode, KeyEvent event)

KeyEvent.Callback.onKeyMultiple()方法的默认实现：当 KEYCODE_DPAD_CENTER 或者 KEYCODE_ENTER 被释放时，执行点击视图操作。

参数

keyCode 代表按下按钮的按键码，来自 KeyEvent。

event 定义按钮动作的KeyEvent对象。

返回值

如果已经处理了按钮事件，则返回true。如果你想让下一个事件接收者处理，就返回false

public void onLongPress (MotionEvent e)

MotionEvent初始化并按下触发长按并通知本方法。

参数

e 导致开始长按的初始按下动作事件。

public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)

当初始按下动作事件和当前移动动作事件导致滚动时通知本方法。为了方便提供了X和Y轴上的距离。

监听屏幕滚动事件。为了方便提供了X和Y轴上的距离。

参数

e1 导致滚动开始按下的动作事件。

e2 触发当前onScroll方法的移动动作事件。

distanceX 距离是自上一次调用onScroll方法在X轴上的距离。不是e1 和e2之间的距离。

distanceY 距离是自上一次调用onScroll方法在Y轴上的距离。不是e1 和e2之间的距离。

返回值

如果该事件被消耗返回true否则false

public void onShowPress (MotionEvent e)

用户已经执行按下动作还没有执行移动或者弹起动作。该事件常通过高亮一个元素来向用户提供一个视觉反馈即用户的操作已经被辨识了。

参数

e 按下动作事件

public boolean onSingleTapUp (MotionEvent e)

在轻击动作和up动作事件触发时通知本方法。（译者注：点击屏幕上的某项的执行流程 有两种情况，一种是时间很短，一种时间稍长：时间很短：onDown--->onSingleTapUp--->onSingleTapConfirmed，见这里1，这里2。）

参数

e 完成开始轻击的up动作事件

返回值

如果该事件被消耗返回true否则false

public boolean onTouchEvent (MotionEvent event)

实现该方法来处理触摸屏动作事件

参数

event 动作事件

返回值

如果该事件被消耗返回true否则false

public void setAnimationDuration (int animationDurationMillis)

设置当子视图改变位置时动画转换时间。仅限于动画开始时生效。

参数

animationDurationMillis 动画转换时间（毫秒级）

public void setCallbackDuringFling (boolean shouldCallback)

当flinged时是否回调每一个 getOnItemSelectedListener()。如果设为false，只回调最终选中的项。如果为true，则所有的项都会回调。

参数

shouldCallback 设置抛滑的过程中是否回调

public void setGravity (int gravity)

描述子视图的对齐方式。

public void setSpacing (int spacing)

设置Gallery中项的间距

参数

spacing Gallery中项的间距，以像素为单位

public void setUnselectedAlpha (float unselectedAlpha)

设置Gallery中未选中项的透明度(alpha)值。

参数

unselectedAlpha 未选中项的透明度(alpha)值

public boolean showContextMenu ()

显示该视图上下文菜单。

返回值

上下文菜单是否显示。

public boolean showContextMenuForChild (View originalView)

为指定的视图或者其父类显示上下文菜单。

大部分情况下，子类不需要重写该方法。但是，如果子类被直接添加到窗口管理器（例如：addView(View.android.view.ViewGroup.LayoutParams)），此时就需要重写来显示上下文菜单

参数

originalView 上下文菜单初次调用的源视图

返回值

如果上下文菜单被显示了 则返回true。

受保护方法

protected int computeHorizontalScrollExtent ()

在水平范围内计算滚动条滑块的滚动范围。该值用来计算滚动条滑块的长度。

该范围可以使用任意的单位但是必须跟 computeHorizontalScrollRange()和 computeHorizontalScrollOffset()的单位保持一致。

默认范围是视图的宽度。

返回值

滚动条滑块的水平滚动范围

protected int computeHorizontalScrollOffset ()

在水平范围内计算滚动条滑块的偏移量。该值用来计算水平滑块的位置。

该范围可以使用任意的单位但是必须跟 computeHorizontalScrollRange()和 computeHorizontalScrollExtent()的单位保持一致。

默认偏移量是视图的偏移量。

返回值

滚动条滑块的水平偏移量。

protected int computeHorizontalScrollRange ()

计算滚动条水平方向上的滚动范围。

该范围可以使用任意的单位但是必须跟 computeHorizontalScrollExtent()和 computeHorizontalScrollOffset()的单位保持一致。

返回值

水平滚动条代表的滑动总范围。

protected void dispatchSetPressed (boolean pressed)

分发 setPressed到View的子类。

参数

pressed 新按下的状态

protected ViewGroup.LayoutParams generateDefaultLayoutParams ()

返回默认的布局参数。当View作为参数传递给 addView(View)而没有布局参数时就会请求这些参数。如果返回null，则addView会抛出异常。

返回值

默认的布局参数或null

protected ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)

返回一组合法的受支持的布局参数。当把ViewGroup传递给View而该View的布局参数并没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)的测试时，就会调用该方法。该方法应该返回一组适合该ViewGroup的新的布局参数，该过程可能需要从指定的一组布局参数中复制相关的属性。

参数

p 被转换成适合该ViewGroup的一组参数。

返回值

返回一个ViewGroup.LayoutParams的实例或者一个它的子类。

protected int getChildDrawingOrder (int childCount, int i)

返回迭代的绘制子类索引。如果你想改变子类的绘制顺序就要重写该方法。默认返回 i 值。

提示：为了能够调用该方法，你必须首先调用 setChildrenDrawingOrderEnabled(boolean)来允许子类排序。

参数

childCount 子类个数

i 当前迭代顺序

返回值

绘制该迭代子类的索引

protected boolean getChildStaticTransformation (View child, Transformation t)

（译者注：setStaticTransformationsEnabled这个属性设成true的时候每次viewGroup(看Gallery的源码就可以看到它是从ViewGroup间接继承过来的)在重新画它的child的时候都会促发getChildStaticTransformation这个函数。这里1、这里2）

protected ContextMenu.ContextMenuInfo getContextMenuInfo ()

Views如果有额外的信息跟上下文菜单有联系的话就需要实现该方法。返回的结果被用作回调方法onCreateContextMenu(ContextMenu, View, ContextMenuInfo)的参数。

返回值

显示上下文菜单的条目的额外信息。这些信息将会改变View不同的子类

protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect)

当该视图的焦点状态发生改变时将会调用视图系统。当导向的方向触发焦点事件时，方向和先前获得焦点的矩形提供焦点事件的来源。当用户重写该方法，必须调用父类方法来触发标准的焦点处理事件。

参数

gainFocus 如果View获得焦点为true，否则false

direction 当调用requestFocus()方法来给该视图焦点时焦点的移动方向。该值:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT 或 FOCUS_RIGHT。该参数不常用，通常使用它的默认值。

previouslyFocusedRect 该视图坐标系统中先前获得焦点的视图的矩形。如果适用，这将获得焦点事件来源的更细致的信息（除了方向以外）。否则为null。

protected void onLayout (boolean changed, int l, int t, int r, int b)

当视图为每一个子类分配大小和位置时从布局中调用该方法。有子类的派生类应该重写该方法在子类中调用布局。

参数

changed 该视图新的大小和位置。

l 相对父容器的左侧位置

t 相对父容器的顶部位置

r 相对父容器的右侧位置

b 相对父容器的底部位置

补充

文章精选

Android开发——使用Gallery实现“多级联动”

android 图片拖动效果(Gallery)

示例代码

MyGallery.java

public class MyGallery extends Activity {

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

  private Gallery gallery;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        gallery = (Gallery)findViewById(R.id.gallery);

        gallery.setAdapter(new ImageAdapter(this));//设置图片适配器

        //设置监听器

        gallery.setOnItemClickListener(new OnItemClickListener() {

         @Override

         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  long arg3) {

            Toast.makeText(MyGallery.this, "点击了第"+arg2+"张图片", Toast.LENGTH_LONG).show();

         }

     });

    }

}

class ImageAdapter extends BaseAdapter{

  private Context context;

  //图片源数组

  private Integer[] imageInteger={

         R.drawable.gallery_photo_1,

         R.drawable.gallery_photo_2,

         R.drawable.gallery_photo_3,

         R.drawable.gallery_photo_4,

         R.drawable.gallery_photo_5,

         R.drawable.gallery_photo_6,

         R.drawable.gallery_photo_7,

         R.drawable.gallery_photo_8

  };

  public ImageAdapter(Context c){

     context = c;

  }

  @Override

  public int getCount() {

     return imageInteger.length;

  }

  @Override

  public Object getItem(int position) {

     return position;

  }

  @Override

  public long getItemId(int position) {

     // TODO Auto-generated method stub

     return position;

  }

  @Override

  public View getView(int position, View convertView, ViewGroup parent) {

     ImageView imageView = new ImageView(context);

     imageView.setImageResource(imageInteger[position]);

     imageView.setScaleType(ImageView.ScaleType.FIT_XY);

     imageView.setLayoutParams(new Gallery.LayoutParams(136, 88));

     return imageView;

  }}

       main.xml

           <?xml version="1.0" encoding="utf-8"?>

<Gallery xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gallery"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:gravity="center_vertical"

        android:background="?android:galleryItemBackground"

        />


Gallery.LayoutParams

译者署名： 我是谁

译者链接：http://blog.sina.com.cn/u/1744311365

翻译时间：2010.11.4

版本：Android 2.3 r1

结构

继承关系

public static class Gallery.LayoutParams extends ViewGroup.LayoutParams

java.lang.Object

android.view. ViewGroup.LayoutParams

android.widget.Gallery.LayoutParams

类概述

Gallery(画廊)扩展了LayoutParams，以此提供可以容纳当前的转换信息和先前的位置转换信息的场所。

补充

示例代码

  1. public View getView(int position, View convertView, ViewGroup parent)
  2. {
  3. ImageView imageView = new ImageView(mContext);
  4. // 设置当前图像的图像（position为当前图像列表的位置）
  5. imageView.setImageResource(resIds[position]);
  6. imageView.setScaleType(ImageView.ScaleType.FIT_XY);
  7. imageView.setLayoutParams(new Gallery.LayoutParams(163, 106));
  8. // 设置Gallery组件的背景风格
  9. imageView.setBackgroundResource(mGalleryItemBackground);
  10. return imageView;
  11. }


GridView

译者署名：0_1

版本：Android 2.2 r1

public final class GridView extends AbsListView

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

android.widget.AbsListView

android.widget.GridView

类概述

一个在平面上可显示多个条目的可滚动的视图组件，该组件中的条目通过一个ListAdapter和该组件进行关联。比如android手机中显示的应用：

比如实现九宫格图，用GridView是首选，也是最简单的。

构造函数

public GridView (Context context)

创建一个默认属性的GridView实例

public GridView (Context context, AttributeSet attrs)

创建一个带有attrs属性的GridView实例

public GridView (Context context, AttributeSet attrs, int defStyle)

创建一个带有attrs属性，并且指定其默认样式的GridView实例

XML属性

属性名称 | 描述
android:columnWidth | 设置列的宽度。关联的方法为：setColumnWidth(int)
android:gravity | 设置此组件中的内容在组件中的位置。可选的值有：top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical 可以多选，用“|”分开。关联方法：setGravity (int gravity)
android:horizontalSpacing | 两列之间的间距。关联方法：setHorizontalSpacing(int)
android:numColumns | 列数。关联方法：setNumColumns(int)
android:stretchMode | 缩放模式。关联方法：setStretchMode(int)
android:verticalSpacing | 两行之间的间距。关联方法：setVerticalSpacing(int)

公共方法

public ListAdapter getAdapter ()

获得与此组件相关的适配器..

返回值

ListAdapter适配器实例

public int getStretchMode ()

获得GridView的缩放模式..

public boolean onKeyDown (int keyCode, KeyEvent event)

默认由KeyEvent.Callback.onKeyMultiple（）实现，如果视图是可用的并且是可点击的，那么传入KEYCODE_DPAD_CENTER或KEYCODE_ENTER值是执行的是按下视图操作。

参数

keyCode 一个表示按下操作的键值.

event 表示按钮事件的对象.

返回值

如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件，则返回true,否则返回false。

public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)

默认由KeyEvent.Callback.onKeyMultiple()实现，总是返回false（不处理此事件）。

参数

keyCode 键值.

repeatCount 该动作发生的次数.

event 事件对象.

返回值

如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件，则返回true,否则返回false。

public boolean onKeyUp (int keyCode, KeyEvent event)

默认由KeyEvent.Callback.onKeyMultiple（）实现，如果视图是可用的并且是可点击的，那么传入KEYCODE_DPAD_CENTER或KEYCODE_ENTER值是执行的是点击视图操作。

参数

keyCode 键值.

event 事件对象.

返回值

如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件，则返回true,否则返回false。

public void setAdapter (ListAdapter adapter)

设置GridView的数据。

参数

adapter 为grid提供数据的适配器

public void setColumnWidth (int columnWidth)

设置GridView的列宽.

参数

columnWidth 列的宽度，以像素为单位

public void setGravity (int gravity)

设置控件内容的位置，默认值为：Gravity.LEFT.

参数

gravity 位置值

public void setHorizontalSpacing (int horizontalSpacing)

设置列间距.

参数

horizontalSpacing 列间距值

public void setNumColumns (int numColumns)

设置grid的列数

参数

numColumns 列数值.

public void setSelection (int position)

设置选中的条目.

参数

position 数据条目在列表中的索引值（从0开始），如果在可触摸的模式下，在该索引值下的条目将不会被选中，但是该索引值仍然指向该条目。

public void setStretchMode (int stretchMode)

设置grid中的条目以什么缩放模式去填充空间。.

参数

stretchMode 可选值：NO_STRETCH，STRETCH_SPACING，STRETCH_SPACING_UNIFORM，或STRETCH_COLUMN_WIDTH

public void setVerticalSpacing (int verticalSpacing)

设置行间距.

参数

verticalSpacing 间距值，以像素为单位..

示例：

下面给出一个小例子，先看效果：

代码：

1、 GridView01.java

public class GridView01 extends Activity {

   private GridView gridview;

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      // TODO Auto-generated method stub

      super.onCreate(savedInstanceState);

      setContentView(R.layout.gridview);

//准备要添加的数据条目

      List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();

      for (int i = 0; i < 10; i++) {

        Map<String, Object> item = new HashMap<String, Object>();

        item.put("imageItem", R.drawable.icon);

        item.put("textItem", "text" + i);

        items.add(item);

      }

//实例化一个适配器

      SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.grid_item, new String[]{"imageItem", "textItem"}, new int[]{R.id.image_item, R.id.text_item});

      //获得GridView实例

      gridview = (GridView)findViewById(R.id.mygridview);

      //gridview.setNumColumns(3);//可以在xml中设置

      //gridview.setGravity(Gravity.CENTER);//同上

//将GridView和数据适配器关联

      gridview.setAdapter(adapter);

   }

2、 gridview.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi"

   android:layout_width="wrap_content"

   android:layout_height="wrap_content">

   <GridView android:id="@+id/mygridview"

      android:numColumns="3"

      android:gravity="center_horizontal"

      android:layout_width="wrap_content"

      android:layout_height="wrap_content">

   </GridView>

</LinearLayout>

3、 grid_item.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout android:id="@+id/RelativeLayout01"

   android:layout_width="fill_parent" android:layout_height="fill_parent"

   xmlns:android="http://schemas.android.com/apk/res/android">

   <ImageView android:id="@+id/image_item"

      android:layout_width="wrap_content"

      android:layout_height="wrap_content">

   </ImageView>

   <TextView android:id="@+id/text_item"

      android:layout_below="@+id/image_item"

      android:layout_height="wrap_content"

      android:layout_width="wrap_content">

   </TextView>

</RelativeLayout>


GridLayout

译者署名：獨鍆躌踄

译者链接：http://www.cnblogs.com/mxgsa/

版本：Android 4.0 r1

结构

继承关系

public class GridLayout extends ViewGroup

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.GridLayout

类概述

（摘自这里。）

该布局把子视图存放在一个矩形网格中。

网格是由被无数虚细线分割成多个单元格的可视区域组成。贯穿整个API的网格线通过网格索引数来指定。一个N列的网格在运行中包含0到N的 N+1个索引，不管怎么配置GridLayout 网格索引0是固定网格容器的前边距，索引N是固定容器的后边距（考虑后填充）。

行和列的规格

在rowSpec和columnSpec布局参数的定义后，子视图占用一个或者多个连续单元格，每个规范是定义被占用的行或列的设置和子视图在单元格是如何对齐。尽管各个单元格在一个GridLayout中不重叠，GridLayout并没有阻止子视图被定义为占据相同的单元格或者单元格组。然而在这种情况下，也不能保证子视图在布局操作完成后自己不会重叠。

默认单元格分配

如果一个子视图没有指定占据的行和列索引，GridLayout会自动指定单元格位置，包括：方向，行数和列数的属性。

空间(Place)

子视图之间的空间可能会通过使用专用的空间视图的实例，或通过设置leftMargin，topMargin，rightMargin和bottomMargin布局参数后指定。当设置为useDefaultMargins属性，根据当前平台的用户界面风格，子视图周围的默认边距将自动分配。每个被定义的边距可通过分配到相应的布局参数来独立覆盖。默认值通常在不同组成部分会产生一个合理的间距，但在不同平台版本之间可能会改变。

多余的空间分布

GridLayout的多余的空间分布是基于优先级，而不是根据比例。

一个子视图的的伸展程度通过其行和列的组的对其属性推算（这是典型的设置子视图的布局参数gravity属性）。如果对齐是沿着给定的轴定义，那么该组件在这个方向具有灵活性。如果没有对齐，相反组件会缺乏灵活性。

多个组件在同一行或列组被认为平行的。如果组中所有在内的组件是灵活的，那么这个小组是灵活的。位置在一个共同的边界两侧的行和列组，反而认为采取同一系列。如果复合组的一个元素是灵活的，则这个复合组是灵活的。

为了使一列伸展，确保所有的组件，它里面定义一个的gravity属性。为了防止从列伸展，确保列中的组成部分之一没有定义的gravity属性。

灵活性的原则并不能完全的消除歧义，推荐GridLayout中的算法更接近其右侧和底边的行和列。

局限性

GridLayout的不提供支持空间(weight)分配的原则，空间分配界定。在一般情况下，可以配置一个GridLayout多余的空间分布在多个行或列之间的不相同的比例。

一些常见的适用情况，如下：将等量的周围空间中的一个组成部分单元格组;使用居中对齐（或gravity属性）。对于完全控制对或列中多余的空间分布;使用的LinearLayout子视图约束相关的单元格组的组成部分。当使用这些技术，记住，单元格组可能定义重叠。

为GridLayout的使用布局参数的完整描述GridLayout.LayoutParams。

XML属性

属性名称

描述

android:alignmentMode

当设置alignMargins,使视图的外边界之间进行校准，定义其边距，当设置alignBounds，使视图的边界之间进行校准，默认设置alignMargins。

常量 | 值 | 备注
alignBounds | 0 | 对齐子视图边界。
alignMargins | 1 | 对齐子视图边距。

android:columnCount

自动定位子视图时创建的最大列数

android:columnOrderPreserved

当设置为true，使列边界显示的顺序和列索引的顺序相同。默认是true。

android:orientation

Orientation属性在布局时候不被使用，它仅当子视图布局参数没有指定的时候分配行和列，GridLayout在这种情况下和LinearLayout使用方法一样，根据标志的值将所有组件放在单个行或者放在当个列中。在水平情况下，当一行的所有列都填充满时，columnCount属性额外提供创建新行。同样在垂直情况下，rowCount属性有相同的作用，默认是水平的。

常量 | 值 | 备注
horizontal | 0 | 定义水平部件。
vertical | 1 | 定义垂直部件。

android:rowCount

自动定位子视图时创建的最大行数

android:rowOrderPreserved

当设置为true，使行边界显示的顺序和行索引的顺序相同。默认是true。

android:useDefaultMargins

当设置ture，当没有指定视图的布局参数时，告诉GridLayout使用默认的边距。默认值是false。

常量

类型 | 属性名称 | 描述
int | ALIGN_BOUNDS | 这是alignmentMode的常量，当alignmentMode设置成ALIGN_BOUNDS，每个组件之间的原始视图边界边距对齐：即组件的区域通过下面分隔：顶部，左侧，底部和右侧的属性。默认值：0
int | ALIGN_MARGINS | 这是alignmentMode的常量。当alignmentMode设置ALIGN_MARGINS，每个视图的边界向外延伸，根据他们的边距，产生的矩形边距对齐。默认值：1
int | HORIZONTAL | 水平方向。默认值：0
int | UNDEFINED | 常数用于表示一个不确定的值。该字段可以使用这个值来表示他们的值观尚未确定。同样的方法可以返回这个值，表明没有能实现返回的合适值，该常数的值（目前MIN_VALUE）是为了避免可能不知道其标志的有效值之间的混淆。
int | VERTICAL | 垂直方向。默认值：1

字段

public static final GridLayout.Alignment
属性名称 | 描述
BASELINE | 表示一个视图应该和在同一单元格组的其他视图基线对齐，这个常量仅用做rowSpecs对齐
BOTTOM | 表示一个视图应该和在同一单元格组的其他视图底部边距对齐。
CENTER | 表示一个视图应该和在同一单元格组的其他视图居中对齐，此常数可用于rowSpecs和columnSpecs。
FILL | 表示视图应该扩大以填充其单元格组。此常数可用于rowSpecs和columnSpecs。
LEFT | 表示一个视图应该和在同一单元格组的其他视图左边距对齐。
RIGHTT | 表示一个视图应该和在同一单元格组的其他视图右边距对齐。
TOP | 表示一个视图应该和在同一单元格组的其他视图上边距对齐。

公共方法

public GridLayout.LayoutParams generateLayoutParams (AttributeSet attrs)

在提供的属性集基础上返回一个新的布局参数设置。

参数

attrs 创建布局参数的属性

返回值

ViewGroup.LayoutParams实例或者他的派生实例

public int getAlignmentMode ()

返回对齐方式.

相关XML属性

android:alignmentMode

返回值

对齐方式; ALIGN_BOUNDS 或者 ALIGN_MARGINS

参见

ALIGN_BOUNDS

ALIGN_MARGINS

setAlignmentMode(int)

public int getColumnCount ()

返回当前的列数。通过 setColumnCount（int）方法最后一次设置的值，如果没有这样的值被设置，返回在columnSpec定义中的每一个上限的最大值。

相关XML属性

android:columnCount

返回值

当前的列数

参见

setColumnCount(int)

columnSpec

public int getOrientation ()

返回当前方向。

相关XML属性

android:orientation

返回值

HORIZONTAL 或者 VERTICAL

参见

setOrientation(int)

public int getRowCount ()

返回当前的行数。通过 setRowCount（int）方法最后一次设置的值，如果没有这样的值被设置，返回在rowSpec定义中的每一个上限的最大值。

相关XML

android:rowCount

返回值

返回当前的行数。

参见

setRowCount(int)

rowSpec

public boolean getUseDefaultMargins ()

返回是否GridLayout分配时候，没有相应布局参数定义的默认边距。

相关XML属性

android:useDefaultMargins

返回值

如果分配默认的边距返回ture

参见

setUseDefaultMargins(boolean)

public boolean isColumnOrderPreserved ()

返回是否通过表格索引顺序定制列边界。

相关XML属性

android:columnOrderPreserved

返回值

如果列边界按照索引的顺序显示返回ture，否则返回false

参见

setColumnOrderPreserved(boolean)

public boolean isRowOrderPreserved ()

返回是否通过表格索引顺序定制行边界

相关XML属性

android:rowOrderPreserved

返回值

如果行边界按照索引顺序显示返回ture，否则返回false

参见

setRowOrderPreserved(boolean)

public void requestLayout ()

当无效的视图布局发生变化时候调用它，将通过视图树进行布局传递。

public void setAlignmentMode (int alignmentMode)

设置该容器中所有子视图之间的对齐方式

默认的值是ALIGN_MARGINS.

相关XML属性

android:alignmentMode

参数

alignmentMode ALIGN_BOUNDS 或者 ALIGN_MARGINS

参见

ALIGN_BOUNDS

ALIGN_MARGINS

getAlignmentMode()

public void setColumnCount (int columnCount)

列数是仅用于当没有一个布局参数指定时候，生成默认的列/行索引。

相关XML属性

android:columnCount

参数

columnCount 列的数量.

参见

getColumnCount()

columnSpec

public void setColumnOrderPreserved (boolean columnOrderPreserved)

当此属性为true，GridLayout的是被迫使他们相关的网格指数在视图中以升序顺序放置列的边界。

当此属性是false，GridLayout是放置在任何最适合给定的约束水平列边界的顺序。

此属性的默认值是true。

相关XML属性

android:columnOrderPreserved

参数

columnOrderPreserved 用ture是被迫使他们相关的网格指数在视图中以升序顺序放置列的边界。

参见

isColumnOrderPreserved()

public void setOrientation (int orientation)

Orientation是仅用于当没有一个布局参数指定时候，生成默认的列/行索引

默认的属性值是HORIZONTAL

相关XML属性

android:orientation

参数

orientation HORIZONTAL 或者 VERTICAL

参见

getOrientation()

public void setRowCount (int rowCount)

RowCount是仅用于当没有一个布局参数指定时候，生成默认的列/行索引

相关XML属性

android:rowCount

参数

rowCount 行数

参见

getRowCount()

rowSpec

public void setRowOrderPreserved (boolean rowOrderPreserved)

当此属性为true，GridLayout是强制他们相关的网格指数在视图中以升序顺序放置行的边界。

当此属性是false，GridLayout是放置在任何最适合给定的约束水平行边界的顺序。

此属性的默认值是true。

相关XML属性

android:rowOrderPreserved

参数

rowOrderPreserved 用ture是强制他们相关的网格指数在视图中以升序顺序放置列的边界。

参见

isRowOrderPreserved ()

public void setUseDefaultMargins (boolean useDefaultMargins)

当设置为true， GridLayout根据子视图的的视觉特征分配在子视图周围的默认边距，每个定义的边距，可独立分配到相应的布局参数覆盖。

如果为false，所有边距的默认值是零。

当设置为true时，考虑设置的alignmentMode属性值ALIGN_BOUNDS。

此属性的默认值是false。

相关XML属性

android:useDefaultMargins

参数

useDefaultMargins 使用true分配默认的边距

参见

getUseDefaultMargins()

setAlignmentMode(int)

public static GridLayout.Spec spec (int start, GridLayout.Alignment alignment)

返回一个Spec，其中：

l spec.span = [start, start + 1]

l spec.alignment = alignment

参数

start the 开始索引

alignment 对齐方式

public static GridLayout.Spec spec (int start, int size)

返回一个Spec，其中：

l spec.span = [start, start + size]

参数

start 开始位置

size 大小

public static GridLayout.Spec spec (int start, int size, GridLayout.Alignment alignment)

返回一个Spec，其中：

l spec.span = [start, start + size]

l spec.alignment = alignment

参数

start 开始位置

size 大小

alignment 对齐方式

public static GridLayout.Spec spec (int start)

返回一个Spec，其中：

l spec.span = [start, start + 1]

参数

start 开始索引

保护方法

protected GridLayout.LayoutParams generateDefaultLayoutParams ()

返回一组默认布局参数。没有设置布局参数执行addview（View）时，这些参数被请求时返回null，并抛出一个异常。

返回值

一组默认布局参数或者null

protected GridLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)

返回一组合法的受支持的布局参数。当一个ViewGroup传递一个布局参数没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)检测的视图时，此方法被调用。此方法会返回一组新的适合当前ViewGroup的布局参数，可能从指定的一组布局参数中复制适当的属性。

参数

p 被转换成一组适合当前 ViewGroup的布局参数.

返回值

一个ViewGroup.LayoutParams的实例或者其中的一个子节点

补充

文章精选

Android 4.0新增Space及GridLayout初谈


GridLayout.Alignment

译者署名：獨鍆躌踄

译者链接：http://www.cnblogs.com/mxgsa/

版本：Android 4.0 r1

结构

继承关系

public static abstract class GridLayout.Alignment extends Object

java.lang.Object

android.widget.GridLayout.Alignment

类概述

对齐指定视图应放置在一个单元格组的某个位置以及尺寸大小。

GridLayout.LayoutParams类包含一个rowSpec和columnSpec，其中每个都包含对齐。整体单元格组由这两种沿每个轴单独对齐的方式指定。

GridLayout类定义使用最常见的对齐方式，在总体布局上，左，下，右，居中，基线，填充。


RadioGroup

译者署名：首当其冲

版本：Android 2.2 r1

结构

继承关系

public class RadioGroup extends LinearLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.LinearLayout

android.widget.RadioGroup

类概述

这个类用于创建一组按钮之间相互排斥的单选按钮组，在同一个单选按钮组中勾选一个按钮则会取消该组中其它已经勾选的按钮的选中状态。

初始状态下，所有的单选按钮都未勾选，虽然不能取消一个特定的单选按钮的勾选状态，但可以通过单选按钮组去消除它的勾选状态，根据XML布局文件中的单选按钮的唯一ID去标识指定的选择信息。

内部类

Class RadioGroup.LayoutParams

当WRAP_CONTENT（包裹内容）的子组件在XML文件中没有指定相应的宽度和高度的话，可以使用的布局参数默认设置的默认设置

Interface RadioGroup.OnCheckedChangeListener

当单选按钮组中的单选按钮的勾选状态发生改变时，所要调用的回调函数的接口类

公共方法

public void addView (View child, int index, ViewGroup.LayoutParams params)

使用指定的布局参数添加一个子视图

参数

child 所要添加的子视图

index 将要添加子视图的位置

params 所要添加的子视图的布局参数

public void check (int id)

如果传递-1作为指定的选择标识符来清除单选按钮组的勾选状态，相当于调用clearCheck()操作

参数

id 该组中所要勾选的单选按钮的唯一标识符（id）

参见

getCheckedRadioButtonId()

clearCheck()

public void clearCheck ()

清除当前的选择状态，当选择状态被清除，则单选按钮组里面的所有单选按钮将取消勾选状态，getCheckedRadioButtonId()将返回null

参见

check(int)

getCheckedRadioButtonId()

public RadioGroup.LayoutParams generateLayoutParams (AttributeSet attrs)

基于提供的属性集合返回一个新的布局参数集合

参数

attrs 用于生成布局参数的属性

返回值

返回一个ViewGroup.LayoutParams或其子类的实例

public int getCheckedRadioButtonId ()

返回该单选按钮组中所选择的单选按钮的标识ID，如果没有勾选则返回-1

返回值

返回该单选按钮组中所选择的单选按钮的标识ID

参见

check(int)

clearCheck()

public void setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener listener)

注册一个当该单选按钮组中的单选按钮勾选状态发生改变时所要调用的回调函数

参数

listener 当单选按钮勾选状态发生改变时所要调用的回调函数

public void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)

注册一个当子内容添加到该视图或者从该视图中移除时所要调用的回调函数

参数

listener 当层次结构发生改变时所要调用的回调函数

受保护方法

protected LinearLayout.LayoutParams generateDefaultLayoutParams ()

当布局为垂直方向时，将返回一个宽度为“填充父元素”(MATCH_PARENT)，高度为“包裹内容”的布局参数集合，如果为水平方向时，将返回宽度为“包裹内容”，高度为“填充父元素”的布局参数集合

(match_parent即为fill_parent,public static final int FILL_PARENT/MATCH_PARENT = -1 )

返回值

返回一个默认的布局参数集合

protected void onFinishInflate ()

当视图从XML中加载，且相应的子视图被添加之后，调用该方法，

即使子类重写了该方法，应该确保去调用父类的方法（通常放在方法在第一句），这样才能完成相应的调用参数

返回值

返回一个默认的布局参数集合

补充

文章链接

Android基础教程(七)之----单选项框RadioGroup的综合应用

Android UI设计 RadioGroup单选按钮用法

Android 小項目之--猜名字有獎！RadionButton 和RadionGroup應用（附源碼）

示例代码


ImageView

译者署名： cnmahj、农民伯伯

译者博客：http://blog.toolib.net/cnmahj

版本：Android 3.1 r1

结构

继承关系

public class View.OnClickListner extends View

java.lang.Object

android.view.View

android.widget.ImageView

直接子类

ImageButton, QuickContactBadge

间接子类

ZoomButton

类概述

显示任意图像，例如图标。ImageView类可以加载各种来源的图片（如资源或图片库），需要计算图像的尺寸，比便它可以在其他布局中使用，并提供例如缩放和着色（渲染）各种显示选项。

嵌套类

enum ImageView.ScaleType

将图片边界缩放，以适应视图边界时的可选项

XML属性

属性名称

描述

android:adjustViewBounds

设置该属性为真可以在 ImageView 调整边界时保持图片的纵横比例。（译者注：需要与maxWidth、MaxHeight一起使用，否则单独使用没有效果。）

android:baseline

视图内基线的偏移量

android:baselineAlignBottom

如果为true，图像视图将基线与父控件底部边缘对齐。

android:cropToPadding

如果为真，会剪切图片以适应内边距的大小。（译者注：是否截取指定区域用空白代替。单独设置无效果，需要与scrollY一起使用，效果如下，实现代码见代码部分：

）

android:maxHeight

为视图提供最大高度的可选参数。（译者注：单独使用无效，需要与setAdjustViewBounds一起使用。如果想设置图片固定大小，又想保持图片宽高比，需要如下设置：

1） 设置setAdjustViewBounds为true；

2） 设置maxWidth、MaxHeight；

3） 设置设置layout_width和layout_height为wrap_content。）

android:maxWidth

为视图提供最大宽度的可选参数。

android:scaleType

控制为了使图片适合 ImageView 的大小，应该如何变更图片大小或移动图片。一定是下列常量之一：

常量 | 值 | 描述
matrix | 0 | 用矩阵来绘图
fitXY | 1 | 拉伸图片（不按比例）以填充View的宽高
fitStart | 2 | 按比例拉伸图片，拉伸后图片的高度为View的高度，且显示在View的左边
fitCenter | 3 | 按比例拉伸图片，拉伸后图片的高度为View的高度，且显示在View的中间
fitEnd | 4 | 按比例拉伸图片，拉伸后图片的高度为View的高度，且显示在View的右边
center | 5 | 按原图大小显示图片，但图片宽高大于View的宽高时，截图图片中间部分显示
centerCrop | 6 | 按比例放大原图直至等于某边View的宽高显示。
centerInside | 7 | 当原图宽高或等于View的宽高时，按原图大小居中显示；反之将原图缩放至View的宽高居中显示。

（译者注：设置图片的填充方式。）

android:src

设置可绘制对象作为 ImageView 显示的内容

android:tint

为图片设置着色颜色。（译者注：将图片渲染成指定的颜色。见下图：

左边为原图，右边为设置后的效果，见后面代码。）

公共方法

public final void clearColorFilter ()

（译者注：清除颜色过滤，参见这里）

public int getBaseline ()

返回部件顶端到文本基线的偏移量。如果小部件不支持基线对齐，该方法返回 -1。

返回值

小部件顶端到文本基线的偏移量；或者是 -1 当小部件不支持基线对齐时。

public boolean getBaselineAlignBottom ()

返回当前视图基线是否将考虑视图的底部。

参见

setBaselineAlignBottom(boolean)

public Drawable getDrawable ()

返回视图的可绘制对象；如果没有关联可绘制对象，返回空。

public Matrix getImageMatrix ()

返回视图的选项矩阵。当绘制时，应用于视图的可绘制对象。如果没有矩阵， 函数返回空。不要更改这个矩阵。如果你要为可绘制对象设置不同的矩阵， 请调用 setImageMatrix()。

public ImageView.ScaleType getScaleType ()

返回当前 ImageView 使用的缩放类型。

相关 XML 属性

android:scaleType

参见

ImageView.ScaleType

public void invalidateDrawable (Drawable dr)

使指定的可绘制对象失效。

参数

dr 要设为失效的可绘制对象。

public void jumpDrawablesToCurrentState ()

调用与视图相关的所有可绘制对象的Drawable.jumpToCurrentState()方法。

public int[] onCreateDrawableState (int extraSpace)

为当前视图生成新的 Drawable 状态时发生。当视图系统检测到缓存的可绘制对象失效时，调用该方法.你可以使用 getDrawableState() 方法重新取得当前的状态。

参数

extraSpace 如果为非零，该值为你要在返回值的数组中存放的你自己的状态信息的数量。

返回值

返回保存了视图的当前 Drawable 状态的数组。

public void setAdjustViewBounds (boolean adjustViewBounds)

当你需要在 ImageView 调整边框时保持可绘制对象的比例时，将该值设为真。

参数

adjustViewBounds 是否调整边框，以保持可绘制对象的原始比例。

相关 XML 属性

android:adjustViewBounds

public void setAlpha (int alpha)

（译者注：设置透明度）

public void setBaseline (int baseline)

设置部件顶部边界文本基线的偏移量。这个值覆盖setBaselineAlignBottom(boolean)设置的属性值。

参数

baseline 使用的基线，或不提供设置为-1。

相关 XML属性

android:baseline

参见

setBaseline(int)

public void setBaselineAlignBottom (boolean aligned)

设置是否设置视图底部的视图基线。设置这个值覆盖setBaseline()的所有调用。

参数

aligned 如果为true，图像视图将基线与父控件底部边缘对齐。

相关 XML属性

android:baselineAlignBottom

public final void setColorFilter (int color)

为图片设置着色选项。采用SRC_ATOP合成模式。

参数

color 应用的着色颜色。

相关 XML 属性

android:tint

public void setColorFilter (ColorFilter cf)

为图片应用任意颜色滤镜。

参数

cf 要应用的颜色滤镜（可能为空）

public final void setColorFilter (int color, PorterDuff.Mode mode)

为图片设置着色选项。

参数

color 应用的着色颜色。

mode 如何着色。标准模式为 SRC_ATOP。

相关 XML 属性

android:tint

public void setImageBitmap (Bitmap bm)

设置位图作为该 ImageView 的内容。

参数

bm 设置的位图。

public void setImageDrawable (Drawable drawable)

设置可绘制对象为该 ImageView 显示的内容。

参数

drawable 设置的可绘制对象。

public void setImageLevel (int level)

设置图片的等级，当图片来自于 LevelListDrawable 时。（译者注：使用参见这里）

参数

level 图片的新的等级。

public void setImageMatrix (Matrix matrix)

（译者注：矩阵变换）

public void setImageResource (int resId)

通过资源ID设置可绘制对象为该 ImageView 显示的内容。

注意：该操作读取位图，并在 UI 线程中解码，因此可能导致反应迟缓。 如果反应迟缓，可以考虑用 setImageDrawable(Drawable)、 setImageBitmap(Bitmap) 或者 BitmapFactory 代替。

参数

resId 可绘制对象的资源标识。

相关 XML 属性

android:src

public void setImageState (int[] state, boolean merge)

（译者注：设置视图的可见和不可见，使用参见这里）

public void setImageURI (Uri uri)

设置指定的 URI 为该 ImageView 显示的内容。

注意：该操作读取位图，并在 UI 线程中解码，因此可能导致反应迟缓。 如果反应迟缓，可以考虑用 setImageDrawable(Drawable)、 setImageBitmap(Bitmap) 或者 BitmapFactory 代替。

参数

uri 图像的 URI。

public void setMaxHeight (int maxHeight)

用于设置该视图支持的最大高度的可选参数。只有 setAdjustViewBounds(boolean) 为真时有效。要设置图像最大尺寸为 100×100，并保持原始比率，做法如下：

1) 设置 adjustViewBounds 为真；

2) 设置 maxWidth 和 maxHeight 为 100；

3) 设置宽、高的布局参数为 WRAP_CONTENT。

注意，如果原始图像较小，即使设置了该参数，图像仍然要比 100×100 小。如果要设置图片为 固定大小，需要在布局参数中指定大小，并使用 setScaleType(ImageView.ScaleType) 函数来检测，如何 将其调整到适当的大小。

参数

maxHeight 该视图的最大高度。

相关 XML 属性

android:maxHeight

public void setMaxWidth (int maxWidth)

用于设置该视图支持的最大宽度的可选参数。只有 setAdjustViewBounds(boolean) 为真时有效。要设置图像最大尺寸为 100×100，并保持原始比率，做法如下：

4) 设置 adjustViewBounds 为真；

5) 设置 maxWidth 和 maxHeight 为 100；

6) 设置宽、高的布局参数为 WRAP_CONTENT。

注意，如果原始图像较小，即使设置了该参数，图像仍然要比 100×100 小。如果要设置图片为 固定大小，需要在布局参数中指定大小，并使用 setScaleType(ImageView.ScaleType) 函数来检测，如何 将其调整到适当的大小。

参数

maxWidth 该视图的最大宽度。

相关 XML 属性

android:maxWidth

public void setScaleType (ImageView.ScaleType scaleType)

控制图像应该如何缩放和移动，以使图像与 ImageView 一致。

参数

scaleType 需要的缩放方式。

相关 XML 属性

android:scaleType

public void setSelected (boolean selected)

改变视图的选中状态。视图有选中和未选中两个状态。注意，选择状态不同于焦点。 典型的选中的视图是象 ListView 和 GridView 这样的 AdapterView 中显示的 内容；选中的内容会显示为高亮。

参数

selected 为真，将视图设为选中状态；否则为假。

受保护方法

protected void drawableStateChanged ()

在视图状态的变化影响到所显示可绘制对象的状态时调用该方法。

覆盖该方法时，要确保调用了父类的该方法。

protected void onDraw (Canvas canvas)

实现该方法，用于自己绘制内容。

参数

canvas 用于绘制背景的画布。

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

评估视图及其内容，以决定其宽度和高度.此方法由 measure(int, int) 调用，子类可以重载以提供更精确、更有效率的衡量其内容尺寸的方法。

约定： 覆盖该方法时，必须调用 setMeasuredDimension(int, int) 方法来保存评估结果的视图的宽度和高度.如果忘记将导致 measure(int, int) 方法抛出IllegalStateException异常。要有效的利用父类的 onMeasure(int, int)方法。

基类测量的是背景的大小，除非 MeasureSpec 允许超过背景.子类应该重写 onMeasure(int, int) 方法，以为其内容提供更适合的大小。

如果重写了该方法，子类要确保其高度和宽度大于等于视图的最小高度和宽度. （getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()）

参数

widthMeasureSpec 父视图要求的横向空间大小.该要求由 View.MeasureSpec 进行了编码处理。

heightMeasureSpec 父视图要求的纵向空间大小.该要求由 View.MeasureSpec 进行了编码处理。

protected boolean onSetAlpha (int alpha)

透明度改变时执行。子类可以使用该方法指定透明度值，然后返回真； 在调用 onDraw() 时，使用该透明度值。如果返回假，则先在不可见的缓存中绘制视图， 完成该请求；看起来不错，但是可能相对于在子类中绘制要慢。默认实现返回假。

参数

alpha 应用到视图的透明度值 (0…255)。

返回值

如果该类可以绘制该阿尔法值返回真。

protected boolean setFrame (int l, int t, int r, int b)

为视图指定大小和位置。 该方法有布局调用。

参数

l 左侧位置，相对于父容器。

t 顶部位置，相对于父容器。

r 右侧位置，相对于父容器。

b 底部位置，相对于父容器。

返回值

true 如果新的大小和位置与之前的不同，返回真。

protected boolean verifyDrawable (Drawable dr)

如果你的视图子类显示自己的可绘制对象，他应该重写此方法并为自己的每个可绘制对象返回真。该函数允许为这些可绘制对象准备动画效果。

重写此方法时，要保证调用其父类的该方法。

参数

dr 待校验的可绘制对象.如果是你显示的对象之一，返回真；否则返回调用父类的返回值。

返回值

boolean 如果可绘制对象已经显示在视图上了，返回真；否则返回假，不允许动画效果。

补充

文章精选

Android ImageView 加边框

Android用ImageView显示本地和网上的图片

imageView动画效果

示例代码

android:tint

    <ImageView android:background="@android:color/white" android:src="@drawable/btn_mode_switch_bg"

       android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>

    <ImageView android:layout_marginLeft="5dp" android:background="@android:color/white" android:tint="#ffff00" android:src="@drawable/btn_mode_switch_bg"

       android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>

android:cropToPadding

    <ImageView android:background="@android:color/white" android:scrollY="-10px" android:cropToPadding="true" android:src="@drawable/btn_mode_switch_bg"

       android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>

    <ImageView android:background="@android:color/white" android:scrollY="10px" android:cropToPadding="true" android:src="@drawable/btn_mode_switch_bg"

       android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>

    <ImageView android:paddingTop="10px"  android:background="@android:color/white" android:scrollY="10px" android:cropToPadding="true" android:src="@drawable/btn_mode_switch_bg"

       android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>

    <ImageView android:paddingTop="10px" android:background="@android:color/white" android:scrollY="10px" android:cropToPadding="false" android:src="@drawable/btn_mode_switch_bg"

       android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>


ImageView.ScaleType

译者署名：小易

译者博客：http://blog.sina.com.cn/xjtuyi

版本：Android 3.1 r1

结构

继承关系

public static final enum ImageView.ScaleType extends Enum<E extends Enum<E>>

java.lang.Object

java.lang.Enum<E extends java.lang.Enum<E>>

android.widget.ImageView.ScaleType

类概述

将图片边界缩放，以适应视图边界时的可选项。

常量

public static final ImageView.ScaleType CENTER

在视图中使图像居中，不执行缩放。 在 XML 中可以使用的语法： android:scaleType="center"。

public static final ImageView.ScaleType CENTER_CROP

均衡的缩放图像（保持图像原始比例），使图片的两个坐标（宽、高）都大于等于 相应的视图坐标（负的内边距）。图像则位于视图的中央。 在 XML 中可以使用的语法：android:scaleType="centerCrop"。

public static final ImageView.ScaleType CENTER_INSIDE

均衡的缩放图像（保持图像原始比例），使图片的两个坐标（宽、高）都小于等于 相应的视图坐标（负的内边距）。图像则位于视图的中央。 在 XML 中可以使用的语法：android:scaleType="centerInside"。

public static final ImageView.ScaleType FIT_CENTER

使用 CENTER 方式缩放图像。 在 XML 中可以使用的语法： android:scaleType="fitCenter"。

public static final ImageView.ScaleType FIT_END

使用 END 方式缩放图像。 在 XML 中可以使用的语法： android:scaleType="fitEnd"。

public static final ImageView.ScaleType FIT_START

使用 START 方式缩放图像。 在 XML 中可以使用的语法：android:scaleType="fitStart"。

public static final ImageView.ScaleType FIT_XY

使用 FILL 方式缩放图像。 在 XML 中可以使用的语法： android:scaleType="fitXY"。

public static final ImageView.ScaleType MATRIX

绘制时，使用图像矩阵方式缩放。图像矩阵可以通过 setImageMatrix(Matrix) 设置。在 XML 中可以使用的语法： android:scaleType="matrix"。

补充

文章精选

Android API之ImageView.ScaleType代码演示


HorizontalScrollView

译者署名：Tina

版本：Android 2.3 r1

结构

继承关系

public class HorizontalScrollView extends FrameLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.HorizontalScrollView

类概述

用于布局的容器，可以放置让用户使用滚动条查看的视图层次结构，允许视图结构比手机的屏幕大。HorizontalScrollView是一种 FrameLayout（框架布局），其子项被滚动查看时是整体移动的，并且子项本身可以是一个有复杂层次结构的布局管理器。一个常见的应用是子项在水平方向中，用户可以滚动显示顶层水平排列的子项(items)。

HorizontalScrollView不可以和ListView同时用，因为ListView有自己的滚动条设置。最重要的是，如果在需要显示很大的list的情况下，两者同时用则会使ListView在一些重要的优化上失效。出现这种失效的原因在于，HorizontalScrollView会强迫ListView用HorizontalScrollView本身提供的空间容器（infinite container）来显示完整的列表。

类似的情况，TextView 也有自己的滚动条，所以不需要ScrollView。但这两者是可以同时使用的，使用的结果会是在一个更大的容器里显示文本视图。

HorizontalScrollView只支持水平方向的滚动显示。

公共方法

public void addView (View child)

添加一个子视图。若这个子视图没有被设置布局参数，则使用ViewGroup的缺省参数。

参数

child 要添加的子视图

public void addView (View child, int index)

添加一个子视图。若这个子视图没有被设置布局参数，则使用ViewGroup的缺省参数。

参数

child 要添加的子视图

index 子视图要加入的位置

public void addView (View child, int index, ViewGroup.LayoutParams params)

添加一个带有指定布局参数的子视图。

参数

child 要添加的子视图

index 子视图要加入的位置

params 子视图的布局参数

public void addView (View child, ViewGroup.LayoutParams params)

添加一个带有指定布局参数的子视图。

参数

child 要添加的子视图

params 子视图的布局参数

public boolean arrowScroll (int direction)

响应点击左右箭头时对滚动条的处理。

参数

direction The direction corresponding to the arrow key that was pressed箭头按键所表示的方向

返回值

若此事件成功完成，则返回true；否则返回false。

public void computeScroll ()

被父视图调用，用于必要时候对其子视图的值（mScrollX和mScrollY）进行更新。典型的情况如：父视图中某个子视图使用一个 Scroller 对象来实现滚动操作，会使得此方法被调用。

public boolean dispatchKeyEvent (KeyEvent event)

按照可以获得焦点的顺序（从视图树的顶端到当前获得焦点的视图），分派一个按键事件给下一个视图。若此视图为焦点视图，事件将会分派给它自己。否则它将按照顺序，分派给下一个节点。此方法同时触动所有按键监听器。

参数

event 被分派的事件.

返回值

若事件被处理，则返回true；否则为false

public void draw (Canvas canvas)

手动绘制视图（及其子视图）到指定的画布(Canvas)。这个视图必须在调用这个函数之前做好了整体布局。。当实现一个视图时，不需要继承这个方法；相反，你应该实现 onDraw(Canvas)方法。

参数

canvas 绘制视图的画布

public boolean executeKeyEvent (KeyEvent event)

需要通过按键事件来实现滚动操作时，可以调用此方法。效果类似于由视图树型结构分派事件。

参数

event 需要执行的事件

返回值

若事件被处理，则返回true；否则为false

public void fling (int velocityX)

滚动视图的fling手势。

参数

velocityX 方向的初始速率。正值表示手指/光标向屏幕右边滑动，而内容相对向左滚动。

public boolean fullScroll (int direction)

处理按下"home/end"快捷键之后的滚动响应。此方法会将视图移左或移右，同时将焦点赋予移动后可视的最左或最右的组件。如果没有任何组件适合得到焦点，此scrollview将收回焦点。

参数

direction 滚动方向：FOCUS_LEFT表示向视图的左边移动，FOCUS_RIGHT表示向视图的右边移动

返回值

若此方法消耗(consumed)了按键事件则返回true，否则返回false。

public int getMaxScrollAmount ()

返回值

按左右箭头时视图可以滚动的最大值。

public boolean isFillViewport ()

表示此ScrollView的内容是否被拉伸以适应视口（viewport）的大小。

返回值

若内容填充了视口则返回true，否则返回false。

public boolean isSmoothScrollingEnabled ()

返回值

按箭头方向滚动时，是否显示滚动的平滑效果。

public boolean onInterceptTouchEvent (MotionEvent ev)

使用此方法可以拦截所有触摸屏动作引发的事件。这意味着你可以监视分派给子项的事件，并且可以拿到任何当前手势的所有权。

使用此方法需谨慎。因为它与View.onTouchEvent(MotionEvent)有相当复杂的交互影响。这两者都必须同时正确地实现。事件将按以下顺序来被方法接收：

1. 接收到down事件

2. 事件将被视图组的一个子视图处理，或者被传递给自己的onTouchEvent()方法处理；这意味着你必须实现onTouchEvent()，并且返回true，这样才可以接着接受到其他的手势（而不是寻求一个父视图来处理它）。onTouchEvent()返回true后，你将不再接受到onInterceptTouchEvent()的任何事件，同时所有对触摸动作的处理必须像往常一样在onTouchEvent()中进行。

3. 如果返回false，则接下来的每个事件（所有的up事件，包含最后一个up）将会首先被传递到这里，然后到目标对象view的onTouchEvent()。

4. 如果返回ture，你将不会接收到以下任何事件：目标view将会接收到相同的事件，但是带着ACTION_CANCEL的动作。所有在此之后的事件将会被传递到你的onTouchEvent()方法中，并且不再在这里出现。

参数

ev 沿着树型结构往下分派的动作事件

返回值

若将动作事件从子视图中截获并通过onTouchEvent()将他们分派给当前ViewGroup，则返回true。当前目标将收到一个ACTION_CANCEL事件，并且不再会有其他消息被传递到这里。

public boolean onTouchEvent (MotionEvent ev)

此方法用于处理触摸屏的动作事件。

参数

ev 动作事件

返回值

若事件被成功处理，则返回true；否则返回false

public boolean pageScroll (int direction)

处理按下"page up/down"快捷键之后的滚动响应。此方法会将视图往左或往右滚动一个页面的距离，同时将焦点赋予移动后可视的最左或最右的组件。如果没有任何组件适合得到焦点，此scrollview将收回焦点。

参数

direction 滚动方向：FOCUS_LEFT表示向视图的左边移动一个页面FOCUS_RIGHT表示向视图的右边移动一个页面

返回值

若此方法处理(consumed)了按键事件则返回true，否则返回false。

public void requestChildFocus (View child, View focused)

当父视图的一个子视图要获得焦点时，调用此方法。

参数

child 要获得焦点的子视图。此视图将包含焦点视图，但其本身不必为焦点。

focused 事实上拥有焦点的子视图的下层视图。

public boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)

当组里的某个子视图需要被定位在屏幕的某个矩形范围时，调用此方法。重载此方法的ViewGroup可确认以下几点：

* 子项目将是组里的直系子项

* 矩形将在子项目的坐标体系中

重载此方法的ViewGroup应该支持以下几点：

* 若矩形已经是可见的，则没有东西会改变

* 为使矩形区域全部可见，视图将可以被滚动显示

参数

child 发出请求的子视图

rectangle 子项目坐标系内的矩形，即此子项目希望在屏幕上的定位

immediate 设为true，则禁止动画和平滑移动滚动条

返回值

进行了滚动操作的这个组（group），是否处理此操作

public void requestLayout ()

当出现使视图布局失效的改变时，调用此方法。它将规划一个视图树的布局路径。

public void scrollTo (int x, int y)

设置视图滚动后的位置。这将引起onScrollChanged(int,int,int,int)的调用，同时使此视图失效。

此版本同时将滚动锁定于子视图的范围。

参数

x 要滚动到的x位置

y 要滚动到的y位置

public void setFillViewport (boolean fillViewport)

设置此滚动视图是否将内容宽度拉伸来适应视口（viewport）。

参数

fillViewport 设置为true表示将拉伸内容宽度；否则会设置为false。

public void setOverScrollMode (int mode)

为视图设置over-scroll模式。有效的over-scroll模式有 OVER_SCROLL_ALWAYS（缺省值），OVER_SCROLL_IF_CONTENT_SCROLLS（只允许当视图内容大过容器时，进行over-scrolling）和 OVER_SCROLL_NEVER。只有当视图可以滚动时，此项设置才起作用。

参数

mode 视图的新over-scroll模式值

public void setSmoothScrollingEnabled (boolean smoothScrollingEnabled)

设置是否呈现按下箭头后的平滑滚动效果（动画效果）。

参数

smoothScrollingEnabled 设置是否呈现平滑滚动效果

public final void smoothScrollBy (int dx, int dy)

类似 scrollBy(int, int)，但是呈现平滑滚动，而非瞬间滚动（译者注：瞬间滚动——指不显示滚动过程，直接显示滚动后达到的位置）。

参数

dx 要滚动的X轴像素差值（译者注：横向像素差值）

dy 要滚动的Y轴像素差值（译者注：纵向像素差值）

public final void smoothScrollTo (int x, int y)

类似 scrollTo(int, int)，但是呈现平滑滚动，而不是瞬间滚动。

参数

x 滚动要到达位置的X轴值

y 滚动要到达位置的Y轴值

受保护方法

protected int computeHorizontalScrollOffset ()

计算水平方向滚动条的滑块的偏移值。此值用来计算滚动时滑块的位置。

偏移值的范围可以以任何单位表示，但必须与computeHorizontalScrollRange()和computeHorizontalScrollExtent()的单位一致。

缺省的偏移值为视图滚动的偏移差值。

返回值

滚动条滑块在水平方向上的偏移值

protected int computeHorizontalScrollRange ()

scroll view 的可滚动水平范围是所有子视图的宽度总合。

返回值

水平滚动条表示的全部水平滚动范围

protected int computeScrollDeltaToGetChildRectOnScreen (Rect rect)

计算X方向滚动的总合，以便在屏幕上显示子视图的完整矩形（或者，若矩形宽度超过屏幕宽度，至少要填满第一个屏幕大小）。

参数

rect 矩形

返回值

滚动差值

protected float getLeftFadingEdgeStrength ()

返回左渐变边缘的强度或密集度。强度的值介于0.0（无渐变）到1.0（全渐变）之间。缺省实现只返回0.0或1.0，而不返回中间值。子类必须重载次方法来给滚动动作提供更平滑的渐变过程。

返回值

左渐变的强度，即介于0.0f和1.0f之间的浮点值

protected float getRightFadingEdgeStrength ()

返回右渐变边缘的强度或密集度。强度的值介于0.0（无渐变）到1.0（全渐变）之间。缺省实现只返回0.0或1.0，而不返回中间值。子类必须重载此方法来给滚动动作提供更平滑的渐变过程。

返回值

右渐变的强度，即介于0.0f和1.0f之间的浮点值

protected void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)

要求子视图测量自身，需要将视图的MeasureSpec和其附加内容同时考虑在内。getChildMeasureSpec在其中承担了重要角色，它计算出MeasureSpec，并传递给子视图。

参数

child 要测量的子视图

parentWidthMeasureSpec 此视图的宽度要求

parentHeightMeasureSpec 此视图的高度要求

protected void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)

要求子视图测量自身，需要将视图的MeasureSpec、附加内容和边缘部分同时考虑在内。子项必须有MarginLayoutParams（边缘布局参数）。getChildMeasureSpec在其中承担了重要角色，它计算出MeasureSpec，并传递给子视图。

参数

child 要测量的子视图

parentWidthMeasureSpec 此视图的宽度要求

widthUsed 被父视图（也可能是其他子视图）占用的横向额外空间

parentHeightMeasureSpec 此视图的高度要求

heightUsed 被父视图（也可能是其他子视图）占用的纵向额外空间

protected void onLayout (boolean changed, int l, int t, int r, int b)

当此视图要给每个子视图赋值大小和位置时，layout会调用此方法。子项的派生类应当重载此方法，并且调用各个子项的layout。

参数

changed 此视图有新的大小或位置

l 左边界位置，相对于父视图

t 上边界位置，相对于父视图

r 右边界位置，相对于父视图

b 下边界位置，相对于父视图

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

调用此方法来确定本身和所包含内容的大小（宽度和高度）。此方法被measure(int,int)唤起，而且必须被子类重载以得到所包含内容的确切大小。

注意：当重载此方法时，必须调用setMeasureDimension(int,int)来保存View的大小。如果没有做到，将会引发一个measure(int,int)抛出的IllegalStateException（非法状态错误）。超类onMeasure(int,int)可以被调用。

编写基类的确认大小的方法，缺省情况下是根据其背景大小来确认，除非MeasureSepc允许有更大的高度或宽度。子类必须重载onMeasure(int,int)以得到对其内容大小的更准确的测量。

若此方法被重载，它的子类需要确保其高度和宽度至少达到View所规定的最小值（可通过getSuggestedMinimumHeight()和getSuggestedMinimumWidth()得到）。

参数

widthMeasureSpec 受上一层大小影响下的对水平空间的要求。可参看View.MeasureSpec。

heightMeasureSpec 受上一层大小影响下的对垂直空间的要求。可参看View.MeasureSpec。

protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)

被 overScrollBy(int, int, int, int, int, int, int, int, boolean)调用，来对一个over-scroll操作的结果进行响应。

参数

scrollX 新的X滚动像素值

scrollY 新的Y滚动像素值

clampedX 当scrollX被over-scroll的边界限制时，值为true

clampedY 当scrollY被over-scroll的边界限制时，值为true

protected boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)

当在某个scroll view的子视图中寻找焦点时，需要小心不能让屏幕之外的组件得到焦点。这比缺省ViewGroup的实现代价更高，否则此行为被设为缺省。

参数

direction 值可以为FOCUS_UP，FOCUS_DOWN，FOCUS_LEFT或 FOCUS_RIGHT

previouslyFocusedRect 能够给出一个较好的提示的矩形（当前视图的坐标系统）表示焦点从哪里得来。如果没有提示则为null。

返回值

是否取到了焦点。

protected void onSizeChanged (int w, int h, int oldw, int oldh)

当View的大小改变时此方法被调用。如果View是刚刚被加入，则视之前的值为0。

参数

w View的当前宽度

h View的当前高度

oldw View大小改变之前的宽度

oldh View大小改变之前的高度

补充

文章精选

Android HorizontalScrollview Example


ImageButton

农民伯伯

版本：Android 2.2

java.lang.Object

android.view.View

android.widget.ImageView

android.widget.ImageButton

直接子类：

ZoomButton

类摘要：

显示一个可以被用户点击的图片按钮，默认情况下，ImageButton看起来像一个普通的按钮，在不同状态（如按下）下改变背景颜色。按钮的图片可用通过<ImageButton> XML元素的android:src属性或setImageResource(int)方法指定。

要删除按钮的背景，可以定义自己的背景图片或设置背景为透明。（注：请看

原图 [image] 和图片按钮 [image] ，默认图片周围有按钮的背景，选中之后为黄色）

为了表示不同的按钮状态（焦点，选择等），你可以为各种状态定义不同的图片。例如，定义蓝色图片为默认图片，黄色图片为获取时焦点时显示的图片，黄色图片为按钮被按下时显示的图片。一个简单的方法可以做到这点——通过XML的"selector."配置，如下：

保存上面的XML到 res/drawable/文件夹下（注：注意文件名大小写！），将该文件名作为一个参数设置到ImageButton的 android:src属性（注：如xml文件名为myselector.xml，那么这里设置为"@drawable/myselector"，设置android:background也是可以的，但效果不太一样）。Android根据按钮的状态改变会自动的去XML中查找相应的图片以显示。

<item>元素的顺序很重要，因为是根据这个顺序判断是否适用于当前按钮状态，这也是为什么正常（默认）状态指定的图片放在最后，是因为它只会在pressed和focused都判断失败之后才会被采用。（注：例如按钮被按下时是同时获得焦点的，但是获得焦点并不一定按了按钮，所以这里会按顺序查找，找到合适的就不往下找了。这里按钮被点击了，那么第一个将被选中，且不再在后面查找其他状态。）

参见Form Stuff tutorial。

继承自父类的方法

public void setAlpha (int alpha)

设置ImageButton图片的透明度（注意不是背景图片的）。效果如图：

参数

alpha 透明值0~255，0为完全透明，255为完全不透明


ImageSwitcher

翻译人：wallace2010

译者博客：http://blog.csdn.net/springiscoming2008

版本：Android 2.2 r1

public class ImageSwitcher extends ViewSwitcher

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ViewAnimator

android.widget.ViewSwitcher

android.widget.ImageSwitcher

类概述

（译者注：ImageSwitcher是Android中控制图片展示效果的一个控件，如：幻灯片效果...，颇有感觉啊，做相册一绝。）

公共方法

public void setImageDrawable (Drawable drawable)

绘制图片

public void setImageResource (int resid)

设置图片资源库

public void setImageURI (Uri uri)

设置图片地址

补充

文章链接

Android ImageSwitcher

Image Switcher View | Android Developer Tutorial

示例代码（本文代码转载自这里）

java文件

public class mainactivity extends Activity implements

  OnItemSelectedListener, ViewFactory {

 private ImageSwitcher is;

 private Gallery gallery;

 private Integer[] mThumbIds = { R.drawable.b, R.drawable.c,

   R.drawable.d, R.drawable.f, R.drawable.g,

   };

 private Integer[] mImageIds = { R.drawable.b, R.drawable.c,

   R.drawable.d, R.drawable.f, R.drawable.g, };

@Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  requestWindowFeature(Window.FEATURE_NO_TITLE);

  setContentView(R.layout.main);

  is = (ImageSwitcher) findViewById(R.id.switcher);

  is.setFactory(this);

  is.setInAnimation(AnimationUtils.loadAnimation(this,

    android.R.anim.fade_in));

  is.setOutAnimation(AnimationUtils.loadAnimation(this,

    android.R.anim.fade_out));

  gallery = (Gallery) findViewById(R.id.gallery);

  gallery.setAdapter(new ImageAdapter(this));

  gallery.setOnItemSelectedListener(this);

 }

 @Override

 public View makeView() {

  ImageView i = new ImageView(this);

  i.setBackgroundColor(0xFF000000);

  i.setScaleType(ImageView.ScaleType.FIT_CENTER);

  i.setLayoutParams(new ImageSwitcher.LayoutParams(

    LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

  return i;

 }

 public class ImageAdapter extends BaseAdapter {

  public ImageAdapter(Context c) {

   mContext = c;

  }

  public int getCount() {

   return mThumbIds.length;

  }

  public Object getItem(int position) {

   return position;

  }

  public long getItemId(int position) {

   return position;

  }

  public View getView(int position, View convertView, ViewGroup parent) {

   ImageView i = new ImageView(mContext);

   i.setImageResource(mThumbIds[position]);

   i.setAdjustViewBounds(true);

   i.setLayoutParams(new Gallery.LayoutParams(

     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

   i.setBackgroundResource(R.drawable.e);

   return i;

  }

  private Context mContext;

 }

 @Override

 public void onItemSelected(AdapterView<?> parent, View view, int position,

   long id) {

  is.setImageResource(mImageIds[position]);

 }

 @Override

 public void onNothingSelected(AdapterView<?> parent) {

 }

}

xml文件

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

    <ImageSwitcher android:id="@+id/switcher"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_alignParentTop="true"

        android:layout_alignParentLeft="true"

    />

    <Gallery android:id="@+id/gallery"

        android:background="#55000000"

        android:layout_width="match_parent"

        android:layout_height="60dp"

        android:layout_alignParentBottom="true"

        android:layout_alignParentLeft="true"

        android:gravity="center_vertical"

        android:spacing="16dp"

    />

</RelativeLayout>


FilterQueryProvider

译者署名： xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 3.0 r1

结构

继承关系

public interface FilterQueryProvider

android.widget.FilterQueryProvider

类概述

这个类可以被CursorAdapter和CursorTreeAdapter用来定义如何过滤适配器的内容。

参见

runQuery(CharSequence)

公共方法

public abstract Cursor runQuery (CharSequence constraint)

执行指定约束条件的过滤查询。这个查询要求通过过滤器将结果附加到适配器。约定：当约束条件为null或者空时，都必须返回过滤前的原始结果。（译者注：可以在这个方法里根据条件使用Like等语句执行SQL查询）

参数

constraint 必须被过滤的查询约束条件

返回值

代表新查询结果的Cursor（游标）

补充

文章精选

Android的CursorAdapter与CursorFilter机制

CursorAdapter如何实现关键字过滤


ListAdapter

译者署名： 德罗德

译者链接：http://sparkrico.javaeye.com

翻译时间：2010-11-03

版本：Android 2.2 r1

结构

继承关系

public interface ListAdapter extends Adapter

android.widget.ListAdapter

子类及间接子类

直接子类

ArrayAdapter<T>, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, WrapperListAdapter

类概述

扩展Adapter 是在ListView与数据之间的一座桥梁。通常数据来自于游标，但不是必须的。ListView可以显示包含在ListAdapter里的所有数据。

公共方法

public abstract boolean areAllItemsEnabled ()

在ListAdapter中所有的项目都是可用的？如果是，则代表所有的项目都是可选择，可用鼠标点击的。

返回值

如果所有项目是可用的返回真

public abstract boolean isEnabled (int position)

如果指定的位置不是一个隔离(separator)项目（隔离项目是一个不可选择，不可用鼠标点击的项目）则返回真。如果位置是无效的，其结果将是不确定的。在这种情况下一个ArrayIndexOutOfBoundsException(越界)异常将抛出。

参数

position 项目的索引

返回值

如果这个项目不是一个隔离(separator)项目则返回真。

补充

文章精选

android adapter的体系


ListView

翻译人：Tina

版本：Android 2.2 r1

翻译时间：2010年11月13日

public class ListView extends AbsListView

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

android.widget.AbsListView

android.widget.ListView

直接子类

ExpandableListView （使用竖滚动条查看的两级列表视图）

类概述

通过竖滚动条查看的列表视图。ListAdapter里包含的内容和此视图相关联。参见List View tutorial。

内部类

class ListView.FixedViewInfo

表示一个列表中的固定视图，如放在最顶部的页眉和最底部的页脚

XML属性

属性名称 | 描述
android:choiceMode | 规定此ListView所使用的选择模式。缺省状态下，list没有选择模式。 属性值必须设置为下列常量之一： none，值为0，表示无选择模式； singleChoice，值为1，表示最多可以有一项被选中； multipleChoice，值为2，表示可以多项被选中。 可参看全局属性资源符号choiceMode。
android:divider | 规定List项目之间用某个图形或颜色来分隔。可以用"@[+][package:]type:name"或者"?[package:][type:]name"（主题属性）的形式来指向某个已有资源；也可以用"#rgb"，"#argb"，"#rrggbb"或者"#aarrggbb"的格式来表示某个颜色。 可参看全局属性资源符号divider。
android:dividerHeight | 分隔符的高度。若没有指明高度，则用此分隔符固有的高度。必须为带单位的浮点数，如"14.5sp"。可用的单位如px（pixel像素），dp（density-independent pixels 与密集度无关的像素）, sp（scaled pixels based on preferred font size 基于字体大小的固定比例的像素）， in (inches英寸), mm (millimeters毫米)。 可以用"@[package:]type:name "或者"?[package:][type:]name"（主题属性）的格式来指向某个包含此类型值的资源。 可参看全局属性资源符号dividerHeight。
android:entries | 引用一个将使用在此ListView里的数组。若数组是固定的，使用此属性将比在程序中写入更为简单。 必须以"@[+][package:]type:name"或者 "?[package:][type:]name"的形式来指向某个资源。 可参看全局属性资源符号entries。
android:footerDividersEnabled | 设成flase时，此ListView将不会在页脚视图前画分隔符。此属性缺省值为true。 属性值必须设置为true或false。 可以用"@[package:]type:name "或者"?[package:][type:]name"（主题属性）的格式来指向某个包含此类型值的资源。 可参看全局属性资源符号footerDividersEnabled。
android:headerDividersEnabled | 设成flase时，此ListView将不会在页眉视图后画分隔符。此属性缺省值为true。 属性值必须设置为true或false。 可以用"@[package:]type:name "或者"?[package:][type:]name"（主题属性）的格式来指向某个包含此类型值的资源。 可参看全局属性资源符号headerDividersEnabled。

常量

Int CHOICE_MODE_MULTIPLE

（常量值为2）列表允许同时选取多项

Int CHOICE_MODE_NONE

（常量值为0）普通列表，不指明选取模式

Int CHOICE_MODE_SINGLE

（常量值为1）列表只允许选取最多一项

公共方法

public void addFooterView (View v)

加一个固定显示于list底部的视图。如果此方法被调用超过一次，所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。

注意：在调用setAdapter之前调用此方法。这样的话，可以利用点击光标来收起有header view和footer view的ListView。

参数

v 要加的视图

public void addFooterView (View v, Object data, boolean isSelectable)

加一个固定显示于list底部的视图。如果此方法被调用超过一次，所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。

注意：在调用setAdapter之前调用此方法。这样的话，可以利用点击光标来收起有header view和footer view的ListView。

参数

v 要加的视图

data 和此视图关联的数据

isSelectable 设为true则表示footer view可以被选中

public void addHeaderView (View v)

加一个固定显示于list顶部的视图。如果此方法被调用超过一次，所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。

注意：在调用setAdapter之前调用此方法。这样的话，可以利用点击光标来收起有header view和footer view的ListView。

参数

v 要加的视图

public void addHeaderView (View v, Object data, boolean isSelectable)

加一个固定显示于list顶部的视图。如果此方法被调用超过一次，所加的几个视图将按照它们加入的顺序排列。加入的视图可取得焦点。

注意：在调用setAdapter之前调用此方法。这样的话，可以利用点击光标来收起有header view和footer view的ListView。

参数

v 要加的视图

data 和此视图关联的数据

isSelectable 表示此header view可选与否

public void clearChoices ()

取消之前设置的任何选择

public boolean dispatchKeyEvent (KeyEvent event)

按照可以获得焦点的顺序（从视图树的顶端到当前获得焦点的视图），分派一个按键事件给下一个视图。若此视图有焦点，事件将会分派给它自己。否则它将按照顺序，分派给下一个节点。此方法同时触动所有按键监听器。

参数

event 被分派的事件

返回

若事件被处理，则返回true；否则为false

public boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)

在视图的子项目被构建时，分派一个辅助事件。

参数

event 事件

返回

若事件全部完成，则返回true

public ListAdapter getAdapter ()

返回ListView当前用的适配器。返回的适配器不可以和传给setAdapter(ListAdapter)的参数一样，但是可以是WrapperListAdapter。

返回

当前用来显示ListView中数据的适配器

参见

setAdapter(ListAdapter)

public long[] getCheckItemIds ()

此方法已经过时了。使用 getCheckedItemIds()代替。

返回被选中项目的索引集合。只有当选择模式没有被设置为CHOICE_MODE_NONE时才有效。

public long[] getCheckedItemIds ()

返回被选中项目的索引集合。只有当选择模式没有被设置为CHOICE_MODE_NONE，并且适配器有稳定的 ID（hasStableIds()==true） 时，结果才有效。

返回

一个新的数组，包含列表中每个被选中的索引（id）

public int getCheckedItemPosition ()

返回当前被选中的项目。只有当选择模式已被设置为CHOICE_MODE_SINGLE时 ，结果才有效。

返回

返回当前被选中的项目的索引；若没有项目被选中，则返回INVALID_POSITION

参见

setChoiceMode(int)

public SparseBooleanArray getCheckedItemPositions ()

返回当前被选中的项目集合。只有当选择模式没有被设置为CHOICE_MODE_NONE时 ，结果才有效。

返回

类型为SparseBooleanArray的值，其中，对每一个索引所代表的项目，若被选中，则返回true；当选择模式被设置为CHOICE_MODE_NONE时 ，返回null。

public int getChoiceMode ()

返回

返回当前的选择模式

参见

setChoiceMode(int)

public Drawable getDivider ()

返回

返回当前画在列表元素之间，作为分隔符的图形

public int getDividerHeight ()

返回

返回分隔符的高度

public int getFooterViewsCount ()

返回

列表中的页脚视图数量；缺省实现时，数量为0

public int getHeaderViewsCount ()

返回

列表中的页眉视图数量；缺省实现时，数量为0

public boolean getItemsCanFocus ()

返回

ListAdapter所生成的视图是否可以包含能取得焦点的项目

public int getMaxScrollAmount ()

返回

The maximum amount a list view will scroll in response to an arrow event.

响应箭头事件时，列表视图可以滚动的最大值。（译者注：此处翻译待改进，恐怕需要仔细查看源代码才能明白其含义，也可以用Google Code搜索相关的代码）

public boolean isItemChecked (int position)

对于由position指定的项目，返回其是否被选中。只有当选择模式已被设置为CHOICE_MODE_SINGLE或CHOICE_MODE_MULTIPLE时 ，结果才有效。

参数

position 要返回选中状态的项目

返回

返回项目的选中状态；若选择模式无效，则返回false

public boolean onKeyDown (int keyCode, KeyEvent event)

KeyEvent.Callback.onKeyMultiple()的缺省实现：若视图被激活并且可以被点击，当出现KEYCODE_DPAD_CENTER和KEYCODE_ENTER代表的行为时，做点击该视图的动作。

参数

keyCode 表示按某个按键的按键代号，参见KeyEvent

event 定义按键动作的按键事件对象

返回

若事件被成功处理，则返回true；若想要下一个接收器处理该事件，则返回false

public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)

KeyEvent.Callback.onKeyMultiple()的缺省实现：总是返回false（不处理该事件）。

参数

keyCode 表示按某个按键的按键代号，参见KeyEvent

repeatedCount 实现动作的次数

event 定义按键动作的按键事件对象

返回

若事件被成功处理，则返回true；若想要下一个接收器处理该事件，则返回false

public boolean onKeyUp (int keyCode, KeyEvent event)

KeyEvent.Callback.onKeyMultiple()的缺省实现：当出现KEYCODE_DPAD_CENTER和KEYCODE_ENTER代表的行为时，做点击该视图的动作。

参数

keyCode 表示按某个按键的按键代号，参见KeyEvent

event 定义按键动作的按键事件对象

返回

若事件被成功处理，则返回true；若想要下一个接收器处理该事件，则返回false

public void onRestoreInstanceState (Parcelable state)

重新创建并显示一个视图，此视图拥有之前onSaveInstanceState()保存的内部状态。当state为null时，此方法不会被调用。

参数

state 之前onSaveInstanceState()保存的状态

public Parcelable onSaveInstanceState ()

保存视图的内部状态，用于以后创建新的拥有同样状态的实例。可保存的状态只包含非持久性的，或者可重新组建的信息。比如，永远不可能保存你当前在屏幕上的位置，因为当新的实例被放置于视图层次体系中时，位置会被重新计算。

一些可以被保存的状态：文本视图（但是通常不是指文本本身，因为文本是被保存在内容提供商或其他持久性的储存体中）中当前的光标位置；列表视图中当前的选中项。

返回

返回一个包含视图当前动态状态的接口方法对象；若没有东西被保存，则返回null。缺省情况下返回null。

public boolean onTouchEvent (MotionEvent ev)

此方法用于处理触摸屏的动作事件。

参数

ev 动作事件

返回

若事件被成功处理，则返回true；否则返回false

public boolean performItemClick (View view, int position, long id)

调用定义好的OnItemClickListener。

参数

view AdapterView中被点击到的视图

position 视图在适配器中的索引

id 被点击到的项目的行id

返回

若有定义好的OnItemClickListener被成功调用，则返回true；否则返回false

public boolean removeFooterView (View v)

删除之前加入的某个页脚视图。

参数

v 要删除的视图

返回

若视图被成功删除，则返回true；若此视图不是页脚视图，则返回false

public boolean removeHeaderView (View v)

删除之前加入的某个页眉视图。

参数

v 要删除的视图

返回

若视图被成功删除，则返回true；若此视图不是页眉视图，则返回false

public boolean requestChildRectangleOnScreen (View child, Rect rect, boolean immediate)

当组里的某个子项需要被定位在屏幕的某个矩形范围时，调用此方法。

重载此方法的ViewGroup可确认以下几点：

· 子项目将是组里的直系子项

· 矩形将在子项目的坐标体系中

重载此方法的ViewGroup必须保证以下几点：

· 若矩形已经是可见的，则没有东西会改变

· 为使矩形区域全部可见，视图将可以被滚动显示

参数

child 发出请求的子项目

rect 子项目坐标系内的矩形，即此子项目希望在屏幕上的定位

immediate 设为true，则禁止动画和缓释移动滚动条

返回

这个可滚动显示的组，是否接受请求

public void setAdapter (ListAdapter adapter)

设置ListView背后的数据。根据ListView目前使用的特性，adapter可能被WrapperListAdapter收起。例如：加页眉和/或页脚会使adapter被收起。

参数

adapter 负责维护列表背后的数据，以及生成视图来显示数据里的项目

参见

getAdapter()

public void setCacheColorHint (int color)

当color的值不为0时，此值表示的颜色将提示使用者，列表正在一片单色不透明的背景上被画出。

参数

color 背景色

public void setChoiceMode (int choiceMode)

设置List的选择模式。缺省情况下，列表没有选择模式（即值为CHOICE_MODE_NONE）。

参数

choiceMode 值可为CHOICE_MODE_NONE，CHOICE_MODE_NONE和CHOICE_MODE_NONE中的一种

public void setDivider (Drawable divider)

设置将画在列表中每个项目之间的图形。如果图形没有已设定好的高度，则必须同时调用setDividerHeight(int)。

参数

divider 将用作分隔符的图形

public void setDividerHeight (int height)

设置分隔符（画在列表中每个项目之间）的高度。调用此方法将覆盖由setDivider(Drawable)设置的高度。

参数

height 分隔符的新高度，单位为像素

public void setFooterDividersEnabled (boolean footerDividersEnabled)

设置可以或者不可以为页脚视图画上分隔符。

参数

headerDividersEnabled 设为true，表明可以画；设为false则不可以

参见

setHeaderDividerEnabled(boolean)

addFooterView(android.view.View)

public void setHeaderDividersEnabled (boolean headerDividersEnabled)

设置可以或者不可以为页眉视图画上分隔符。

参数

headerDividersEnabled 设为true，表明可以画；设为false则不可以

参见

setFooterDividerEnabled(boolean)

addHeaderView(android.view.View)

public void setItemChecked (int position, boolean value)

设置position所指定项目的选择状态。只有选择模式为CHOICE_MODE_SINGLE或者CHOICE_MODE_MULTIPLE时，此设置才有效。

参数

position 需要改变选择状态的项目的索引

value 新的选择状态

public void setItemsCanFocus (boolean itemsCanFocus)

表明在由ListAdapter创建的视图中，可包含能获得焦点的项目。

参数

itemsCanFocus 若项目能获得焦点，则设为true；否则为false

public void setSelection (int position)

选中position指定的项目。若为触摸模式，则指定项目不会被选中，但位置变化一样。若position的值小于0，则position为0的项目将被选中。

参数

position 需要选中的项目的索引（从0开始）

public void setSelectionAfterHeaderView ()

选中页眉视图下的第一个列表项目。

public void setSelectionFromTop (int position, int y)

选中position指定的项目，并将所选项置于距离ListView顶端y像素的位置（若为触摸模式，则指定项目不会被选中，但位置变化一样）。

参数

position 需要选中的项目的索引（从0开始）

y 距离ListView（包括间隙）顶端的位置

受保护方法

protected boolean canAnimate ()

表示此视图组是否可以在第一次被布局后，仍可以动态调整其子项。

返回

若可以则为true，否则为false

protected void dispatchDraw (Canvas canvas)

调用此方法来绘出子视图。可被衍生类重写，以便在其子项被画出之前取得控制权。

参数

canvas 绘出View所用的canvas（画布？）

protected View findViewTraversal (int id)

参数

id 要找的View的id

返回值

有此id的View，若没有找到则为null

protected View findViewWithTagTraversal (Object tag)

参数

tag 要找的View的标签

返回值

有此标签的View，若没有找到则为null

protected void layoutChildren ()

子类必须重写此方法来布局其子项。

protected void onFinishInflate ()

当View以及所有子项从XML中导入时被调用，是导入的最后一步。即使子类重写onFinishInflate，也必须保证有调用超方法，这样，方法才会被调用。

protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect)

当View的焦点改变时被调用。重写时，要确保超类的直接调用，这样取得焦点的方式才是标准的。

参数

gainFocus 若View有焦点，则为True；否则为False。

direction 当requestFocus()被调用时，方向焦点被移动。其值可为FOCUS_UP，FOCUS_DOWN，FOCUS_LEFT或FOCUS_RIGHT。在使用缺省条件的情况下，direction并不总是可用。

previouslyFocusedRect 之前得到焦点的View的坐标系统所构成的矩形。如果可用，这个将被当成精确信息（表明焦点从何而来以及从何方向而来）来传递；否则将传递null。

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

View调用此方法来确定本身和所包含内容的大小。此方法被measure(int,int)唤起，而且必须被子类重写以得到所包含内容的确切大小。

注意：当重写此方法时，必须调用setMeasureDimension(int,int)来保存View的大小。如果没有做到，将会引发一个measure(int,int)抛出的IllegalStateException（非法状态错误）。超类onMeasure(int,int)可以被调用。

编写基类的确认大小的方法，缺省情况下是根据其背景大小来确认，除非MeasureSepc允许有更大的高度或宽度。子类必须重写onMeasure(int,int)以得到对其内容大小的更准确的测量。

若此方法被重写，它的子类需要确保其高度和宽度至少达到View所规定的最小值（可通过getSuggestedMinimumHeight()和getSuggestedMinimumWidth()得到）。

参数

widthMeaureSpec 受上一层大小影响下的对水平空间的要求。可参看View.MeasureSpec。

heightMeasureSpec 受上一层大小影响下的对垂直空间的要求。可参看View.MeasureSpec。

protected void onSizeChanged (int w, int h, int oldw, int oldh)

当VIew的大小改变时此方法被调用。如果VIew是刚刚被加入，则视之前的值为0。

参数

w View的当前宽度

h View的当前高度

oldw View大小改变之前的宽度

oldh View大小改变之前的高度

补充

参考链接

Android入门第六篇之ListView (一)

android ListView详解

android异步加载ListView中的图片

Google I/O 2010 - The world of ListView

Android: 显示SD卡文件列表

Android: 带图标的ListView实现

ListView和getView的原理＋如何在ListView中放置多个item


MediaController

译者署名： 唐明

版本：Android 2.3 r1

结构

继承关系

public class MediaController extends FrameLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.MediaController

类概述

一个包含媒体播放器(MediaPlayer)控件的视图。包含了一些典型的按钮，像"播放(Play)/暂停(Pause)", "倒带(Rewind)", "快进(Fast Forward)"与进度滑动器(progress slider)。它管理媒体播放器(MediaController)的状态以保持控件的同步。

通过编程来实例化使用这个类。这个媒体控制器将创建一个具有默认设置的控件，并把它们放到一个窗口里漂浮在你的应用程序上。具体来说，这些控件会漂浮在通过setAnchorView()指定的视图上。如果这个窗口空闲3秒那么它将消失，直到用户触摸这个视图的时候重现。

当媒体控制器是在一个XML布局资源文件中创建的时候，像show()和 hide()这些函数是无效的。媒体播放器将根据这些规则去显示和隐藏：

  • 在调用setPrevNextListeners()函数之前，"previous"和 "next"按钮都是隐藏的。
  • 如果setPrevNextListeners()函数被调用但传入的监听器参数是null，那么"previous"和 "next"按钮是可见的但是处于禁用状态。
  • "rewind" 和 "fastforward"按钮是显示的，如果不需要可以使用构造函数MediaController(Context, boolean)将boolean设置为false。

公共方法

public boolean dispatchKeyEvent (KeyEvent event)

在焦点路径上分发按钮事件到下一个视图。该路径从视图树的顶端遍历到当前获得焦点的视图。如果当前视图已获得焦点，就分发给自身。否则，就分发到下一个节点的焦点路径上。这个方法也可以激发任何一个按键消息监听器。

参数

event 被分发的事件

返回值

如果这个事件被处理了返回true，否则返回false。

public void hide ()

从屏幕中移除控制器。

public boolean isShowing ()

（译者注：判断媒体控制器是否处于可见状态。）

public void onFinishInflate ()

XML文件加载视图完成时调用。这个函数在加载的最后阶段被调用，所有的子视图已经被添加。

即使子类重写了onFinishInflate方法，也应该始终确保调用父类方法，以便我们调用。

public boolean onTouchEvent (MotionEvent event)

实现这个方法来处理触摸屏幕引发的事件。

参数

event 动作事件

返回值

如果这个事件被处理了返回true，否则返回false。

public boolean onTrackballEvent (MotionEvent ev)

实现这个方法处理轨迹球的动作事件，轨迹球相对运动的最后一个事件能用 MotionEvent.getX() 和 MotionEvent.getY()函数获取。这些都是标准化的，用1表示用户按下一个DPAD按键。（因此他们将经常使用小数值表示，为轨迹球提供更多的的细微运动信息） （译者注：DPAD按键事件: KeyEvent.KEYCODE_DPAD_CENTER（居中）、KeyEvent.KEYCODE_DPAD_DOWN（向下）、KeyEvent.KEYCODE_DPAD_LEFT（向左）、KeyEvent.KEYCODE_DPAD_RIGHT（向右）、KeyEvent.KEYCODE_DPAD_UP（向上）作比较。分别表示居中、下移、左移、右移、上移的操作。 相关链接：onTrackBallEvent方法简介）

参数

ev 动作事件

返回值

如果这个事件被处理了返回true，否则返回false。

public void setAnchorView (View view)

设置这个控制器绑定(anchor/锚)到一个视图上。例如可以是一个VideoView对象，或者是你的activity的主视图。

参数

view 将视图来绑定控制器时可见

public void setEnabled (boolean enabled)

设置视图对象的有效状态。这也可以改变子类的有效状态。

参数

enabled 如果要让这个视图对象可用就设置为true，否则设置为false。

public void setMediaPlayer (MediaController.MediaPlayerControl player)

（译者注：把这个媒体控制器设置到VideoView对象上。）

public void setPrevNextListeners (View.OnClickListener next, View.OnClickListener prev)

（译者注：设置"previous"和 "next"按钮的监听器函数。）

public void show (int timeout)

在屏幕上显示这个控制器。它将在闲置’超时 (timeout)’毫秒到达后自动消失。

参数

timeout 这个参数以毫秒为单位。如果设置为0将一直显示到调用hide()函数为止。

public void show ()

在屏幕上显示这个控制器。它将在3秒以后自动消失。

补充

文章精选

[推荐][Android学习指南]Android多媒体(Media)

调用android api播放视频

Customize android VideoView (ii)


MultiAutoCompleteTextView

颖哥儿

版本：Android 2.2 r1

public class MultiAutoCompleteTextView extends AutoCompleteTextView

java.lang.Object

android.view.View

android.widget.TextView

android.widget.EditText

android.widget.AutoCompleteTextView

android.widget.MultiAutoCompleteTextView

概述

一个继承自 AutoCompleteTextView的可编辑的文本视图，能够对用户键入的文本进行有效地扩充提示，而不需要用户输入整个内容。（用户输入一部分内容，剩下的部分系统就会给予提示）。

用户必须提供一个 MultiAutoCompleteTextView.Tokenizer以用来区分不同的子串。

下面的代码片段展示了如何创建一个文本视图，这个视图用来对用户输入的国家名称进行有效地补充提示。

公共方法

public boolean enoughToFilter ()

此方法并不是检验什么时候文本的总长度超过了预定的值，而是在仅当从函数findTokenStart（）到getSelectionEnd()函数得到的文本长度为0或者超过了预定值的时候才起作用。（译者注：当文本长度超过阈值时过滤）

public void performValidation ()

此子类方法并不是用来确定整个文本的有效性，而是用来确定文本中的单个符号的有效性。空标记将被移除。

public void setTokenizer (MultiAutoCompleteTextView.Tokenizer t)

设置用来决定用户正在输入文本的范围的分词组件。

受保护方法

protected void performFiltering (CharSequence text, int keyCode)

此方法并不过滤整个编辑框的内容,只是过滤从函数findTokenStart() 到函数getSelectionEnd()获得的长度为0或者超过了预定的值的文本内容。

参数

text 指定过滤模式

keyCode 插入到编辑框中的最后一个字符；当字符（文本）是通过软键盘输入的时候，小心此字符的值可能为NULL。

protected void performFiltering (CharSequence text, int start, int end, int keyCode)

启动对下拉式列表内容的过滤。过滤模式为编辑框中指定的范围。子类可覆盖此方法，以便于采用一个不同的模式。

protected void replaceText (CharSequence text)

通过替换从函数findTokenStart() 到函数 getSelectionEnd()得到的文本文本范围以及传递给函数terminateToken()的文版返回的结果来实现文本的输入。另外，文本的替换区域将会被标记为自动文本区，这样如果用户直接按DEL键，执行过程就会停止。子类可覆盖此方法来实现许多不同的文本插入工作。

参数

text 下拉列表里的选中项

补充

相关文章链接

Android控件之AutoCompleteTextView、MultiAutoCompleteTextView探究

AutoCompleteTextView和MultiAutoCompleteTextView

Auto Complete Text


MultiAutoCompleteTextView.CommaTokenizer

颖哥儿

版本：Android 2.2 r1

public static class MultiAutoCompleteTextView.CommaTokenizer

extends Object

implements MultiAutoCompleteTextView.Tokenizer

java.lang.Object

android.widget.MultiAutoCompleteTextView.CommaTokenizer

概述

这个简易的组件可以用于一些列表中，这些列表包含被逗号以及一个或数个空格断开的项目。

公共方法

public int findTokenEnd (CharSequence text, int cursor)

返回标记在文本中的结束位置，其偏移量大小为cursor

public int findTokenStart (CharSequence text, int cursor)

返回标记在文本中的开始位置，其偏移量大小为cursor

public CharSequence terminateToken (CharSequence text)

返回文本内容，如果有必要的话，此函数会确认文本是否以终结符结束（比如以空格或者逗号结尾）


MultiAutoCompleteTextView.Tokenizer

颖哥儿

版本：Android 2.2 r1

public static interface MultiAutoCompleteTextView.Tokenizer

android.widget.MultiAutoCompleteTextView.Tokenizer

间接子类

MultiAutoCompleteTextView.CommaTokenizer, Rfc822Tokenizer

概述

公共方法

public abstract int findTokenEnd (CharSequence text, int cursor)

返回标记在文本中的结束位置，其偏移量大小为cursor

public abstract int findTokenStart (CharSequence text, int cursor)

返回标记在文本中的开始位置，其偏移量大小为cursor

public abstract CharSequence terminateToken (CharSequence text)

返回文本内容，如果有必要的话，此函数会确认文本是否以终结符结束（比如以空格或者逗号结尾）


QuickContactBadge

农民伯伯

版本：Android 2.2

public class QuickContactBadge

extends ImageView

implements View.OnClickListener

java.lang.Object

android.view.View

android.widget.ImageView

android.widget.QuickContactBadge

使用截图

在andorid自带的ApiDomos的例子中有这个的代码：App/Activity/QuickContacktsDemo。注意需要android.permission.READ_CONTACTS权限，并且联系人里面有数据，并且联系人需要有手机号码，不然出来是一个空的（看代码可知）。

类概述

控件常用于显示一个图片与标准的联系人快捷标示和点击行为。

公共方法

public void assignContactFromEmail (String emailAddress, boolean lazyLookup)

指定联系人的电子邮箱地址。（注：它会先搜索这个号码，如果没有会提醒你是否添加到联系人，参见文章1）

参数

emailAddress 联系人的电子邮箱地址

lazyLookup 如果设置为true，将不会立即查找这个邮箱地址，直到View被点击时。（注：是否延迟匹配电子邮件）

public void assignContactFromPhone (String phoneNumber, boolean lazyLookup)

为联系人指定一个电话号码。（注：参见文章1）

参数

phoneNumber 联系人的电话号码

lazyLookup 如果设置为true，将不会立即查找这个电话号码，直到View被点击时。

public void assignContactUri (Uri contactUri)

指定和QuickContactBadge关联的联系人URI。注意，这里只是显示QuickContact窗口，并不为你绑定联系人图片。

参数

contactUri CONTENT_URI或CONTENT_LOOKUP_URI其中一种风格的URI.

public void onClick (View v)

当View被点击时调用。

参数

v 被点击的View.

public void setExcludeMimes (String[] excludeMimes)

设置一组要排除不显示的MIMI类型列表。例如，可以隐藏Contacts.CONTENT_ITEM_TYPE类型的图标。（注：如果像如下设置：

setExcludeMimes(new String[] { Contacts.CONTENT_ITEM_TYPE })

即隐藏了上面截图的第二个，仅显示电话和短信两个图标）

public void setMode (int size)

设置QuickContact的窗口模式。如下选项：MODE_SMALL、MODE_MEDIUM、MODE_LARGE。（注：默认为QuickContact.MODE_MEDIUM，设置为MODE_LARGE时会同时显示联系人名称）

补充

文章精选

Android Quick Tip: Using the Quick Contact Badge

Contacts模块中的QuickContacts

Android自定义泡泡效果

[推荐]devoquickaction(自定义QuickContactBadge)


RadioButton

农民伯伯

版本：Android 2.2 r1

public class RadioButton extends CompoundButton

java.lang.Object

android.view.View

android.widget.TextView

android.widget.Button

android.widget.CompoundButton

android.widget.RadioButton

概述

单选按钮是一种双状态的按钮，可以选择或不选中。在单选按钮没有被选中时，用户能够按下或点击来选中它。但是，与复选框相反，用户一旦选中就不能够取消选中（译者注：可以通过代码来控制，界面上点击的效果是一旦选中之后就不能取消选中了）。

多个单选按钮通常与RadioGroup同时使用。当一个单选组（RadioGroup）包含几个单选按钮时，选中其中一个的同时将取消其它选中的单选按钮。（译者注：示例参见这里）

公共方法

public void toggle ()

将单选按钮更改为与当前选中状态相反的状态。

如果这个单选按钮已经选中，这个方法将不切换单选按钮。（译者注：请看源码：

）


RatingBar

翻译人：wallace2010/ madgoat

译者博客：http://madgoat.cn/、

http://blog.csdn.net/springiscoming2008

版本：Android 2.2 r1

public class RatingBar extends AbsSeekBar

java.lang.Object

android.view.View

android.widget.ProgressBar

android.widget.AbsSeekBar

android.widget.RatingBar

类概述

RatingBar是基于SeekBar和ProgressBar的扩展，用星型来显示等级评定。使用RatingBar的默认大小时，用户可以触摸/拖动或使用键来设置评分，它有两种样式(小风格用ratingBarStyleSmall，大风格用ratingBarStyleIndicator)，其中大的只适合指示，不适合于用户交互。

当使用可以支持用户交互的RatingBar时，无论将控件(widgets)放在它的左边还是右边都是不合适的。

只有当布局的宽被设置为wrap content时，设置的星星数量（通过函数setNumStars(int)或者在XML的布局文件中定义）将显示出来（如果设置为另一种布局宽的话，后果无法预知）。

次级进度一般不应该被修改，因为他仅仅是被当作星型部分内部的填充背景。

参见Form Stuff tutorial.

嵌套类

接口：RatingBar.OnRatingBarChangeListener

一个回调函数，当星级进度改变时修改客户端的星级。

XML属性

属性名称 | 描述
android:isIndicator | RatingBar是否是一个指示器（用户无法进行更改）
android:numStars | 显示的星型数量，必须是一个整形值，像“100”。
android:rating | 默认的评分，必须是浮点类型，像“1.2”。
android:stepSize | 评分的步长，必须是浮点类型，像“1.2”。

公共方法

public int getNumStars ()

返回显示的星型数量

返回值

显示的星型数量

public RatingBar.OnRatingBarChangeListener getOnRatingBarChangeListener ()

返回值

监听器（可能为空）监听评分改变事件

public float getRating ()

获取当前的评分（填充的星型的数量）

返回值

当前的评分

public float getStepSize ()

获取评分条的步长

返回值

The step size.

步长

public boolean isIndicator ()

返回值

判断当前的评分条是否仅仅是一个指示器（注：即能否被修改）

public void setIsIndicator (boolean isIndicator)

设置当前的评分条是否仅仅是一个指示器（这样用户就不能进行修改操作了）

参数

isIndicator Bool值，是否是一个指示器

public synchronized void setMax (int max)

设置评分等级的范围，从0到max

参数

max 评分条最大范围。

public void setNumStars (int numStars)

设置显示的星型的数量。为了能够正常显示它们，建议将当前widget的布局宽度设置为wrap content

参数

numStars 星型的数量

public void setOnRatingBarChangeListener (RatingBar.OnRatingBarChangeListener listener)

设置当评分等级发生改变时回调的监听器

参数

listener 监听器

public void setRating (float rating)

设置分数（星型的数量）

参数

rating 设置的分数

public void setStepSize (float stepSize)

设置当前评分条的步长（step size）

参数

stepSize 评分条的步进。例如：如果想要半个星星，它的值为0.5。

受保护方法

protected synchronized void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

权衡 view 和 content 来决定它的宽度和高度的整齐。它被measure(int, int) 调用 并且应该被子类所覆盖，以便提供准确高效的布局测量。

规定: 当覆盖这个方法的时候，你必须调用 setMeasuredDimension(int, int)以便存储精确的视图的宽和高。如果不这样做的话将触发llegalStateException异常，被函数 measure(int, int)抛出。调用父类 onMeasure(int, int)是合理的。

尺寸的基本类的实现默认是背景大小，除非通过MeasureSpec允许大的尺寸。子类应该覆盖 onMeasure(int, int) 以便提供更好的布局大小。

如果这个方法被覆盖，子类应该负责确保标准的宽和高至少是视图的最小宽度和高度的值（分别为getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()两方法）。

参数

widthMeasureSpec 受主窗口支配的水平空间要求。这个需求通过 View.MeasureSpec.进行编码。

heightMeasureSpec 受主窗口支配的垂直空间要求。这个需求通过 View.MeasureSpec.进行编码。

补充

文章链接

Android 控件之RatingBar评分条

Android更换RatingBar图片

[Android学习指南]RatingBar 评分条

示例代码（代码转载自Android手机开发者论坛）

AndroidRatingBar.java

public class AndroidRatingBar extends Activity {

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

   @Override

   public void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.main);

       final RatingBar ratingBar_Small = (RatingBar)findViewById(R.id.ratingbar_Small);

       final RatingBar ratingBar_Indicator = (RatingBar)findViewById(R.id.ratingbar_Indicator);

       final RatingBar ratingBar_default = (RatingBar)findViewById(R.id.ratingbar_default);

       ratingBar_default.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener(){

   public void onRatingChanged(RatingBar ratingBar, float rating,

     boolean fromUser) {

    ratingBar_Small.setRating(rating);

    ratingBar_Indicator.setRating(rating);

    Toast.makeText(AndroidRatingBar.this, "rating:"+String.valueOf(rating),

      Toast.LENGTH_LONG).show();

   }});

   }

}

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:orientation="vertical"

   android:layout_width="fill_parent"

   android:layout_height="fill_parent"

   >

<TextView

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"

   android:text="@string/hello"

   />

<RatingBar

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"

   style="?android:attr/ratingBarStyleIndicator"

   android:id="@+id/ratingbar_Indicator"

   />

<RatingBar

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"

   style="?android:attr/ratingBarStyleSmall"

   android:id="@+id/ratingbar_Small"

   android:numStars="20"

   />

<RatingBar

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"

   style="?android:attr/ratingBarStyle"

   android:id="@+id/ratingbar_default"

   />

</LinearLayout>


RatingBar.OnRatingBarChangeListener

译者：madgoat

博客：http://madgoat.cn/

版本：Android 2.2 r1

public static interface RatingBar.OnRatingBarChangeListener

android.widget. RatingBar.OnRatingBarChangeListener

概述

当评分等级改变时通知客户端的回调函数。这包括用户通过手势、方向键或轨迹球触发的改变， 以及编程触发的改变。

公共方法

public abstract void onRatingChanged (RatingBar ratingBar, float rating, boolean fromUser)

通知评分等级已经被修改。客户端可以使用fromUser参数区分用户触发的改变还是编程触发的改变。当用户拖拽时，将不会连续不断的被调用，仅仅当用户最终离开触摸结束评分时调用。

参数

ratingBar 评分修改的RatingBar

rating 当前评分分数。取值范围为0到星型的数量。

fromUser 如果评分改变是由用户触摸手势或方向键轨迹球移动触发的，则返回true

整理人：农民伯伯


RelativeLayout

译者署名：Atomic

译者链接：http://iiapk.com

版本：Android 2.3 r1

结构

继承关系

public class RelativeLayout extends ViewGroup

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.RelativeLayout

子类及间接子类

直接子类

DialerFilter, TwoLineListItem

类概述

RelativeLayout顾名思义，相对布局，在这个容器内部的子元素们可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位。

注意，不能在RelativeLayout容器本身和他的子元素之间产生循环依赖，比如说，不能将RelativeLayout的高设置成为 WRAP_CONTENT 的时候将子元素的高设置成为 ALIGN_PARENT_BOTTOM。

（译者注：这点额外要注意，当然这也很好理解，如果容器是不定高的，那么子元素当然无法对齐容器的底边^_^）。

可以参考官方SDK中的 RelativeLayout教学贴Relative Layout tutorial

常量

数据类型 | 常量名称 | 描述
int | ABOVE | 定义将元素的底边对齐另一个元素的顶边
int | ALIGN_BASELINE | 定义将元素基线的对齐另一个元素的基线
int | ALIGN_BOTTOM | 定义将元素底边的对齐另一个元素的底边
int | ALIGN_LEFT | 定义将元素的左边对齐另一个元素的左边
int | ALIGN_PARENT_BOTTOM | 定义将元素的底边对齐其父容器(RelativeLayout)的底边
int | ALIGN_PARENT_LEFT | 定义将元素的左边对齐其父容器(RelativeLayout)的左边
int | ALIGN_PARENT_RIGHT | 定义将元素的右边对齐其父容器(RelativeLayout)的右边
int | ALIGN_PARENT_TOP | 定义将元素的顶边对齐其父容器(RelativeLayout)的顶边
int | ALIGN_RIGHT | 定义将元素的右边对齐另一个元素的右边
int | ALIGN_TOP | 定义将元素的顶边对齐另一个元素的顶边
int | BELOW | 定义将元素的顶边对齐另一个元素的底边
int | CENTER_HORIZONTAL | 定义让元素在容器(RelativeLayout)内水平居中
int | CENTER_IN_PARENT | 定义让元素位于容器(RelativeLayout)的中心
int | CENTER_VERTICAL | 定义让元素在容器(RelativeLayout)内垂直居中
int | LEFT_OF | 定义将元素的右边对齐另一个元素的左边
int | RIGHT_OF | 定义将元素的左边对齐另一个元素的右边
int | TRUE |

内部类

Class RelativeLayout.LayoutParams

和RelativeLayout相关联的布局信息.

XML属性

属性名称 | 描述
android:gravity | 设置容器中的内容该如何定位。对象本身的x和y轴。
android:ignoreGravity | 设置容器中的哪个子元素会不受Gravity的影响. （译者注：接收参数:子元素的Id,如果设置成为0，则全部子元素都会受到影响）

公共方法

public boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)

  分发 AccessibilityEvent 事件到该 View 的子视图中。

参数

event 事件本身.

返回值

如果事件分发完成，返回真。

public RelativeLayout.LayoutParams generateLayoutParams (AttributeSet attrs)

返回一个新的已设置属性集合的布局参数。

参数

attrs 构建layout布局参数的属性集合.

返回值

一个RelativeLayout.LayoutParams的实例或者他的一个子类

public int getBaseline ()

返回窗口空间的文本基准线到其顶边界的偏移量。如果这个部件不支持基准线对齐，这个方法返回-1。

返回值

基准线的偏移量，如果不支持基准线对齐则返回-1

public void requestLayout ()

当容器中的某个视图发生改变，会影响整个布局时，就调用这个方法，他会改变整个视图树的布局。

public void setGravity (int gravity)

描述子视图该如何摆放，默认值是Gravity.LEFT | Gravity.TOP（译者注：说明RelativeLayout的元素如果不设置位置，会从左上角开始堆叠）。

参数

gravity 位置值，可以参考 Gravity

相关的XML属性

android:gravity

参见

setHorizontalGravity(int)

setVerticalGravity(int)

public void setHorizontalGravity (int horizontalGravity)

public void setVerticalGravity (int verticalGravity))

public void setIgnoreGravity (int viewId)

定义容器中的那个VIew会忽略容器设置的Gravity，如果容器设置的Gravity是Gravity.LEFT | Gravity.TOP时，定义这个属性没有任何效果。

参数

viewId 将要忽略容器Gravity的视图的id，设置为0则不会有任何View忽略Gravity.

相关的XML属性

android:ignoreGravity

参见

setGravity(int)

受保护方法

protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

（译者注：检测是不是AbsoluteLayout.LayoutParams的实例）

protected ViewGroup.LayoutParams generateDefaultLayoutParams ()

返回一组宽度为WRAP_CONTENT,高度为WRAP_CONTENT,坐标是（0，0）的布局参数。

返回值

一组默认的布局参数或null值。

protected ViewGroup.LayoutParams generateDefaultLayoutParams ( ViewGroup .LayoutParams p)

返回一组合法的受支持的布局参数。当一个ViewGroup传递一个布局参数没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)检测的视图时，此方法被调用。此方法会返回一组新的适合当前ViewGroup的布局参数，可能从指定的一组布局参数中复制适当的属性。

参数

p 被转换成一组适合当前 ViewGroup的布局参数.

返回值

一个ViewGroup.LayoutParams的实例或者其中的一个子节点

protected void onLayout (boolean changed, int l, int t, int r, int b)

在此视图view给他的每一个子元素分配大小和位置时调用。 派生类可以重写此方法并且重新安排他们子类的布局。

参数

changed 这是当前视图view的一个新的大小或位置

l 相对于父节点的左边位置

t 相对于父节点的顶点位置

r 相对于父节点的右边位置

b 相对于父节点的底部位置

public void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

测量视图以确定其内容宽度和高度。此方法被measure(int, int)调用。需要被子类重写以提供对其内容准确高效的测量。

约定：当重写此方法时，你必须调用setMeasuredDimension(int, int)来保存当前视图view的宽度和高度。不成功调用此方法将会导致一个IllegalStateException异常，是由measure(int, int)抛出。所以调用父类的onMeasure(int, int)方法是必须的。

父类的实现是以背景大小为默认大小，除非MeasureSpec（测量细则）允许更大的背景。子类可以重写onMeasure(int,int)以对其内容提供更佳的尺寸。

如果此方法被重写，那么子类的责任是确认测量高度和测量宽度要大于视图view的最小宽度和最小高度（getSuggestedMinimumHeight() and getSuggestedMinimumWidth()），使用这两个方法可以取得最小宽度和最小高度。

参数

widthMeasureSpec 强加于父节点的横向空间要求。要求是使用View.MeasureSpec进行编码。

heightMeasureSpec 强加于父节点的纵向空间要求。要求是使用View.MeasureSpec进行编码。

补充

文章精选

[Android学习指南] 相对布局 RelativeLayout

Android RelativeLayout 属性

RelativeLayout 排版 _ 免寫程式[blogspot]

示例代码

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:id="@+id/label"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Type here:"/>

<EditText

android:id="@+id/entry"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@android:drawable/editbox_background"

android:layout_below="@id/label"/>

<Button

android:id="@+id/ok"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@id/entry"

android:layout_alignParentRight="true"

android:layout_marginLeft="10dip"

android:text="OK" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_toLeftOf="@id/ok"

android:layout_alignTop="@id/ok"

android:text="Cancel" />

</RelativeLayout>


RemoteViews

译者署名：xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 4.0 r1

结构

继承关系

public class RemoteViews extends Object implements Parcelable,LayoutInflater.Filter

java.lang.Object

android.widget.RemoteViews

类概述

一个描述了可以在其他进程中显示的view层，它inflate于layout资源文件，并且这个类对提供一些基本操作修改view内容。

字段

public static final Creator<RemoteViews>

构造器Parcelable.Creator用来实例化RemoteViews类

内部类

class RemoteViews.ActionException

错误发生并发送异常时执行的动作

@interface RemoteViews.RemoteView

这个标记指明View的子类可以使用RemoteViews机制

构造函数

public RemoteViews(String packageName, int layoutId)

通过指定的布局文件新建一个RemoteViews对象。

public RemoteViews(Parcel parcel)

从一个parcel中读取RemoteViews对象。

公共方法

public void addView (int viewId, RemoteViews nestedView)

相当于当inflate指定的RemoteViews后调用addView(View)。它允许用户构建”nested(内部)”RemoteViews。在某种情况下RemoteViews可以回收布局，使用removeAllViews(int)清除所有存在的子视图。

参数

viewId 要加入子视图的父ViewGroup的id

nestedView 描述子视图的RemoteViews

public void apply(Context context, ViewGroup parent)

Inflates视图对象并且应用到所有的动作中。

调用注意：这个方法可能有异常抛出。

参数

Context 默认使用的context

parent 生成视图层将要填充的parent。此方法不会附加到层次结构。调用者应该在适当的时候处理。

返回值

被inflated的视图层

public RemoteViews clone ()

创建并返回这个对象的复本。默认的实现返回一个浅拷贝：它重新创建这个类的实例并从原来的实例中复制字段值（包括类相关的）到这个新的实例。相比之下，深拷贝，还会递归复制嵌套类

返回值

对象的复本。

public int describeContents ()

描述对象在Parcelable中特定的编码形式

返回值

返回由Parcelable特定编码形式的对象类型的位掩码

public int getLayoutId ()

（译者注：返回Inflates视图的id）

public String getPackage ()

public boolean onLoadClass (Class clazz)

Hook允许LayoutInflater客户端限制设置视图，即允许被inflated。

参数

clazz 用来inflated的视图对象

返回值

如果允许这个类inflated，返回true，否则返回false

public void reapply (Context context, View v)

为视图对象应用所有的动作

参数

v 要应用动作的视图。这个应该是apply(Context, ViewGroup)调用的结果

public void removeAllViews (int viewId)

相当于调用removeAllViews().

参数

viewed 要移除所有子视图的父ViewGroup的id

public void setBitmap (int viewId, String methodName, Bitmap value)

为RemoteViews在视图布局上调用一个带有Bitmap值的方法。

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setBoolean (int viewId, String methodName, boolean value)

为RemoteViews在视图布局上调用一个带有boolean值的方法。

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setBundle (int viewId, String methodName, Bundle value)

为RemoteViews在视图而已上调用一个带有Bundle值方法

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setByte (int viewId, String methodName, byte value)

为RemoteViews在视图而已上调用一个带有byte值方法

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setChar (int viewId, String methodName, char value)

为RemoteViews在视图而已上 调用一个带有char值方法

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setCharSequence (int viewId, String methodName, CharSequence value)

为RemoteViews在视图而已上调用一个带有CharSequence值方法

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setChronometer (int viewId, long base, String format, boolean started)

等同于调用Chronometer.setBase, Chronometer.setFormat,和Chronometer.start() 或者 Chronometer.stop().

参数

viewId 视图id

base 定时器应该从0:00开始读取的时间，这个时间应该基于SystemClock.elapsedRealtime()

format 计时器的格式字符串，或者是简单显示时间的null值

started True表示开始，false相反

public void setDisplayedChild (int viewId, int childIndex)

等同于调用setDisplayedChild(int)

参数

viewId 要调用setDisplayedChild(int)的视图的id

public void setDouble (int viewId, String methodName, double value)

为RemoteViews在视图而已上 调用一个带有double值方法

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setEmptyView (int viewId, int emptyViewId)

相当于调用AdapterView.setEmptyView

参数

viewId 要设置空视图的视图id

emptyViewId 空视图的id

public void setFloat (int viewId, String methodName, double value)

为RemoteViews在视图而已上调用一个带有float值方法

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setImageViewBitmap (int viewId, Bitmap bitmap)

相当于调用ImageView.setImageBitmap

参数

viewId 视图id

bitmap 用于绘制的新的Bitmap

public void setImageViewResource (int viewId, int srcId)

相当于调用ImageView. setImageResource

参数

viewId 视图id

srcId 用于绘制的新的资源id

public void setImageViewUri (int viewId, Uri uri)

相当于调用ImageView. setImageURI

参数

viewId 视图id

uri 用于绘制的新的资源uri

public void setInt (int viewId, String methodName, int value)

为RemoteViews在视图而已上调用一个带有int值方法

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setIntent (int viewId, String methodName, Intent value)

（译者注：为RemoteViews在视图而已上调用一个带有Intent值方法）

public void setLong (int viewId, String methodName, long value)

为RemoteViews在视图而已上调用一个带有long值方法

参数

viewId 视图id

methodName 要调用的方法名

value 要传的值

public void setOnClickFillInIntent (int viewId, Intent fillInIntent)

当在widgets中使用集合（比如说ListView, StackView等等），在单独的一个条目中设置PendingIntents是非常浪费的，并且是不被允许的。然而一个单独的PendingIntents模板可以设置在集合里，参见setPendingIntentTemplate(int, PendingIntent)，并且一个给定条目的单独的on-click的动作可以通过在条目上设置fillInIntent来区别。然后这个fillInIntent就和PendingIntent的实例结合在一起决定最终的被点击执行的intent。规定如下：在PendingIntent实例里，左边为空白的任何区域，但由fillInIntent提供的，将被重写，同时PendingIntent的结果将被使用。然后PendingIntent将被在fillInIntent中设置的有联系的字段填充。参见fillIn(Intent, int)

参数

viewId 要设置fillInIntent视图id

fillInIntent 要和父类的PendingIntent组合在一起的意图，用来决定被viewid指定的视图的on- click动作

public void setOnClickPendingIntent (int viewId, PendingIntent pendingIntent)

相当于调setOnClickListener(android.view.View.OnClickListener)启动准备好的PendingIntent。当在集合中设置条目的on-click动作时（比如说：ListView, StackView等），这个方法不起作用。然而，{@link RemoteViews#setPendingIntentTemplate(int, PendingIntent)应该和RemoteViews#setOnClickFillInIntent(int, Intent).一起使用

参数

viewId 当点击时将要触发PendingIntent的视图的id

pendingIntent 当点击时传过去的PendingIntent

public void setPendingIntentTemplate (int viewId, PendingIntent pendingIntentTemplate)

当在widgets中使用集合(比如说ListView, StackView等等)时，在单独的一个条目中设置PendingIntent代价是很昂贵的，因此也是不被允许的。这个方法应该在集合中设置一个单独的PendingIntent模板,然后每一个单独的条目都可以通过setOnClickFillInIntent(int, Intent)来区别他们的点击事件。

参数

viewId 当点击时，其子视图需要使用PendingIntent模板的集合id

pendingIntentTemplate 和viewID的一个子类绑定在一起的PendingIntent，这个孩子在点击时会被执行

public void setProgressBar (int viewId, int max, int progress, boolean indeterminate)

如果indeterminate为true的话，相当于调用ProgressBar.setMax, ProgressBar.setProgress和ProgressBar.setIndeterminate，那么最大值和进度被忽略

参数

viewId 视图的id

max 进度条的100%时的值

progress 进度条当前的值

indeterminate 如果进度条是不确定的为true，反之为false

public void setRelativeScrollPosition (int viewId, int offset)

相当于调用smoothScrollToPosition(int, int).

参数

viewId 视图id

offset 滚动套适配器偏移位置

public void setRemoteAdapter (int appWidgetId, int viewId, Intent intent)

相当于调用setRemoteViewsAdapter(Intent)

参数

appWidgetId 包含指定视图的app widget的id

viewId 视图id

intent 为RemoteViewsAdapter提供数据的服务的intent

public void setScrollPosition (int viewId, int position)

相当于调用smoothScrollToPosition(int, int).

参数

viewId 视图id

position 滚动到适配器指定位置

public void setShort (int viewId, String methodName, short value)

在视图布局上为RemoteViews调用一个带有short值的方法。

参数

viewId 视图id

methodName 调用方法的名称

value 要传给方法的值

public void setString (int viewId, String methodName, String value)

在视图布局上为RemoteViews调用一个带有String值的方法。

参数

viewId 视图id

methodName 调用方法的名称

value 要传给方法的值

public void setTextColor (int viewId, int color)

相当于调用setTextColor(int)

参数

viewId 视图id

color 设置所有的状态(normal, selected, focused)下的text颜色为指定颜色

public void setUri (int viewId, String methodName, Uri value)

在视图布局上为RemoteViews调用一个带有Uri值的方法。

参数

viewId 视图id

methodName 调用方法的名称

value 要传给方法的值

public void setTextViewText (int viewId, CharSequence text)

相当于调用setTextColor(int)

参数

viewId 视图id

methodName 要调用的方法名

public void setViewVisibility (int viewId, int visibility)

相当于调用view.setVisibility

参数

viewId 视图id

visibility 这个视图的新的可见性

public void showNext (int viewId)

相当于调用showNext()

参数

viewId 需要调用showNext()的视图id

public void showPrevious (int viewId)

相当于调用showPrevious()。

参数

viewId 需要调用showPrevious()的视图id

public void writeToParcel (Parcel dest, int flags)

把一个对象填充到一个Parcel里

参数

Dest 需要写入Parcel的对象

flags 这个对象应该怎样被的标志。可能是0 或者PARCELABLE_WRITE_RETURN_VALUE

补充

文章精选

Android App Widget中如何调用RemoteView中的函数

Android widget 之RemoteView

RemoteView ViewFlipper 小部件简单动画

Android:AppWidget，PendingIntent，RemoteViews用法


ResourceCursorAdapter

译者署名： HalZhang

译者链接：http://www.cnblogs.com/halzhang

版本：Android 2.3 r1

结构

继承关系

public abstract class ResourceCursorAdapter extends CursorAdapter

java.lang.Object

android.widget.BaseAdapter

android.widget.CursorAdapter

android.widget.ResourceCursorAdapter

子类及间接子类

直接子类

SimpleCursorAdapter

类概述

这是一个简单的适配器，通过指定一个定义了视图UI的XML文件来创建视图。

构造函数

public ResourceCursorAdapter (Context context, int layout, Cursor c)

构造函数

参数

Context 与ListView相关的正在运行的 SimpleListItemFactory上下文

layout 一个定义了列表项视图的布局文件资源ID，这个布局同时定义列表 项视图和下拉视图，直到你重写它们。

c 获取数据的游标

public ResourceCursorAdapter (Context context,int layout, Cursor c, boolean autoRequery)

构造函数

参数

Context 与ListView相关的正在运行的 SimpleListItemFactory上下文

layout 一个定义了列表项视图的布局文件资源ID，这个布局同时定义列表 项视图和下拉视图，直到你重写它们。

c 获取数据的游标

autoRequery 如果此参数为true，当适配器的数据发生变化的时，适配器会调 用游标的requery()方法，使最新的数据始终显示。

公共方法

public View newDropDownView (Context context, Cursor cursor, ViewGroup parent)

生成一个新的下拉视图来控制游标指向的数据

参数

context 应用程序全局信息接口（应用上下文）

cursor 获取数据的游标，它已经移动到正确的位置

parent 与新视图相关联的上级视图

返回值

新创建的视图

public View newView (Context context, Cursor cursor, ViewGroup parent)

根据指定的xml文件创建视图

参数

context 应用程序全局信息接口（应用上下文）

cursor 获取数据的游标，它已经移动到正确的位置

parent 与新视图相关联的上级视图

返回值

新创建的视图

参见

newView(android.content.Context, android.database.Cursor, ViewGroup)

public void setDropDownViewResource (int dropDownLayout)

设置下拉视图相应的布局资源

参数

dropDownLayout 用于创建下拉视图的布局资源

public void setViewResource (int layout)

设置列表项视图相应的布局资源

参数

layout 用于创建列表项视图的布局资源

补充

文章精选

ListActivity简介

代码示例（ApiDemos\src\com\example\android\apis\app\QuickContactsDemo.java）

Java：

public class QuickContactsDemo extends ListActivity {

static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {

Contacts._ID, // 0

Contacts.DISPLAY_NAME, // 1

Contacts.STARRED, // 2

Contacts.TIMES_CONTACTED, // 3

Contacts.CONTACT_PRESENCE, // 4

Contacts.PHOTO_ID, // 5

Contacts.LOOKUP_KEY, // 6

Contacts.HAS_PHONE_NUMBER, // 7

};

static final int SUMMARY_ID_COLUMN_INDEX = 0;

static final int SUMMARY_NAME_COLUMN_INDEX = 1;

static final int SUMMARY_STARRED_COLUMN_INDEX = 2;

static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3;

static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4;

static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5;

static final int SUMMARY_LOOKUP_KEY = 6;

static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 7;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("

+ Contacts.HAS_PHONE_NUMBER + "=1) AND ("

+ Contacts.DISPLAY_NAME + " != '' ))";

Cursor c =

getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select,

null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

startManagingCursor(c);

ContactListItemAdapter adapter = new ContactListItemAdapter(this, R.layout.quick_contacts, c);

setListAdapter(adapter);

}

private final class ContactListItemAdapter extends ResourceCursorAdapter {

public ContactListItemAdapter(Context context, int layout, Cursor c) {

super(context, layout, c);

}

@Override

public void bindView(View view, Context context, Cursor cursor) {

final ContactListItemCache cache = (ContactListItemCache) view.getTag();

TextView nameView = cache.nameView;

QuickContactBadge photoView = cache.photoView;

// Set the name

cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX, cache.nameBuffer);

int size = cache.nameBuffer.sizeCopied;

cache.nameView.setText(cache.nameBuffer.data, 0, size);

final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX);

final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY);

cache.photoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey));

}

@Override

public View newView(Context context, Cursor cursor, ViewGroup parent) {

View view = super.newView(context, cursor, parent);

ContactListItemCache cache = new ContactListItemCache();

cache.nameView = (TextView) view.findViewById(R.id.name);

cache.photoView = (QuickContactBadge) view.findViewById(R.id.badge);

view.setTag(cache);

return view;

}

}

final static class ContactListItemCache {

public TextView nameView;

public QuickContactBadge photoView;

public CharArrayBuffer nameBuffer = new CharArrayBuffer(128);

}


ResourceCursorTreeAdapter

译者署名： xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 3.1 r1

结构

继承关系

public abstract classt ResourceCursorTreeAdapter extends CursorTreeAdapter

java.lang.Object

android.widget.BaseExpandableListAdapter

android.widget.CursorTreeAdapter

android.widget.ResourceCursorTreeAdapter

子类及间接子类

直接子类

SimpleCursorTreeAdapter

类概述

一个简单的可扩展的ExpandableListAdapter，通过在XML文件来创建views。你可以指定一个定义了views外观的XML文件。

构造函数

public ResourceCursorTreeAdapter (Context context, Cursor cursor, int collapsedGroupLayout, int expandedGroupLayout, int childLayout, int lastChildLayout)

构造函数。

参数

context 和正在运行的SimpleListItemFactory关联的ListView的上下文

cursor 数据库游标

collapsedGroupLayout 定义了收缩组的视图布局文件的资源标识

expandedGroupLayout 定义了展开组的视图布局文件的资源标识

childLayout 定义了除了最后一个的所有子视图的布局文件的资源标识

lastChildLayout 定义了一组中最后一个子视图的布局文件的资源标识

public ResourceCursorTreeAdapter (Context context, Cursor cursor, int collapsedGroupLayout, int expandedGroupLayout, int childLayout)

构造函数。

参数

context 和正在运行的SimpleListItemFactory关联的ListView的上下文

cursor 数据库游标

collapsedGroupLayout 定义了收缩组的视图布局文件的资源标识

expandedGroupLayout 定义了展开组的视图布局文件的资源标识

childLayout 定义了除了最后一个的所有子视图的布局文件的资源标识

public ResourceCursorTreeAdapter (Context context, Cursor cursor, int groupLayout, int childLayout)

构造函数。

参数

context 和正在运行的SimpleListItemFactory关联的ListView的上下文

cursor 数据库游标

groupLayout 为所有组定义了视图布局文件的资源标识

expandedGroupLayout 定义了展开组的视图布局文件的资源标识

childLayout 定义了除了最后一个的所有子视图的布局文件的资源标识

公共方法

protected abstract View newChildView (Context context, Cursor cursor, boolean isLastChild, ViewGroup parent)

创建一个新的子元素视图并持有指向数据的游标cursor。

参数

context 应用程序上下文对象

cursor 获取数据的游标对象，它已经移动到正确的位置

IsLastChild 子元素是否处于组中的最后一个

parent 新视图(View)所依附于的父对象。

返回值

新创建的视图

protected abstract View newGroupView (Context context, Cursor cursor, boolean isExpanded, ViewGroup parent)

创建一个新的组视图并持有组中指向数据的游标cursor。

参数

context 应用程序上下文对象

cursor 获取数据的游标对象，它已经移动到正确的位置

isExpanded 该组是否展开状态

parent 新视图(View)所依附于的父对象。

返回值

新创建的视图


Scroller

译者署名：pengyouhong

版本：Android 2.3 r1

public class Scroller extends Object

java.lang.Object

android.widget.Scrolle

类概述

这个类封装了滚动操作。滚动的持续时间可以通过构造函数传递，并且可以指定滚动动作的持续的最长时间。经过这段时间，滚动会自动定位到最终位置，并且通过computeScrollOffset()会得到的返回值为false，表明滚动动作已经结束。

构造函数

public Scroller (Context context)

使用缺省的持续持续时间和动画插入器创建一个Scroller。（译者注：interpolator这里翻译为动画插入器，见这里。）

public Scroller (Context context, Interpolator interpolator)

根据指定的动画插入器创建一个Scroller，如果指定的动画插入器为空，则会使用缺省的动画插入器（粘滞viscous）创建。

公共方法

public void abortAnimation ()

停止动画。与forceFinished(boolean)相反，Scroller滚动到最终x与y位置时中止动画。

参见

forceFinished(boolean)

public boolean computeScrollOffset ()

当想要知道新的位置时，调用此函数。如果返回true，表示动画还没有结束。位置改变以提供一个新的位置。

public void extendDuration (int extend)

延长滚动动画时间。此函数允许当使用setFinalX(int) or setFinalY(int) 时，卷动动作持续更长时间并且卷动更长距离。

参数

extend 卷动事件延长的时间，以毫秒为单位

参见

setFinalX(int)

setFinalY(int)

public void fling (int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY)

在fling（译者注：快滑，用户按下触摸屏、快速移动后松开）手势基础上开始滚动。滚动的距离取决于fling的初速度。

参数

startX 滚动起始点X坐标

startY 滚动起始点Y坐标

velocityX 当滑动屏幕时X方向初速度，以每秒像素数计算

velocityY 当滑动屏幕时Y方向初速度，以每秒像素数计算

minX X方向的最小值，scroller不会滚过此点。

maxX X方向的最大值，scroller不会滚过此点。

minY Y方向的最小值，scroller不会滚过此点。

maxY Y方向的最大值，scroller不会滚过此点。

public final void forceFinished (boolean finished)

强制终止的字段到特定值。（译者注：立即停止滚动？）

参数

finished 新的结束值

public final int getCurrX ()

返回当前滚动X方向的偏移

返回值

距离原点X方向的绝对值

public final int getCurrY ()

返回当前滚动Y方向的偏移

返回值

距离原点Y方向的绝对值

public final int getDuration ()

返回滚动事件的持续时间，以毫秒计算。

返回值

滚动持续的毫秒数

public final int getFinalX ()

返回滚动结束位置。仅针对“fling”手势有效

返回值

最终位置X方向距离原点的绝对距离

public final int getFinalY ()

返回滚动结束位置。仅针对“fling”操作有效

返回值

最终位置Y方向距离原点的绝对距离

public final int getStartX ()

返回滚动起始点的X方向的偏移

返回值

起始点在X方向距离原点的绝对距离

public final int getStartY ()

返回滚动起始点的Y方向的偏移

返回值

起始点在Y方向距离原点的绝对距离

public final boolean isFinished ()

返回scroller是否已完成滚动。

返回值

停止滚动返回true，否则返回false

public void setFinalX (int newX)

设置scroller的X方向终止位置

参数

newX 新位置在X方向距离原点的绝对偏移。

参见

extendDuration(int)

setFinalY(int)

public void setFinalY (int newY)

设置scroller的Y方向终止位置

参数

newY 新位置在Y方向距离原点的绝对偏移。

参见

extendDuration(int)

setFinalY(int)

public void startScroll (int startX, int startY, int dx, int dy)

以提供的起始点和将要滑动的距离开始滚动。滚动会使用缺省值250ms作为持续时间。

参数

startX 水平方向滚动的偏移值，以像素为单位。正值表明滚动将向左滚动

startY 垂直方向滚动的偏移值，以像素为单位。正值表明滚动将向上滚动

dx 水平方向滑动的距离，正值会使滚动向左滚动

dy 垂直方向滑动的距离，正值会使滚动向上滚动

public void startScroll (int startX, int startY, int dx, int dy, int duration)

以提供的起始点和将要滑动的距离开始滚动。

参数

startX 水平方向滚动的偏移值，以像素为单位。正值表明滚动将向左滚动

startY 垂直方向滚动的偏移值，以像素为单位。正值表明滚动将向上滚动

dx 水平方向滑动的距离，正值会使滚动向左滚动

dy 垂直方向滑动的距离，正值会使滚动向上滚动

duration 滚动持续时间，以毫秒计。

public int timePassed ()

返回自滚动开始经过的时间

返回值

经过时间以毫秒为单位

补充

文章精选

Scroller 粗浅理解

ScrollTextView - scrolling TextView for Android

示例代码

创建工程 MyScroler，或者将下类名“MyScroler”改为自己创建的工程，将下面代码直接覆盖生成的.java文件运行即可

package my.Scroller;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.Scroller;

public class MyScroler extends Activity {

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

LinearLayout lay1,lay2,lay;

private Scroller mScroller;

private boolean s1,s2;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mScroller = new Scroller(this);

lay1 = new LinearLayout(this){

@Override

public void computeScroll() {

if (mScroller.computeScrollOffset()) {

scrollTo(mScroller.getCurrX(), 0);

postInvalidate();

}

}

};

lay2 = new LinearLayout(this){

@Override

public void computeScroll() {

if (mScroller.computeScrollOffset()) {

// mScrollX = mScroller.getCurrX();

scrollTo(mScroller.getCurrX(), 0);

postInvalidate();

}

}

};

lay1.setBackgroundColor(this.getResources().getColor(android.R.color.darker_gray));

lay2.setBackgroundColor(this.getResources().getColor(android.R.color.white));

lay = new LinearLayout(this);

lay.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams p0 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);

this.setContentView(lay, p0);

LinearLayout.LayoutParams p1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);

p1.weight=1;

lay.addView(lay1,p1);

LinearLayout.LayoutParams p2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);

p2.weight=1;

lay.addView(lay2,p2);

Button tx = new Button(this);

Button tx2 = new Button(this);

tx.setText("Button1");

tx2.setText("Button2");

tx.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

if(!s1){

mScroller.startScroll(0, 0, 5, 10, 10);

s1 = true;

}else{

mScroller.startScroll(0, 0, -50, -10,10);

s1 = false;

}

}

});

tx2.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

if(!s2){

mScroller.startScroll(0, 0, 5, 20,10);

s2=true;

}else{

mScroller.startScroll(20, 20, -50, -20,10);

s2=false;

}

}

});

lay1.addView(tx);

lay2.addView(tx2);

}

}


ScrollView

译者署名： pengyouhong

版本：Android 2.3 r1

结构

继承关系

public class ScrollView extends FrameLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ScrollView

类概述

一种可供用户滚动的层次结构布局容器，允许显示比实际多的内容。ScrollView是一种 FrameLayout，意味需要在其上放置有自己滚动内容的子元素。子元素可以是一个复杂的对象的布局管理器。通常用的子元素是垂直方向的 LinearLayout，显示在最上层的垂直方向可以让用户滚动的箭头。

TextView 类也有自己的滚动功能，所以不需要使用ScrollView，但是只有两个结合使用，才能保证显示较多内容时候的效率。但只有两者结合使用才可以实现在一个较大的容器中一个文本视图效果。

ScrollView只支持垂直方向的滚动。

构造函数

public ScrollView (Context context)

创建一个默认属性的ScrollView实例。

public ScrollView (Context context, AttributeSet attrs)

创建一个带有attrs属性的ScrollView 实例。

public ScrollView (Context context, AttributeSet attrs, int defStyle)

创建一个带有attrs属性，并且指定其默认样式的ScrollView实例。

公共方法

public void addView (View child)

添加子视图。如果事先没有给子视图设置layout参数，会采用当前ViewGroup的默认参数来设置子视图。

参数

child 所添加的子视图

public void addView (View child, int index)

添加子视图。如果事先没有给子视图设置layout参数，会采用当前ViewGroup的默认参数来设置子视图。

参数

child 所添加的子视图

index 添加子视图的位置

public void addView (View child, int index, ViewGroup.LayoutParams params)

根据指定的layout参数添加子视图

参数

child 所添加的子视图

index 添加子视图的位置

params 为子视图设置的layout参数

public void addView (View child, ViewGroup.LayoutParams params)

根据指定的layout参数添加子视图。

参数

child 所添加的子视图

params 为子视图设置的layout参数

public boolean arrowScroll (int direction)

响应点击上下箭头时对滚动条滚动的处理。

参数

direction 按下的箭头所对应的方向

返回值

如果我们处理（消耗）了此事件返回true，否则返回false。

public void computeScroll ()

被父视图调用，用于必要时候对其子视图的值（mScrollX和mScrollY）进行更新。典型的情况如：父视图中某个子视图使用一个Scroller对象来实现滚动操作，会使得此方法被调用。

public boolean dispatchKeyEvent (KeyEvent event)

发送一个key事件给当前焦点路径的下一个视图。此焦点路径从视图树的顶层执行直到当前焦点视图。如果此视图为焦点视图，将为自己发送。否则，会为当前焦点路径的下一个节点发送。此方法也会激起一个key监听器。

参数

event 发送的key事件

返回值

事件被处理返回true，否则返回false。

public void draw (Canvas canvas)

手动绘制视图（及其子视图）到指定的画布(Canvas)。这个视图必须在调用这个函数之前做好了整体布局。当实现一个视图时，不需要继承这个方法；相反，你应该实现 onDraw(Canvas)方法。

参数

canvas 绘制视图的画布

public boolean executeKeyEvent (KeyEvent event)

当接收到key事件时，用户可以调用此函数来使滚动视图执行滚动，类似于处理由视图体系发送的事件。

参数

event 需要执行key的事件

返回值

事件被处理返回true，否则返回false。

public void fling (int velocityY)

滚动视图的滑动（fling）手势。（译者注： 如何监听android的屏幕滑动停止事件）

参数

velocityY Y方向的初始速率。正值表示手指/光标向屏幕下方滑动，而内容将向上滚动。

public boolean fullScroll (int direction)

对响应“home/end”短按时响应滚动处理。此方法将视图滚动到顶部或者底部，并且将焦点置于新的可视区域的最顶部/最底部组件。若没有适合的组件做焦点，当前的ScrollView会收回焦点。

参数

direction 滚动方向：FOCUS_UP 表示视图向上滚动；FOCUS_DOWN 表示视图向下滚动

返回值

若key事件被消耗(consumed)返回true，其他情况返回false。

public int getMaxScrollAmount ()

返回值

当前滚动视图响应箭头事件能够滚动的最大数。

public boolean isFillViewport ()

指示当前ScrollView的内容是否被拉伸以填充视图可视范围（译者注：viewport可视范围，参见决定Scrollviewer里面Control的可视范围）。

返回值

内容填充视图返回true，否则返回false。

public boolean isSmoothScrollingEnabled ()

返回值

按箭头方向滚动时，是否显示滚动的平滑效果。

public boolean onInterceptTouchEvent (MotionEvent ev)

实现此方法是为了拦截所有触摸屏幕时的运动事件。可以像处理发送给子视图的事件一样去监视这些事件，并且获取当前手势在任意点的ownership

使用此方法时候需要注意，因为它与 View.onTouchEvent(MotionEvent)有相当复杂的交互，并且前提需要正确执行 View.onTouchEvent(MotionEvent)。事件将按照如下顺序接收到：

1. 收到down事件

2. Down事件或者由视图组的一个子视图处理，或者被用户自己的onTouchEvent()方法处理；此处理意味你应该执行onTouchEvent()时返回true，这样才能继续看到剩下的手势（取代找一个父视图处理）。如果onTouchEvent()返回true时，你不会收到onInterceptTouchEvent()的任何事件并且所有对触摸的处理必须在onTouchEvent()中发生。

3. 如果此方法返回false，接下来的事件（up to and including the final up）将最先被传递当此，然后是目标的onTouchEvent()。

4. 如果返回true，将不会收到以下任何事件：目标view将收到同样的事件但是会伴随 ACTION_CANCEL，并且所有的更进一步的事件将会传递到你自己的onTouchEvent()方法中而不会再在这里出现。

参数

ev 体系向下发送的动作事件

返回值

如果将运动事件从子视图中截获并且通过onTouchEvent()发送到当前ViewGroup ，返回true。当前目标将会收到ACTION_CANCEL事件，并且不再会有其他消息传递到此。

（译者注：onInterceptTouchEvent和onTouchEvent调用时序）

public boolean onTouchEvent (MotionEvent ev)

执行此方法为了处理触摸屏幕的运动事件。

参数

ev 运动事件

返回值

事件被处理返回true，其它返回false。

public boolean pageScroll (int direction)

响应短按“page up/ down”时候对滚动的处理。此方法将向上或者向下滚动一屏，并且将焦点置于新可视区域的最上/最下。如果没有适合的component作为焦点，当前scrollView将收回焦点。

参数

direction 滚动方向：FOCUS_UP 表示向上翻一页，FOCUS_DOWN 表示向下翻一页。

返回值

此key事件被消耗(cosumed)返回true，其他返回false。

public void requestChildFocus (View child, View focused)

当父视图的一个子视图的要获得焦点时，调用此方法。

参数

child 要获得焦点的父视图的子视图。此视图包含了焦点视图。如果没有特殊徐要求，此视图实际上就是焦点视图。

focused 子视图的子孙视图并且此子孙视图是真正的焦点视图

public boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)

当组里的某个子视图需要被定位在屏幕的某个矩形范围时，调用此方法。重载此方法的 ViewGroup 可确认以下几点：

* 子项目将是组里的直系子项

* 矩形将在子项目的坐标体系中

重载此方法的 ViewGroup 应该支持以下几点：

* 若矩形已经是可见的，则没有东西会改变

* 为使矩形区域全部可见，视图将可以被滚动显示

参数

child 发出请求的子视图

rectangle 子项目坐标系内的矩形，即此子项目希望在屏幕上的定位

immediate 设为true，则禁止动画和平滑移动滚动条

返回值

进行了滚动操作的这个组（group），是否处理此操作。

public void requestLayout ()

当有改变引起当前视图重新布局时，调用此函数。它将规划一个视图树的layout路径。

public void scrollTo (int x, int y)

设置当前视图滚动到的位置。此函数会引起对 onScrollChanged(int, int, int, int)函数的调用并且会让视图更新。

当前版本取消了在子视图中的滚动。

参数

x 滚动到的X位置

y 滚动到的Y位置

public void setFillViewport (boolean fillViewport)

设置当前滚动视图是否将内容高度拉伸以填充视图可视范围（译者注：viewport可视范围，参见决定Scrollviewer里面Control的可视范围）。

参数

fillViewport 设置为true表示拉伸内容高度来适应视口边界；其他设为false。

public void setOverScrollMode (int mode)

为视图设置over-scroll模式。有效的over-scroll模式有 OVER_SCROLL_ALWAYS（缺省值），OVER_SCROLL_IF_CONTENT_SCROLLS（只允许当视图内容大过容器时，进行over-scrolling）和 OVER_SCROLL_NEVER。只有当视图可以滚动时，此项设置才起作用。

（译者注：这个函数是2.3 r1 中新增的，API Level 9。关于over-scroll这里译为弹性滚动，即，参见帖子：类似iPhone的弹性ListView滚动）

参数

mode The new over-scroll mode for this view.

public void setSmoothScrollingEnabled (boolean smoothScrollingEnabled)

用来设置箭头滚动是否可以引发视图滚动。

参数

smoothScrollingEnabled 设置箭头滚动是否可以引起内容的滚动的bool值

public final void smoothScrollBy (int dx, int dy)

类似于 scrollBy(int, int)，但是滚动时候是平缓的而不是立即滚动到某处。

参数

dx 在X方向滚动的像素数

dy 在Y方向滚动的像素数

public final void smoothScrollTo (int x, int y)

类似于 scrollTo(int, int)，但是滚动时候是平缓的而不是立即滚动到某处。

参数

x 要滚动到位置的X坐标

y 要滚动到位置的Y坐标

受保护方法

protected int computeScrollDeltaToGetChildRectOnScreen (Rect rect)

计算X方向滚动的总合，以便在屏幕上显示子视图的完整矩形（或者，若矩形宽度超过屏幕宽度，至少要填满第一个屏幕大小）。

参数

rect 矩形

返回值

滚动差值

protected int computeVerticalScrollOffset ()

计算垂直方向滚动条的滑块的偏移。此值用来计算滚动条轨迹的滑块的位置。

范围可以以任意单位表示，但是必须与 computeVerticalScrollRange()和 computeVerticalScrollExtent()的单位一致。

缺省的偏移是在当前视图滚动的偏移。

返回值

滚动条的滑块垂直方向的偏移。

protected int computeVerticalScrollRange ()

滚动视图的可滚动范围是所有子元素的高度。

返回值

由垂直方向滚动条代表的所有垂直范围，缺省的范围是当前视图的画图高度。

protected float getBottomFadingEdgeStrength ()

返回滚动底部的能见度。能见度的值的范围是0.0（没有消失）到1.0（完全消失）之间。缺省的执行返回值为0.0或者1.0，而不是他们中间的某个值。滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。

返回值

滚动底部能见度，值的范围在浮点数0.0f到1.0f之间。

protected float getTopFadingEdgeStrength ()

返回滚动顶部的能见度。能见度的值的范围是0.0（没有消失）到1.0（完全消失）之间。缺省的执行返回值为0.0或者1.0，而不是他们中间的某个值。滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。

返回值

滚动顶部能见度，值的范围在浮点数0.0f到1.0f之间。

protected void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)

要求当前视图的一个子视图测量自己，同时兼顾到当前视图的MeasureSpec的要求和它的空白。子视图必须有MarginLayoutParams。比较复杂的工作是在getChildMeasureSpec中完成的。

参数

child 需要自己测量的子视图

parentWidthMeasureSpec 当前视图要求的宽度

parentHeightMeasureSpec 当前视图要求的宽度

protected void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)

要求当前视图的一个子视图测量自己，同时兼顾到当前视图的MeasureSpec的要求和它的空白和边界。子视图必须有MarginLayoutParams。比较复杂的工作是在getChildMeasureSpec中完成的。

参数

child 需要测量的子视图

parentWidthMeasureSpec 当前视图要求的宽度

widthUsed 水平方向上由父视图使用的空白 (也可能是视图的其他子视图使用的)

parentHeightMeasureSpec 当前视图要求的宽度

heightUsed 垂直方向上由父视图使用的空白 (也可能是视图的其他子视图使用的)

protected void onLayout (boolean changed, int l, int t, int r, int b)

当前视图需要为子视图分配大小和位置时候调用，子类继承必须要重载此方法并调用自己子视图的layout函数。

参数

changed 当前视图的新的大小或者位置

l 相对父视图，左边界位置

t 相对父视图，上边界位置

r 相对父视图，右边界位置

b 相对父视图，下边界位置

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

测量视图以确定其内容宽度和高度。此方法被measure(int, int)调用。需要被子类重写以提供对其内容准确高效的测量。

约定：当重写此方法时，你必须调用setMeasuredDimension(int, int)来保存当前视图view的宽度和高度。不成功调用此方法将会导致一个IllegalStateException异常，是由measure(int, int)抛出。所以调用父类的onMeasure(int, int)方法是必须的。

父类的实现是以背景大小为默认大小，除非MeasureSpec（测量细则）允许更大的背景。子类可以重写onMeasure(int,int)以对其内容提供更佳的尺寸。

如果此方法被重写，那么子类的责任是确认测量高度和测量宽度要大于视图view的最小宽度和最小高度（getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()），使用这两个方法可以取得最小宽度和最小高度。

参数

widthMeasureSpec 受主窗口支配的水平空间要求。这个需求通过 View.MeasureSpec.进行编码。

     heightMeasureSpec 受主窗口支配的垂直空间要求。这个需求通过 View.MeasureSpec.进行编码。

protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)

被 overScrollBy(int, int, int, int, int, int, int, int, boolean)调用，来对一个over-scroll操作的结果进行响应。（译者注：这个函数是2.3 r1 中新增的，API Level 9）

参数

scrollX 新的X滚动像素值

scrollY 新的Y滚动像素值

clampedX 当scrollX被over-scroll的边界限制时，值为true

clampedY 当scrollY被over-scroll的边界限制时，值为true

protected boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)

当在滚动视图的子视图中查找焦点视图时，需要注意不要将焦点设置在滚动出屏幕外的控件上。此方法会比执行缺省的 ViewGroup 代价高，否则此行为也会设置为缺省

参数

direction 指定下列常量之一：FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT

previouslyFocusedRect 能够给出一个较好的提示的矩形（当前视图的坐标系统）表示焦点从哪里得来。如果没有提示为null。

返回值

是否取得了焦点

protected void onSizeChanged (int w, int h, int oldw, int oldh)

布局期间当视图的大小发生改变时调用。如果只是添加到视图，调用时显示的是旧值0。（译者注：也就是添加到视图时，oldw和oldh返回的是0）。

参数

w 视图当前宽度

h 视图当前高度

oldw 视图改变前的宽度

oldh 视图改变前的高度

补充

文章精选

Android ApiDemos/ScrollView2 添加自动滚动和智能焦点切换

[Android学习指南]使用ScrollView实现滚动效果

Android中ScrollView与ListView共用问题的解决方案


SearchView

译者署名：xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 3.1 r1

结构

继承关系

public class SearchView extends LinearLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.LinearLayout

android.widget.SearchView

类概述

一个为用户提供输入搜索查询和提交请求给搜索提供者的用户界面部件。显示查询建议或结果列表，如果有的话，运行用户选择一条查询建议或结果并启动与其相关的操作。

更多信息，参见Search文档。

内部类

interface SearchView.OnCloseListener

（译者注：当用户关闭SearchView时触发的回调函数）

interface SearchView.OnQueryTextListener

当查询文本改变时的回调函数。

interface SearchView.OnSuggestionListener

在建议上选择事件时的回调接口。

XML属性

属性名称 | 描述
android:iconifiedByDefault | 设置SearchView的默认状态。 如果为true，在没有被使用和点击展开时它将被图形化。
android:maxWidth | SearchView的可选择的最大宽度
android:queryHint | 当查询条件为空时显示的一个提示字符串。

公共方法

public CharSequence getQuery ()

返回当前文本域中的查询字符串

返回值

查询字符串

public CursorAdapter getSuggestionsAdapter ()

如果有的话，返回用于搜索建议的适配器。

返回值

查询适配器

public boolean isIconfiedByDefault ()

返回查询区域默认的图标状态。

public boolean isIconified ()

返回SearchView当前的图标状态

返回值

如果SearchView目前是图标状态，返回true，如果查询区域是完全可见的返回false

public boolean isQueryRefinementEnabled ()

返回查询优化是否是对所有的条目都起作用或者只是对特别的几个起作用

返回值

如果是对所有的条目起作用，刚返回true，否则返回false。

public boolean isSubmitButtonEnabled ()

返回当提交按钮在必须的时候是否可用或者从不显示

返回值

提交按钮在必须的时候是否自动启用

public boolean onKeyDown (int keyCode, KeyEvent event)

是否处理操作键按下事件

参数

keyCode 键入的键盘值，同时和键盘事件中的参数相同

event 输入键的完整事件记录

返回值

如果事件在这里被处理，返回true，不处理返回false

public void setIconified (boolean iconify)

图标化或者展开SearchView。当图标化时任何查询条件都被清除。这是一个临时的状态，不会重写被setIconifiedByDefault(boolean)设置的默认图标状态。如果默认的是图标化状态，则在用户关闭这个区域前都是false。如果默认的是展开状态，这里就是true，同时清除文本区域，但不关闭它。

参数

iconify true值会把SearchView收缩成一个图标，false值会展开它

返回值

查询字符串

public void setIconifiedByDefault (boolean iconified)

设置搜索栏的默认状态或者静止状态。如果是true，当被按下时，一个单一的搜索图标就会被默认显示，同时显示文本字段和其他按钮。如果默认的状态是图标，在按下关闭按钮时它就会收缩成那个状态。这个属性的改变会立即生效。

参数

iconified 搜索栏是否默认被图标化

public void setMaxWidth (int maxpixels)

以最宽的像素相看

相关的XML属性

android:maxWidth

public void setOnCloseListener (SearchView.OnCloseListener listener)

当用户关闭SearchView时设置一个监听器通知用户

参数

listener 设置用户关闭SearchView时的监听器

public void setOnQueryTextFocusChangeListener (View.OnFocusChangeListener listener)

设置当查询区域字段改变时通知用户的监听器

参数

listener 设置焦点更改时的监听器

public void setOnQueryTextListener (SearchView.OnQueryTextListener listener)

为用户在SearchView内的操作设置监听器

参数

listener 当用户在SearchView操作时比如说点击按钮或者输入查询内容时，设置接收回调的监听器对象

public void setOnSearchClickListener (View.OnClickListener listener)

设置按钮被按下时的监听器。在默认情况下当文本字段不可见时才起作用，调用setIconified(false)也可以通知这个监听器。

参数

listener 当搜索按钮被点击或者文本字段编辑取消图形化时通知监听器

public void setOnSuggestionListener (SearchView.OnSuggestionListener listener)

设置当一条搜索建议被选中或者点击的时候的监听器

参数

listener 选择搜索建议事件的监听器

public void setQuery (CharSequence query, boolean submit)

设置文本区域的一个查询字符串并选择提交和查询。

参数

query 查询字符串。代替在文本区域已经存在的查询文本

submit 是否立即提交查询或者只更新文本区域的内容

public void setQueryHint (CharSequence hint)

设置在查询文本区域的提示文本。将覆盖SearchableInfo中的任何提示。

相关XML属性

android:queryHint

参数

hint 要显示的提示文本

public void setQueryRefinementEnabled (boolean enable)

指定如果精确查询按钮是否在每条建议的旁边显示或者是否根据运营商建议中的设置在个别项目的标志决定。点击精确查询的按钮会用建议中的文本替换查询文本区域中的字段。这个标志只是在一个SearchableInfo中指定setSearchableInfo(SearchableInfo)且不使用定制的适配器时起作用。

参数

enable 如果所有的条目都有一个精确查询按钮刚为true，如果只有带精确查询标志的条目需要按钮，则为false。

参见

SUGGEST_COLUMN_FLAGS

FLAG_QUERY_REFINEMENT

public void setSearchableInfo (SearchableInfo searchable)

给SearchView设置SearchableInfo。SearchableInfo中的属性用来显示标签，提示(hints)，搜索建议，创建打开查询结果和控制其他功能比如一个声音按钮的intents。

参数

searchable 对于一个特殊的activiey或者，能从SearchManager中检索的SearchableInfo，全局的搜索提供者。

public void setSubmitButtonEnabled (boolean enabled)

当查询不为空时，显示一个提交按钮。如果SearchView被用来填充当前activity的内容，并且不会启动一个单独的activity，这里提交按钮会消失。

参数

enabled 设置为True时显示一个提交请求的按钮，当不需要请求按钮时设置为false。

public void setSuggestionsAdapter (CursorAdapter adapter)

如果你愿意，你可以设置一个定制的适配器。否则使用默认的适配器来显示和SearchableInfo相关的建议提供者的建议。

参见

setSearchableInfo(SearchableInfo)

补充

文章精选

Android ApiDemo示例解析(36)：App->Search->Invoke Search

SearchView默认扩展

SearchViewを使用してListViewのアイテムにフィルターをかける


SearchView.OnCloseListener

译者署名：xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 3.0 r1

结构

继承关系

public static interface SearchView.OnCloseListener

android.widget.SearchView.OnCloseListener

公共方法

public abstract boolean onClose()

当用户尝试关闭SearchView的时候调用本方法。

返回值

如果用户想重写默认清除文本域的动作，返回true，否则返回false。


SearchView.OnQueryTextListener

译者署名：xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 3.0 r1

结构

继承关系

public static interface SearchView.OnQueryTextListener

android.widget.SearchView.OnQueryTextListener

类概述

查询内容发生改变时调用

公共方法

public abstract boolean onQueryTextChange (String newText)

当用户改变查询内容的时候调用

参数

newText 查询的文本字段的新内容

返回值

如果SearchView执行默认的动作，显示可能出现的建议，刚返回false。如果动作由监听器处理，刚返回true

public abstract boolean onQueryTextSubmit (String query)

当用户提交请求时调用。这可能是因为在键盘上按下一个键或者点击一个提交按钮。这个监听器可以通过返回true来重写标准的动作，指明由它来处理提交请求。否则返回false让SearchView把这个请求转发到与之关联的intent去处理。

参数

query 要提交的查询内容

返回值

如果查询请求被监听器处理，刚返回true，如果SearchView执行默认的动作则返回false


SearchView.OnSuggestionListener

译者署名：xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 2.3 r1

结构

继承关系

Public static interface SearchView.OnSuggestionListener

android.widget.SearchView.OnSuggestionListener

类概述

选中搜索建议时的回调接口。当SearchableInfo 通过setSearchableInfo(SearchableInfo).特别指定时，才调用这些回调函数。

公共方法

public abstract boolean onSuggestionClick (int position)

当点击一条搜索建议时调用

参数

position 在建议列表中的点击项的绝对位置。

返回值

如果监听器处理这个事件，并且重写默认的处理方法，处理发送的intent请求或者是在这条目中指定的查询请求，刚返回true。否则返回false。

public abstract boolean onSuggestionSelect (int position)

通过导航选中搜索建议时调用

参数

position 在建议列表中绝对位置。

返回值

如果监听器处理这个事件，并且重写基于选中条目的处理方法，刚返回true。否则返回false。


SeekBar

译者：madgoat

博客：http://madgoat.cn/

2010-10-22

版本：Android 2.2 r1

public class SeekBar extends AbsSeekBar

java.lang.Object

android.view.View

android.widget.ProgressBar

android.widget.AbsSeekBar

android.widget.SeekBar

概述

SeekBar是ProgressBar的扩展，在其基础上增加了一个可滑动的滑片(注：就是那个可拖动的图标)。用户可以触摸滑片并向左或向右拖动，再或者可以使用方向键都可以设置当前的进度等级。不建议把可以获取焦点的widget放在SeekBar的左边或右边。

SeekBar可以附加一个 SeekBar.OnSeekBarChangeListener以获得用户操作的通知。

内部类

接口 SeekBar.OnSeekBarChangeListener

一个回调函数用来当进度等级发生改变时通知客户端

XML属性

属性名称 | 描述
android:thumb | Seekbar上绘制的thumb（可拖动的那个图标）

公共方法

public void setOnSeekBarChangeListener (SeekBar.OnSeekBarChangeListener l)

设置一个监听器以接受seekbar进度改变时的通知。同时提供用户在SeekBar上开始和停止触摸手势时的通知。

参数

l SeekBar的通知监听对象

参见

SeekBar.OnSeekBarChangeListener

补充

文章链接

在android里做一个竖着的seekbar

http://blog.csdn.net/saintswordsman/archive/2010/01/23/5248233.aspx

Android UI设计 SeekBar拖动条用法

http://www.pocketdigi.com/20100813/36.html

例子

Java：

import android.app.Activity;

import android.os.Bundle;

import android.widget.SeekBar;

import android.widget.Toast;

import android.widget.SeekBar.OnSeekBarChangeListener;

/**

* @author madgoat.fan

*

*/

public class SeekBarDemo extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.seekbardemo);

final SeekBar seekBar1 = (SeekBar) this.findViewById(R.id.seekBar1);

seekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

// TODO Auto-generated method stub

}

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

// TODO Auto-generated method stub

}

@Override

public void onProgressChanged(SeekBar seekBar, int progress,

boolean fromUser) {

// TODO Auto-generated method stub

Toast.makeText(SeekBarDemo.this,

String.valueOf(seekBar1.getProgress()),

Toast.LENGTH_SHORT).show();

}

});

}

}

XML:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent" android:layout_height="fill_parent"

>

<SeekBar android:id="@+id/seekBar1" android:layout_width="fill_parent"

android:layout_height="wrap_content" android:max="100"

></SeekBar>

</LinearLayout>

整理人：农民伯伯


SeekBar.OnSeekBarChangeListener

译者：madgoat

博客：http://madgoat.cn/

2010-10-22

版本：Android 2.2 r1

public static interface SeekBar.OnSeekBarChangeListener

android.widget.SeekBar.OnSeekBarChangeListener

概述

当进度改变后用于通知客户端的回调函数。这包括用户通过手势、方向键或轨迹球触发的改变， 以及编程触发的改变。

公共方法

public abstract void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser)

通知进度已经被修改。客户端可以使用fromUser参数区分用户触发的改变还是编程触发的改变。

参数

seekBar 当前被修改进度的SeekBar

progress 当前的进度值。此值的取值范围为0到max之间。Max为用户通过setMax(int)设置的值，默认为100

fromUser如果是用户触发的改变则返回True

public abstract void onStartTrackingTouch (SeekBar seekBar)

通知用户已经开始一个触摸拖动手势。客户端可能需要使用这个来禁用seekbar的滑动功能。

参数

seekBar 触摸的SeekBar

public abstract void onStopTrackingTouch (SeekBar seekBar)

通知用户触摸手势已经结束。户端可能需要使用这个来启用seekbar的滑动功能。

参数

seekBar 触摸的SeekBar

整理人：农民伯伯


SimpleAdapter

译者署名： 德罗德

译者链接：http://sparkrico.javaeye.com

翻译时间：2010-11-03

版本：Android 2.2 r1

结构

继承关系

public interface SimpleAdapter extends Adapter

java.lang.Object

android.widget.BaseAdapter

android.widget.SimpleAdapter

类概述

这是一个简单的适配器，可以将静态数据映射到XML文件中定义好的视图。你可以指定数据支持的列表如ArrayList组成的Map。在ArrayList中的每个条目对应List中的一行。Maps包含每行数据。你可以指定一个定义了被用于显示行的视图XML文件，通过关键字映射到指定的视图。绑定数据到视图分两个阶段，首先，如果一个SimpleAdapter.ViewBinder是有效的，setViewValue(android.view.View, Object, String)将被调用。如果返回值是真，绑定完成了。如果返回值为假，下面的视图将按以下顺序去处理：

l 一个实现了Checkable的视图（例如CheckBox），期望绑定值是一个布尔类型。

l TextView期望绑定值是一个字符串类型，通过调用setViewText(TextView, String)绑定。

l ImageView期望绑定值是一个资源id或者一个字符串，通过调用setViewImage(ImageView, int) 或 setViewImage(ImageView, String)。

如果没有一个合适的绑定发生将会抛出IllegalStateException。

构造函数

public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

构造函数

参数

context 关联SimpleAdapter运行着的视图的上下文。

data 一个Map的列表。在列表中的每个条目对应列表中的一行，应该包含所有在from中指定的条目

resource 一个定义列表项目的视图布局的资源唯一标识。布局文件将至少应包含哪些在to中定义了的名称。

from 一个将被添加到Map上关联每一个项目的列名称的列表

to 应该在参数from显示列的视图。这些应该全是TextView。在列表中最初的N视图是从参数from中最初的N列获取的值。

公共方法

public int getCount ()

获取数据集中记录总行数

public View getDropDownView (int position, View convertView, ViewGroup parent)

获得一个在指定位置上显示下拉弹出数据的视图。

参数

position 想得到项目视图的索引

convertView 如果可能旧有的视图重新使用。注解：在使用之前应该检查这个视图不是空的并且类型合适。如果转换视图显示正确的数据是不可能的，这个方法能够创建一个新的视图

parent 视图最终将依附的父对象

返回值

一个对应指定位置的数据的视图。

public Filter getFilter ()

返回一个可以通过一种过滤模式来约束数据的过滤器。

这个方法通常被Adapter类实现。

返回值

一个用于约束数据的过滤器

public abstract Object getItem (int position)

获取数据集中指定位置上的数据项目

参数

position 在adapter中我们想得到项目的位置。

返回值

指定位置上的数据。

public abstract long getItemId (int position)

获取数据集中指定位置上的行ID。

参数

position 在adapter中我们想得到的行ID的项目的位置。

返回值

指定位置上的数据。

public abstract View getView (int position, View convertView, ViewGroup parent)

获取一个显示数据集中指定位置数据段视图。可以手动创建视图，或者从XML设计文件填充。当视图从XML设计文件填充时，父视图（如GridView，ListView等）将接受默认的设计参数，除非使用inflate(int, android.view.ViewGroup, boolean)去指定一个根视图和防止依附于根视图。

参数

position 我们想要的在adapter中的数据项目的位置

convertView 如果可能旧有的视图重新使用。注解：在使用之前应该检查这个视图不是空的并且类型合适。如果转换视图显示正确的数据是不可能的，这个方法能够创建一个新的视图

parent 视图最终将依附的父对象。

返回值

一个在指定位置上相应的数据的视图。

public SimpleAdapter.ViewBinder getViewBinder ()

返回被用来绑定数据到视图的 SimpleAdapter.ViewBinder 。

返回值

一个ViewBinder ，如果binder不存在则返回null

参见

setViewBinder(android.widget.SimpleAdapter.ViewBinder)

public void setDropDownViewResource (int resource)

设置创建下拉视图的布局资源

参数

resource 定义下拉视图的布局资源

参见

getDropDownView(int, android.view.View, android.view.ViewGroup)

public void setViewBinder (SimpleAdapter.ViewBinder viewBinder)

设置binder用于绑定数据到视图

参数

viewBinder 用于绑定数据到视图的binder可以设置为null，可用于删除存在的binder

参见

getViewBinder()

public void setViewImage (ImageView v, int value)

调用bindView去给ImageView设置图像，但只有当ViewBinder不存在或者如果存在的ViewBinder无法处理绑定到一个ImageView时才调用。如果提供的数据是一个整形时，setViewImage(ImageView, String)方法将被本方法替代

参数
v 接收图像的ImageView

value 从数据集获取数据到值

参见

setViewImage(ImageView, String)

public void setViewImage (ImageView v, String value)

调用bindView去给ImageView设置图像，但只有当ViewBinder不存在或者如果存在的ViewBinder无法处理绑定到一个ImageView时才调用。默认的，这个值被作为一个图像资源来对待。如果这个值作为一个图像的Uri来使用。如果提供的数据不是一个整形时，setViewImage(ImageView, int)方法将被本方法替代

参数

v 接收图像的ImageView

value 从数据集获取数据到值

参见

setViewImage(ImageView, int)

public void setViewText (TextView v, String text)

调用bindView去给TextView设置文本，但只有当ViewBinder不存在或者如果存在的ViewBinder无法处理绑定到一个TextView时才调用

参数

v 将接收文本的TextView

text 被设置到TextView的文本

补充

文章精选

简约而不简单——Android SimpleAdapter

android listview组件之ArrayAdapter，SimpleAdapter

Android用simpleAdapter来直接显示BMP图片（有ViewBinder用法）

示例代码

private ListView lv;

    private List<Map<String,String>> data;

    private SimpleAdapter sAdapter;

lv = (ListView)findViewById(R.id.listview);

data = new ArrayList<Map<String, Object>>();

    for (int i = 0; i < 10; i++) {

            Map<String, Object> map = new HashMap<String, Object>();

            map.put("title", "APPLE");

            map.put("content", "can eat");

map.put("check", true);

map.put("check1", "true");

            map.put("image", R.drawable.icon);

            data.add(map);

}

sAdapter = new SimpleAdapter(getApplicationContext(),

               data,

               R.layout.item,

        new String[]{"title","content","check","check1","image"},

        new int[]{R.id.title,R.id.content,R.id.check,R.id.check1, R.id.image});

lv.setAdapter(sAdapter);


SimpleAdapter.ViewBinder

译者署名： 德罗德

译者链接：http://sparkrico.javaeye.com

翻译时间：2010-11-25

结构

继承关系

public static interface SimpleAdapter.ViewBinder

android.widget.SimpleAdapter.ViewBinder

类概述

SimpleAdapter的外部数据(external clients)可以使用这个类将值绑定到视图。你应该用这个类绑定值到那些不能直接通过SimpleAdapter支持的视图，或者改变通过SimpleAdapter支持绑定的方法的视图。

（译者注：如果SimpleAdapter设置了ViewBinder则使用Viewbinder的绑定规则，否则使用SimpleAdapter的默认绑定规则）

公共方法

public abstract boolean setViewValue (View view, Object data, String textRepresentation)

绑定指定数据到指定的视图。 当通过调用ViewBinder绑定数据时，此方法必须返回真。如果这个方法返回假，SimpleAdapter将尝试通过其内部默认的方法绑定数据。

参数

view 要绑定数据的视图

data 要绑定到视图的数据

textRepresentation 一个表示所支持数据的安全的字符串：结果是data.toString()或者空字符串，但不会是null。

返回值

如果数据绑定到视图返回真，否则返回假。

补充

文章链接

SimpleAdapter.ViewBinder这个接口对于ListActivity有什么效果

Adapter应用总结


SimpleCursorAdapter

译者署名： 深夜未眠

译者链接：http://chris1012f.javaeye.com/

版本：Android 3.0 r1

结构

继承关系

public class SimpleCusrorAdapter extends ResourceCusorAdpater

java.lang.Object

android.widget.BaseAdapter

android.widget.CursorAdapter

android.widget.ResourceCursorAdapter

android.widget.SimpleCursorAdapter

类概述

这是一个用起来很方便的适配器类，它主要将Cursor与TexiView或ImageView进行映射。比如，你想设定要展示三列，那么当做好绑定之后，视图就会展示你设定好的那些列；当然了，视图的外观是定义在XML文件里面的，你只需用这个类与视图做好绑定就可以了。与视图绑定有两个阶段。第一阶段：如果 SimpleCursorAdapter.ViewBinder 可用，将会调用 setViewValue(android.view.View, android.database.Cursor, int)方法。该方法返回true就说明绑定成功，否则返回false ，这就到了第二阶段，SimpleCursorAdapter内部开始自行绑定，过程是这样的，若绑定到TextView上，调用setViewText();若绑定到ImageView上，调用setViewImage();如果视图不是TextView或ImageView则抛出IllegalStateException异常。当使用带有过滤器的适配器时，例如，在APIDemo中有个AutoCompleteTextView的例子，我们能使用 SimpleCursorAdapter.CursorToStringConverter 和接口 FilterQueryProvider 来控制过滤过程。更多信息请参考 convertToString(android.database.Cursor) 和 runQueryOnBackgroundThread(CharSequence)。

内部类

public interface SimpleCusorAdapter.ViewBinder

这个内部接口可以在外部通过SimpleCursorAdapter.ViewBinder的方式进行Cursor 与View的绑定。

public interface SimpleCusorAdapter.CursorToStringConverter

这个内部接口可以在外部通过SimpleCursorAdapter.CursorToStringConverter的方式 定义怎样将Cursor转换成字符串。

构造函数

public SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to)

构造函数启动自动重新查询(auto-requery)。

这个构造器已被标记为弃用(@Deprecated) 。

该方法不推荐使用，Cursor查询操作是执行在应用程序的UI线程当中，那么会导致无响应的情况。另一种方式是使用LoaderManager和CursorLoader来进行。

（译者注：3.0已不推荐使用该构造方法）

参数

context 应用程序上下文，具体来说就是ListView所在的上下文当中。

layout 布局文件的资源定位标识符，也就是说标识了ListView中的item。那么这个布局文件至少包含了参数“to”中的传进来值。

c 数据库游标，如果游标不可用则为null。

from 列名字列表，表示着你要绑定到UI上的列。如果游标不可用则为null。

to 展示参数“from”中的列，也就是说ListView中的视图显示的是参数“from”的列值，这些视图应该都是TextView。如果游标不可用则为null。

public SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to,int flags)

该适配器类标准的构造函数。（译者注：3.0新添的构造方法）

参数

context 应用程序上下文，具体来说就是ListView所在的上下文当中。

layout 布局文件的资源定位标识符，也就是说标识了ListView中的item。那么这个布局文件至少包含了参数“to”中的传进来值。

c 数据库游标，如果游标不可用则为null。

from 列名字列表，表示着你要绑定到UI上的列。如果游标不可用则为null。

to 展示参数“from”中的列，也就是说ListView中的视图显示的是参数“from”的列值，这些视图应该都是TextView。如果游标不可用则为null。

flags 这个标志用来决定该适配器的行为。(译者注：Android3.0推荐我们传递CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER。设置标志用来添加一个监听器，监听着参数cursor的数据是否有更变。)

公共方法

public void bindView (View view, Context context, Cursor cursor)

绑定所有构造函数中的参数from（字段名）一一绑定到参数to（视图资源ID）。与视图绑定有两个阶段。第一阶段：如果 SimpleCursorAdapter.ViewBinder 可用，将会调用 setViewValue(android.view.View, android.database.Cursor, int)方法。该方法返回true就说明绑定成功，否则返回false ，这就到了第二阶段，SimpleCursorAdapter内部开始自行绑定，过程是这样的，若绑定到TextView上，调用setViewText();若绑定到ImageView上，调用setViewImage();如果视图不是TextView或ImageView则抛出IllegalStateException异常。

参数

view 已存在的视图(View)对象, 也就是早先new出来的。

context 应用程序上下文。

cursor 数据库游标。该游标已经移动到指定位置上。

异常

IllegalStateException 如果绑定的视图中不是TextView或是ImageView则会 抛出这个异常。

参见

bindView(android.view.View, android.content.Context, android.database.Cursor)

getViewBinder()

setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder)

setViewImage(ImageView, String)

setViewText(TextView, String)

public void changeCursorAndColumns(Cursor c, String[] from, int[] to)

同时更改Cursor与View的映射关系。

参数

c 数据库游标，如果游标不可用则为null。

from 列名字列表，表示着你要绑定到UI上的列。如果游标不可用则为null。

to 展示参数“from”中的列，也就是说ListView中的视图显示的是参数“from”的列值，这些视图应该都是TextView。如果游标不可用则为null。

public CharSequence convertToString (Cursor cursor)

通过CursorToStringConverter接口实现并返回一个CharSequence 类型的值，以表示指定的Cursor。如果没有设置CursorToStringConverter，那么就会用另外的方式进行转换。如果列数为-1，或者 cursor为null返回空串，否则返回cursor.toString()。

参数

cursor 转换为CharSequence的数据库游标。

返回值

返回一个不为null的CharSequence类型来表示参数cursor。

public SimpleCursorAdapter.CursorToStringConverter getCursorToStringConverter ()

返回自定义的SimpleCursorAdapter.CursorToStringConverter的实现。

返回值

如果没有设置SimpleCursorAdapter.CursorToStringConverter，则为null。

参考

setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)

getStringConversionColumn()

setStringConversionColumn(int)

convertToString(android.database.Cursor)

public int getStringConversionColumn ()

返回转换成String类型的列位置。

返回值

返回列位置，如果没有则返回-1。

参考

convertToString(android.database.Cursor)

setStringConversionColumn(int)

setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)

getCursorToStringConverter()

public SimpleCursorAdapter.ViewBinder getViewBinder ()

返回SimpleCursorAdapter.ViewBinder引用，这个ViewBinder用来将数据绑定到视图上的。

返回值

如果ViewBinder不存在，则返回null。

参考

bindView(android.view.View, android.content.Context, android.database.Cursor)

setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder)

public void setCursorToStringConverter (SimpleCursorAdapter.CursorToStringConverter cursorToStringConverter)

设置String转换器。

参数

cursorToStringConverter String转换器,设置为null就意味着移除。

参考

setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)

getStringConversionColumn()

setStringConversionColumn(int)

convertToString(android.database.Cursor)

public void setStringConversionColumn (int stringConversionColumn)

设置Cursor中的列要转换成String类型的位置。不过仅当未设置CursorToStringConverter时，这个列才会进行默认转换。

参数

stringConversionColumn 列位置，如果参数为-1，则使用默认转换机制。

参考

convertToString(android.database.Cursor)

getStringConversionColumn()

setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)

getCursorToStringConverter()

public void setViewBinder (SimpleCursorAdapter.ViewBinder viewBinder)

设置视图绑定器。

参数

viewBinder 视图绑定器，可用为null删除现有的绑定器。

参考

bindView(android.view.View, android.content.Context, android.database.Cursor)

getViewBinder()

public void setViewImage (ImageView v, String value)

仅当ViewBinder不存在或是当ViewBinder不为ImageView绑定时（也就是setViewValue()返回false），则这个方法会被bindView()调用，以便为ImageView设置图片。默认情况下，参数value作为图片资源ID来看待，否则，会视为图片的Uri。 另外还可以通过过滤器来获得更灵活的设置。

参数

v 图片控件引用

value 图片资源ID，是从Cursor获取到的。

public void setViewText (TextView v, String text)

仅当ViewBinder不存在或是当ViewBinder不为TextView绑定时（也就是setViewValue()返回false），则这个方法会被bindView()调用，以便为TextView设置文本。可用重写适配器从数据库中检索过滤字符串。

参数

v 文本控件引用

value 为文本控件设置的文本信息（译者注：是从Cursor获取到的）。

public Cursor swapCursor (Cursor c)

交换两个Cursor的列以及它们的数据，并最终返回的还是旧的Cursor。不同于 changeCursor(Cursor)的是，旧的Cursor非但不会关闭，而且还会返回出去。（译者注： 3.0新添的方法）

参数

c 新的Cursor对象。

返回值

返回旧的Cursor引用，如果参数cursor不可用，则返回null。如果参数cursor与原来的Cursor引用相同，那么也返回null。

补充

文章精选

ArrayAdapter和SimpleCursorAdapter例子

Android API : SimpleCursorAdapter()


SimpleCursorAdapter.CursorToStringConverter

译者署名： 深夜未眠

译者链接：http://chris1012f.javaeye.com/

版本：Android 3.0 r1

结构

继承关系

public static interface SimpleCusrorAdapter.CursorToStringConverter

java.lang.Object

android.widget.SimpleCursorAdapter.CursorToStringConverter

类概述

这个内部接口可以在外部通过SimpleCursorAdapter.CursorToStringConverter的方式定义怎样将Cursor转换成字符串。

参见

convertToString(android.database.Cursor)

公共方法

public abstract CharSequence convertToString (Cursor cursor)

返回CharSequence类型的值，用来表示参数cursor。

参数

cusor 需要转换成CharSequence类型的数据库游标。

返回值

返回代表参数cursor的非空字符串。


SimpleCursorAdapter.ViewBinder

译者署名： 深夜未眠

译者链接：http://chris1012f.javaeye.com/

版本：Android 3.0 r1

结构

继承关系

public static interface SimpleCusrorAdapter.ViewBinder

java.lang.Object

android.widget.SimpleCursorAdapter.ViewBinder

类概述

这个内部接口可以在外部通过SimpleCursorAdapter.ViewBinder的方式进行Cursor 与View的绑定。Android推荐我们采用这种方式进行绑定操作，而不是沿用SimpleCursorAdapter内部的方式。

参见

bindView(android.view.View, android.content.Context, android.database.Cursor)

setViewImage(ImageView, String)

setViewText(TextView, String)

公共方法

public abstract boolean setViewValue (View view, Cursor cursor, int columnIndex)

将指定的列数据绑定到指定的视图上。当ViewBinder处理时，这个方法必须返回true。如果这个方法返回false， SimpleCursorAdapter将用自己的方式进行绑定操作。

参数

view 被绑定的视图。

cursor 数据库游标，绑定数据从它这里获取

columnIndex 列位置，能够在数据库游标中寻找到。

返回值

返回true意味着数据与视图已经绑定上，否则为未绑定上。


SimpleCursorTreeAdapter

译者署名： 深夜未眠

译者链接：http://chris1012f.javaeye.com/

翻译时间：2011-3-7

版本：Android 3.0 r1

结构

继承关系

public abstract class SimpleCusrorTreeAdapter extends

ResourceCusorTreeAdpater

java.lang.Object

android.widget.BaseExpandableListAdapter

android.widget.CursorTreeAdapter

android.widget.ResourceCusorTreeAdapter

android.widget.SimpleCursorTreeAdapter

类概述

这是一个用起来很方便的适配器类，它主要将Cursor与在XML文件中定义的TextView或ImageView进行映射。比如，你想设定要展示三列，那么当做好绑定之后，视图就会展示你设定好的那些列；当然了，视图的外观是定义在XML文件里面的，你只需用这个类与视图做好绑定就可以了。（译者注：Android推荐我们尽可能的将组视图和子视图分离开，也就是说不要把整体定义在一个布局文件当中。）与视图绑定有两个阶段。第一阶段：如果使用 SimpleCursorTreeAdapter.ViewBinder 时，那么就会调用 setViewValue(android.view.View, android.database.Cursor, int)方法。该方法返回true就说明绑定成功，否则返回false，这就到了第二阶段，SimpleCursorAdapter内部开始自行绑定，过程是这样的，若绑定到TextView上，调用 setViewText(TextView, String)；若绑定到ImageView上，调用 setViewImage(ImageView, String),如果视图不是TextView或ImageView则抛出IllegalStateException异常。

内部类

public interface SimpleCursorTreeAdapter.ViewBinder

这个内部接口可以在外部通过SimpleCursorTreeAdapter.ViewBinder的方式进行 Cursor与View的绑定。

构造函数

public SimpleCursorTreeAdapter (Context context, Cursor cursor, int collapsedGroupLayout, int expandedGroupLayout, String[] groupFrom, int[] groupTo, int childLayout, int lastChildLayout, String[] childFrom, int[] childTo)

构造函数。

参数

context 上下文，多指ExpandableListView的上下文

cursor 数据库游标

collapsedGroupLayout 布局资源文件标识ID，其定义的是收缩时的ExpandableListView布局样式，并且内部至少要包含参数“groupTo”中指定的视图ID。

expandedGroupLayout 布局资源文件标识ID，其定义的是展开时的ExpandableListView布局样式，并且内部至少要包含参数“groupTo”中指定的视图ID。

groupFrom 列名列表，显示ExpandableListView的组节点。

groupTo 展示参数“groupFrom”中的列，也就是说ExpandableListView中的视图显示的是参数 “groupFrom”的列值，它们应该都是TextView或是ImageView。

childLayout 布局资源文件标识ID，其定义的是子视图的布局样式 (不包括最后一个子视图)，内部至少要包含参数 “childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID，其定义的是最后一个子视图的布局样式，内部至少要包含参数“childTo”中指定的视图ID。

lastChildLayout 布局资源文件标识ID，其定义的是最后一个子视图的布局样式，内部至少要包含参数“childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID，其定义的是最后一个子视图的布局样式，内部至少要包含参数“childTo”中指定的视图ID。

childFrom 列名列表，显示ExpandableListView的子节点。

childTo 展示参数“childFrom ”中的列，也就是说ExpandableListView中的视图显示的是参数 “childFrom ”的列值，它们应该都是TextView或是ImageView。

public SimpleCursorTreeAdapter (Context context, Cursor cursor, int collapsedGroupLayout, int expandedGroupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo)

构造函数。（译者注：该构造函数只是少了一个参数lastChildLayout）

参数

context 上下文，多指ExpandableListView的上下文

cursor 数据库游标

collapsedGroupLayout 布局资源文件标识ID，其定义的是收缩时的ExpandableListView布局样式，并且内部至少要包含参数“groupTo”中指定的视图ID。

expandedGroupLayout 布局资源文件标识ID，其定义的是展开时的ExpandableListView布局样式，并且内部至少要包含参数“groupTo”中指定的视图ID。

groupFrom 列名列表，显示ExpandableListView的组节点。

groupTo 展示参数“groupFrom”中的列，也就是说ExpandableListView中的视图显示的是参数 “groupFrom”的列值，它们应该都是TextView或是ImageView。

childLayout 布局资源文件标识ID，其定义的是子视图的布局样式 (不包括最后一个子视图)，内部至少要包含参数 “childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID，其定义的是最后一个子视图的布局样式，内部至少要包含参数“childTo”中指定的视图ID。

childFrom 列名列表，显示ExpandableListView的子节点。

childTo 展示参数“childFrom ”中的列，也就是说ExpandableListView中的视图显示的是参数 “childFrom ”的列值，它们应该都是TextView或是ImageView。

public SimpleCursorTreeAdapter (Context context, Cursor cursor, int groupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo)

构造函数。

参数

context 上下文，多指ExpandableListView的上下文

cursor 数据库游标

groupLayout 显示组元素的资源文件。该资源文件定义了如何显示组元素。该布局文件必须至少包括groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到)

groupFrom 列名列表，显示ExpandableListView的组节点。

groupTo 展示参数“groupFrom”中的列，也就是说ExpandableListView中的视图显示的是参数 “groupFrom”的列值，它们应该都是TextView或是ImageView。

childLayout 布局资源文件标识ID，其定义的是子视图的布局样式 (不包括最后一个子视图)，内部至少要包含参数 “childTo”中指定的视图ID。lastChildLayout布局资源文件标识ID，其定义的是最后一个子视图的布局样式，内部至少要包含参数“childTo”中指定的视图ID。

childFrom 列名列表，显示ExpandableListView的子节点。

childTo 展示参数“childFrom ”中的列，也就是说ExpandableListView中的视图显示的是参数 “childFrom ”的列值，它们应该都是TextView或是ImageView。

公共方法

public SimpleCursorAdapter.ViewBinder getViewBinder ()

返回 SimpleCursorTreeAdapter.ViewBinder 引用，这个ViewBinder用来将数据绑定到 视图上的。

返回值

如果ViewBinder不存在，则返回null。

参考

setViewBinder(android.widget.SimpleCursorTreeAdapter.ViewBinder)

public void setViewBinder (SimpleCursorTreeAdapter.ViewBinder viewBinder)

. 设置视图绑定器。

参数

viewBinder 视图绑定器。可以设置为null来删除已经存在的绑定器。

参考

getViewBinder()

public void setViewText (TextView v, String text)

仅当ViewBinder不存在或是当ViewBinder不为TextView绑定时（也就是setViewValue()返回false），则这个方法会被bindView()调用，以便为TextView设置文本。可重写适配器从数据库中检索过滤字符串。

参数

v 文本控件引用

value 为文本控件设置的文本信息（译者注：是从Cursor获取到的）。

受保护方法

protected void bindChildView (View view, Context context, Cursor cursor, boolean isExpanded)

通过参数cursor将数据绑定到已有的子视图上。。

参数

view 已有视图，返回之前调用newChildView创建的视图。

context 应用程序上下文

cursor 用于获取数据的Coursor。Coursor已经移到正确的位置。

isLastChild 子元素是否处于组中的最后一个

protected void bindGroupView (View view, Context context, Cursor cursor, boolean isExpanded)

通过参数cursor将数据绑定到已有组视图上。

参数

view 已有组视图，返回之前调用newGroupView创建的视图。

context 应用程序上下文

cursor 用于获取数据的Coursor。Coursor已经移到正确的位置。

isExpanded 组视图是否呈展开状态

protected void setViewImage (ImageView v, String value)

这个方法会被bindView()调用，以便为ImageView设置图片。默认情况下，参数value作为图片资源ID来看待，否则会视为图片的Uri。 另外还可以通过过滤器来获得更灵活的设置。

参数

v 图片控件引用

value 图片资源ID，是从Cursor获取到的。

补充

文章精选

android播放器（music player）源码分析2


SimpleCursorTreeAdapter.ViewBinder

译者署名： 深夜未眠

译者链接：http://chris1012f.javaeye.com/

翻译时间：2011-3-3

版本：Android 3.0 r1

结构

继承关系

public static interface SimpleCusrorTreeAdapter.ViewBinder

java.lang.Object

android.widget.SimpleCursorTreeAdapter.ViewBinder

类概述

这个内部接口可以在外部通过SimpleCursorTreeAdapter.ViewBinder的方式进行 Cursor与View的绑定。Android推荐我们采用这种方式进行绑定操作，而不是沿用SimpleCursorTreeAdapter内部的方式。

参见

setViewImage(ImageView, String)

    setViewText(TextView, String)

公共方法

public abstract boolean setViewValue (View view, Cursor cursor, int columnIndex)

将指定的列数据绑定到指定的视图上。当ViewBinder处理绑定时，这个方法必须返回true；否则SimpleAdapter将尝试通过其内部默认的方法绑定数据。

参数

view 被绑定的视图。

cursor 数据库游标，绑定数据从它这里获取

columnIndex 列位置，能够在数据库游标中寻找到。

返回值

返回true意味着数据与视图已经绑定上，否则为未绑定上。


SimpleExpandableListAdapter

译者署名： 天涯明月刀

译者博客：http://sd6733531.javaeye.com/

版本：Android 2.3 r1

结构

继承关系

public abstract class SimpleExpandableListAdapter extends BaseExpandableListAdapter

java.lang.Object

android.widget.BaseExpandableListAdapter

android.widget.SimpleExpandableListAdapter

类概述

一个使用Map存储组元素和子元素的静态数据，使用XML资源文件定义组元素和子元素View如何显示的简单适配器。你可以区分指定组元素返回的数据是List<Map>类型。在ArrayList中的每个实体对应ExpandalbeList中的一个组。实体中的Map列表包含了组下的每行数据。你也可以指定一个XML文件来定义用于在组元素的View的显示。此时Map中的键值将与指定的View(XML中定义的view id)对应起来。子元素的处理情况类似。注意当可折叠的深度若不只1层，返回的数据将被指定为List类型。首个List对应子元素中所代表的组，第二个List对应孙子元素在子元素组中的位置。Map亦将支持这样的特殊元素。（子元素嵌套组元素的情况）

（译者注：ExpandableList支持深度大于1的情况。在andorid自带的ApiDomos的例子中有这个的代码：App/View/ExpandableList3）。

构造函数

public SimpleExpandableListAdapter (Context context, List<? extends Map<String, ?>> groupData, int groupLayout, String[] groupFrom, int[] groupTo, List<? extends List<? extends Map<String, ?>>> childData, int childLayout, String[] childFrom, int[] childTo)

构造函数

参数

context 与 SimpleExpandableListAdapter 关联的 ExpandableListView 的上下文。

groupData 一个Maps列表(List)。集合中的每个字典项与可折叠列表中的每个组元素一致。字典项提供了组元素包含的所有数据，并包含所有在"groupFrom"中指定的记录。

groupLayout 显示组元素的资源文件。该资源文件定义了如何显示组元素。该布局文件必须至少包括groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到)

groupFrom 一个键值列表。对应与组相关联的Map中的键值。

grouptTo 组View应当显示groupFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个groupFrom参数获得列元素的数据。

childData 一个Map列表的列表。外部列表中的每个实体对应一个组(按照组的位置编号)。在内部列表的每个实体对应某个组的子元素(按照子元素的位置编号)。该Map对应了子元素的数据。(按照childFrom数组中的值编号)。该Map包含了每个子元素的数据，并且应当包括所有在childFrom中指定的实体。

childLayout 显示子元素的资源文件。该资源文件定义了如何显示子元素。布局文件至少应该包括所有在childTo中定义的View。(即childTo中的view id数组必须都在该布局文件中找到)

childFrom 定义显示子元素的列名。该列名与childData中的子元素属性（字典键值）对应。

childTo 子View应当显示childFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个childFrom参数获得列元素的数据。

public SimpleExpandableListAdapter (Context context, List<? extends Map<String, ?>> groupData, int expandedGroupLayout, int collapsedGroupLayout, String[] groupFrom, int[] groupTo, List<? extends List<? extends Map<String, ?>>> childData, int childLayout, String[] childFrom, int[] childTo)

构造函数。

参数

context 与SimpleExpandableListAdapter关联的ExpandableListView的上下文。

groupData 一个Maps列表(List)。集合中的每个字典项与可折叠列表中的每个组元素一致。字典项提供了组元素包含的所有数据，并包含所有在"groupFrom"中指定的记录。

expandedGroupLayout 定义组展开时的View的XML资源布局。该布局文件应当至少包括所有在groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到)

collapasedGroupLayout 定义组折叠时的View的XML资源布局。该布局文件应当至少包括所有在groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到)

groupFrom 一个键值列表。对应与组相关联的Map中的键值。

grouptTo 组View应当显示groupFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个groupFrom参数获得列元素的数据。

childData 一个Map列表的列表。外部列表中的每个实体对应一个组(按照组的位置编号)。在内部列表的每个实体对应某个组的子元素(按照子元素的位置编号)。该Map对应了子元素的数据。(按照childFrom数组中的值编号)。该Map包含了每个子元素的数据，并且应当包括所有在childFrom中指定的实体。

childLayout 显示子元素的资源文件。该资源文件定义了如何显示子元素。布局文件至少应该包括所有在childTo中定义的View。(即childTo中的view id数组必须都在该布局文件中找到)

childFrom 定义显示子元素的列名。该列名与childData中的子元素属性（字典键值）对应。

childTo 子View应当显示childFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个childFrom参数获得列元素的数据。

public SimpleExpandableListAdapter (Context context, List<? extends Map<String, ?>> groupData, int expandedGroupLayout, int collapsedGroupLayout, String[] groupFrom, int[] groupTo, List<? extends List<? extends Map<String, ?>>> childData, int childLayout, int lastChildLayout, String[] childFrom, int[] childTo)

构造函数。

参数

context 与SimpleExpandableListAdapter关联的ExpandableListView的上下文。

groupData 一个Maps列表(List)。集合中的每个字典项与可折叠列表中的每个组元素一致。字典项提供了组元素包含的所有数据，并包含所有在"groupFrom"中指定的记录。

expandedGroupLayout 定义组展开时的View的XML资源布局。该布局文件应当至少包括所有在groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到)

collapasedGroupLayout 定义组折叠时的View的XML资源布局。该布局文件应当至少包括所有在groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到)

groupFrom 一个键值列表。对应与组相关联的Map中的键值。

grouptTo 组View应当显示groupFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个groupFrom参数获得列元素的数据。

childData 一个Map列表的列表。外部列表中的每个实体对应一个组(按照组的位置编号)。在内部列表的每个实体对应某个组的子元素(按照子元素的位置编号)。该Map对应了子元素的数据。(按照childFrom数组中的值编号)。该Map包含了每个子元素的数据，并且应当包括所有在childFrom中指定的实体。

childLayout 显示子元素的资源文件。该资源文件定义了如何显示子元素。布局文件至少应该包括所有在childTo中定义的View。(即childTo中的view id数组必须都在该布局文件中找到)

lastChildLayout 定义每组中最后一个子元素的View资源布局情况。该布局文件应当至少包括所有在childTo中所定义的View。(即childTo中的View id数组必须都在该布局文件中找到)

childFrom 定义显示子元素的列名。该列名与childData中的子元素属性（字典键值）对应。

childTo 子View应当显示childFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个childFrom参数获得列元素的数据。

公共方法

public Object getChild (int groupPosition, int childPosition)

public long getChildId (int groupPosition, int childPosition)

（译者注：获取与在给定组给予孩子相关的数据。）

public View getChildView (int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)

（译者注：获取子项）

public int getChildrenCount (int groupPosition)

（译者注：返回在指定Group的Child数目。）

public Object getGroup (int groupPosition)

public int getGroupCount ()

（译者注：返回Group的总数目。）

public long getGroupId (int groupPosition)

public View getGroupView (int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)

（译者注：获取父项）

public boolean hasStableIds ()

public boolean isChildSelectable (int groupPosition, int childPosition)

（译者注：是否让child获得焦点）

public View newChildView (boolean isLastChild, ViewGroup parent)

新建一个子元素View。

参数

isLastChild 该child是否是组中的最后一个元素

parent 新的View的最终父亲。

返回

新的子元素View对象。

public View newGroupView (boolean isExpanded, ViewGroup parent)

新建一个组元素View。

参数

isExpanded 该组元素是否当前处于折叠状态

parent 新View的最终父亲。

返回

新的组元素View对象。

补充

文章精选

ExpandableListActivity和SimpleExpandableListAdapter的使用方法

Expandable lists[blogspot]

示例代码：

        List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();

        List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();

        for (int i = 0; i < 20; i++) {

            Map<String, String> curGroupMap = new HashMap<String, String>();

            groupData.add(curGroupMap);

            curGroupMap.put(NAME, "Group " + i);

            curGroupMap.put(IS_EVEN, (i % 2 == 0) ? "This group is even" : "This group is odd");

            List<Map<String, String>> children = new ArrayList<Map<String, String>>();

            for (int j = 0; j < 15; j++) {

                Map<String, String> curChildMap = new HashMap<String, String>();

                children.add(curChildMap);

                curChildMap.put(NAME, "Child " + j);

                curChildMap.put(IS_EVEN, (j % 2 == 0) ? "This child is even" : "This child is odd");

            }

            childData.add(children);

        }

        // Set up our adapter

        mAdapter = new SimpleExpandableListAdapter(

                this,

                groupData,

                android.R.layout.simple_expandable_list_item_1,

                new String[] { NAME, IS_EVEN },

                new int[] { android.R.id.text1, android.R.id.text2 },

                childData,

                android.R.layout.simple_expandable_list_item_2,

                new String[] { NAME, IS_EVEN },

                new int[] { android.R.id.text1, android.R.id.text2 }

                );


SlidingDrawer

译者署名：xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 3.0 r1

结构

继承关系

public class SlidingDrawer extends ViewGroup

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.SlidingDrawer

类概述

SlidingDrawer（滑动式抽屉）隐藏屏外的内容，并允许用户拖拽一个handle以显示隐藏的内容。SlidingDrawer可以在垂直或者水平使用。它由两个子视图组成：一个是用户拖拽的handle（柄），另一个是随着拖动变化的content（内容）。SlidingDrawer应当作为内部布局的覆盖来使用，也就是说SlidingDrawer内部应该使用FrameLayout或RelativeLayout布局。SlidingDrawer的大小决定了其内容显示时所占空间的大小，所以它的尺寸一般定义为match_parent。在XML布局中SlidingDrawer必须指定handle和content的id：

内部类

interface SlidingDrawer.OnDrawerCloseListener

当drawer（抽屉）关闭时调用

interface SlidingDrawer.OnDrawerOpenListener

当drawer（抽屉）打开时调用

interface SlidingDrawer.OnDrawerScrollListener

当drawer（抽屉）滑动（滚动）时调用

XML属性

属性名称

描述

android:allowSingleTap

指示是否可通过单击handle打开或关闭（如果是false，刚用户必须通过拖动，滑动或者使用轨迹球，来打开/关闭抽屉。）默认的是true。

android:animateOnClick

指示当用户点击handle的时候，抽屉是否以动画的形式打开或关闭。默认的是true。

android:bottomOffset

Handle距离SlidingDrawer底部的额外距离

android:content

标识SlidingDrawer的内容

android:handle

标识SlidingDrawer的handle（译者注：如按钮）

android:orientation

SlidingDrawer的方向。必须是下面的一个值：

常量 | 值 | 描述
horizontal | 0 | 水平方向对齐
vertical | 1 | 竖直方向对齐

android:topOffset

Handle距离SlidingDrawer顶部的额外距离

常量

public static final int ORIENTATION_HORIZONTAL

（译者注：水平方向对齐）

常量值：0 (0x00000000)

public static final int ORIENTATION_VERTICAL

（译者注：垂直方向对齐）

常量值：1 (0x00000001)

构造函数

public SlidingDrawer (Context context, AttributeSet attrs)

用xml中设置的属性来创建一个新的SlidingDrawe

参数

context 上下文

attrs XML中定义的属性

public SlidingDrawer (Context context, AttributeSet attrs, int defStyle)

用xml中设置的属性来创建一个新的SlidingDrawe

参数

context 上下文

attrs XML中定义的属性

defStyle 要应用到这个组件上的样式

公共方法

public void animateClose ()

动画效果关闭抽屉。

参见

close()

open()

animateOpen()

animateToggle()

toggle()

public void animateOpen ()

动画效果打开抽屉。

参见

close()

open()

animateOpen()

animateToggle()

toggle()

public void animateToggle ()

在打开和关闭抽屉之间动画切换

参见

close()

open()

animateOpen()

animateToggle()

toggle()

public void close ()

立即关闭抽屉

参见

toggle()

open()

animateClose()

public View getContent ()

返回抽屉的内容(content)

返回值

返回在抽屉内容的视图，它在XML中是用“content”id 标识的

public View getHandle ()

返回抽屉的handle

返回值

返回在抽屉handle的视图，它在XML中是用“handle”id 标识的

public boolean isMoving ()

抽屉是否在滚动或滑动。

返回值

如果在滚动或滑动，返回true，否则返回false

public boolean isOpened ()

当前抽屉是否被完全打开

返回值

如果是打开的，返回true，否则返回false。

public void lock ()

锁定SlidingDrawer，忽略触摸事件

参见

unlock()

public boolean onInterceptTouchEvent (MotionEvent event)

实现这个方法可以拦截所有的触屏事件，它在事件被传到子类之前拦截，并获得当前手势的所有权。

使用这个方法时要注意，因为它与 View.onTouchEvent(MotionEvent)有一个相当复杂的交互，使用它需要用正确的方法来实现。事件会按照下列顺序接受：

1. down事件会被首先传到本方法中。

2. 这个down事件会被当前viewgroup的onTouchEvent()方法或者其各个子视图处理，也就是说你应该实现onTouchEvent()方法并返回true，你会继续看到剩下事件的传递（而不是找一个parent view处理它）。同样的，从onTouchEvent()中返回true，你不会在onInterceptTouchEvent()中接受到任何接下来的事件，并且所有的事件都会被onTouchEvent()处理。

3. 如果当前方法返回false，所有接下来的事件（截止到最后包含注册的事件）首先都会被继续传到这里，然后一起传递给目标的onTouchEvent()方法。截至及包括最后注册。

4. 如果在这里返回true，将不会收到以下任何事件：目标view将收到同样的事件但是是伴随 ACTION_CANCEL事件，并且所有的更进一步的事件将会传递到你自己的onTouchEvent()方法中而不会再在这里出现。

（译者著：这里实在是太麻烦了，很不好懂，我自己看着都头晕，在网上找到一篇很不错的总结，才知道是怎么回事，这里总结一下，记住这个原则你就会很清楚了：

1、onInterceptTouchEvent()是用于处理事件（类似于预处理，当然也可以不处理）并改变事件的传递方向，也就是决定是否允许Touch事件继续向下（子控件）传递，一但返回True（代表事件在当前的viewGroup中会被处理），则向下传递之路被截断（所有子控件将没有机会参与Touch事件），同时把事件传递给当前的控件的onTouchEvent()处理；如果返回false，则把事件交给子控件的onInterceptTouchEvent()处理

2、onTouchEvent()用于处理事件，返回值决定当前控件是否消费（consume）了这个事件，也就是说在当前控件在处理完Touch事件后，是否还允许Touch事件继续向上（父控件）传递，一但返回True，则父控件不用操心自己来处理Touch事件。

相关文章这里1、这里2）

参数

event 分层次的动作事件

返回值

如果将运动事件从子视图中截获并且通过onTouchEvent()发送到当前ViewGroup ，返回true。当前目标将会收到ACTION_CANCEL事件，并且不再会有其他消息传递到此。

public boolean onTouchEvent (MotionEvent event)

实现触摸屏幕事件的方法

参数

event 当前事件

返回值

如果事件被处理就返回true，否则返回false

public void open ()

立即打开抽屉

参见

toggle()

close()

animateOpen()

public void setOnDrawerCloseListener(SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener)

给抽屉的关闭事件绑定监听器

参数

onDrawerCloseListener 抽屉关闭时的监听器

public void setOnDrawerOpenListener(SlidingDrawer.OnDrawerOpenListener onDrawerOpenListener)

给抽屉的打开事件绑定监听器

参数

onDrawerOpenListener 抽屉打开时的鉴别器

public void setOnDrawerScrollListener (SlidingDrawer.OnDrawerScrollListener onDrawerScrollListener)

给抽屉的滚动(收缩)事件绑定监听器，轻滑(fling)也被当作一个滚动(收缩)事件，同时它可以触发抽屉关闭或者打开事件。

参数

onDrawerScrollListener 当滚动(收缩)开始或者停止时通知的监听器

public void toggle ()

在抽屉打开或关闭状态之间切换。事件会立即产生。

参见

close()

open()

animateOpen()

animateToggle()

toggle()

public void unlock ()

解锁SlidingDrawer使触摸事件能被处理

参见

lock()

补充

文章精选

Android高手进阶教程(二)之----Android Launcher抽屉类SlidingDrawer的使用

SlidingDrawer 抽屉类{Android学习指南}

MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序

http://hi.baidu.com/j_fo/blog/item/7321c91324203437dc54017d.html

http://www.cnblogs.com/rocky_yi/archive/2011/01/21/1941522.html#

示例代码

SlidingDrawer的XML文件示例

<SlidingDrawer
     android:id="@+id/drawer"
     android:layout_width="match_parent"
     android:layout_height="match_parent"

     android:handle="@+id/handle"
     android:content="@+id/content">

     <ImageView
         android:id="@id/handle"
         android:layout_width="88dip"
         android:layout_height="44dip" />

     <GridView
         android:id="@id/content"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
 </SlidingDrawer>


SlidingDrawer.OnDrawerCloseListener

译者署名：xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 3.0 r1

结构

继承关系

public static interface SlidingDrawer.OnDrawerCloseListener

android.widget.SlidingDrawer.OnDrawerCloseListener

类概述

当抽屉被关闭时调用的回调。

公共方法

public abstract void onDrawerClosed()

当抽屉被完全关闭时调用

补充

文章精选

Android控件之SlidingDrawer（滑动式抽屉）详解与实例


SlidingDrawer.OnDrawerOpenListener

译者署名：xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 3.0 r1

结构

继承关系

public static interface SlidingDrawer.OnDrawerOpenListener

android.widget.SlidingDrawer.OnDrawerOpenListener

类概述

当抽屉被打开时调用

公共方法

public abstract void onDrawerOpened()

当抽屉被完全打开时调用


SlidingDrawer.OnDrawerScrollListener

译者署名：xiaoQLu

译者链接：http://www.cnblogs.com/xiaoQLu

版本：Android 3.0 r1

结构

继承关系

public static interface SlidingDrawer.OnDrawerScrollListener

android.widget.SlidingDrawer.OnDrawerScrollListener

类概述

当抽屉被滚动时调用

公共方法

public abstract void onScrollEnded ()

当用户停止拖曳/滑动抽屉的handle时调用

public abstract void onScrollStarted ()

当用户开始拖曳/滑动抽屉的handle时调用


Spinner

译者署名：思考的狼

译者链接：http://blog.163.com/sikaodelang@126/

版本：Android 2.2 r1

public final class Spinner extends AbsSpinner

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

android.widget.AbsSpinner

android.widget.Spinner

类概述

下拉列表（Spinner）是一个每次只能选择所有项中一项的部件。它的项来自于与之相关联的适配器中。

XML属性

属性名称 | 描述
android:prompt | 该提示在下拉列表对话框显示时显示。（译者注：对话框的标题：

公共方法

public int getBaseline()

返回这个控件文本基线的偏移量。如果这个控件不支持基线对齐，那么方法返回-1.

返回值

返回控件基线左边边界位置，不支持时返回-1

（译者注：这个类不知道干什么用，只找到下面的代码

     public class AndroidBamboo extends Activity
{
    public void onCreate( Bundle savedInstanceState )
    {
     super.onCreate ( savedInstanceState );
        Spinner spinner = new Spinner ( this );
        spinner.setPrompt( "500" );
        String [ ] items = { "bam", "boo", "lab", "code", "programming", "framework", "android" };
        ArrayAdapter array_adapter = new ArrayAdapter <String> ( this, android.R.layout.simple_spinner_item, items );
        array_adapter.setDropDownViewResource ( android.R.layout.simple_spinner_dropdown_item );
        spinner.setAdapter ( array_adapter );
        int baseline = spinner.getBaseline ( );
        setContentView ( spinner );
    }

}

）

public CharSequence getPrompt()

返回值

当对话框弹出的时候显示的提示（译者注：获得弹出视图上的标题字）

public void onClick(DialogInterface dialog, int which)

当点击弹出框中的项时这个方法将被调用。

参数

dialog 点击弹出的对话框

which 点击按钮(如：Button)或者点击位置

public Boolean performClick()

如果它被定义就调用此视图的OnClickListener（译者注：例如可以在加载时默认弹出下拉列表）。

返回值

为True一个指定的OnClickListener被调用，为false时不被调用。

public void setOnItemClickListener(AdapterView.OnItemClickListener I)

Spinner不支持item的点击事件，调用此方法将引发异常。

参数

l 这个监听将被忽略

public void setPromptId(CharSequence prompt)

设置对话框弹出的时候显示的提示（译者注：设置弹出视图上的标题字）

参数

prompt 设置的提示

public void setPromptId(int promptId)

设置对话框弹出的时候显示的提示（译者注：设置弹出视图上的标题字）

参数

prompted 当对话框显示是显示这个资源id所代表的提示。

受保护的方法

protected void onDetachedFromWindow ()

当这个视图从屏幕上卸载时候被调用。在这一点上不再绘制视图。

protected void onLayout (boolean changed, int l, int t, int r, int b)

当View要为所有子对象分配大小和位置时，调用此方法。派生类与子项们应该重载这个方法和调用布局每一个子项。

参数

changed 这是这个视图的一个新的大小或位置

l 相对父空间的左位置

t 相对父空间的顶端位置

r 相对父空间的右端位置

b 相对父空间的底部位置

参见

Creates and positions all views

补充

文章链接

Android学习指南——Spinner 下拉列表

android自定义Spinner下拉菜单(下拉列表框)样式

示例代码

Java代码

public class SpinnerActivity extends Activity {

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

String mes = "Wolf";

private static final String[] m_arr = {"第一组","第二组","第三组"};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Spinner s1 = (Spinner)findViewById(R.id.Spinner01);

s1.setPrompt("请选择颜色" );

//ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.spinnercolor,android.R.layout.simple_spinner_item);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, m_arr);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

s1.setAdapter(adapter);

    s1.setSelection(1,true);

       //s1.setPromptId(CONTEXT_INCLUDE_CODE);

       int baseline = s1.getBaseline();

       s1.performClick();

s1.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3){

dispToast("选择的是"+m_arr[arg2]);

arg0.setVisibility(View.VISIBLE);

}

public void onNothingSelected(AdapterView<?> arg0){

//

}

});

Toast.makeText(this, s1.getPrompt() ,Toast.LENGTH_LONG).show();

}

public void dispToast(String str){

Toast.makeText(this, str, Toast.LENGTH_SHORT).show();

}

}

XML文件

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="hello">Hello World, SpinnerActivity!</string>

    <string name="app_name">Spinner测试</string>

<string-array name="spinnercolor">

<item>红色</item>

<item>绿色</item>

<item>白色</item>

<item>橙色</item>

</string-array>

<string name="planet_prompt">Please Choose a Item！</string>

</resources>


SpinnerAdapter

译者署名： 德罗德

译者链接：http://sparkrico.javaeye.com

翻译时间：2010-11-03

版本：Android 2.2 r1

结构

继承关系

public interface SpinnerAdapter extends Adapter

android.widget. SpinnerAdapter

子类及间接子类

直接子类

ArrayAdapter<T>, BaseAdapter, CursorAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter

类概述

扩展自Adapter 的适配器是在Spinner与数据之间的一座桥梁。一个Spinner Adapter允许定义两个不同的视图：一是在Spinner上显示数据，另一个是当Spinner按下时在下拉列表里显示数据。

公共方法

public abstract View getDropDownView (int position, View convertView, ViewGroup parent)

获得一个在指定位置上显示下拉弹出数据的视图。

参数

position 项目视图的索引

convertView 如果可能旧有的视图重新使用。注解：在使用之前应该检查这个视图不是空的并且类型合适。如果转换视图显示正确的数据是不可能的，这个方法能够创建一个新的视图

parent 视图最终将依附的父对象

返回值

一个对应指定位置的数据的视图


WrapperListAdapter

译者署名： cnmahj

译者链接：http://blog.toolib.net/cnmahj

版本：Android 3.0 r1

结构

继承关系

public interface WrapperListAdapter implements ListAdapter

android.widget. WrapperListAdapter

间接子类

HeaderViewListAdapter

类概述

封装了另一个列表适配器的列表适配器。调用 getWrappedAdapter() 可以取得封装在其中的适配器。

参见

ListView

公共方法

public abstract ListAdapter getWrappedAdapter ()

返回封装在列表适配器中的适配器。

返回值

封装在该适配器中的 ListAdapter。


TabHost

译者署名： madgoat

译者链接：http://madgoat.cn

翻译时间：2010-11-25

版本：Android 2.3 r1

结构

继承关系

public class TabHost extends FrameLayout implements ViewTreeObserver.OnTouchModeChangeListener

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.TabHost

类概述

提供选项卡（Tab页）的窗口视图容器。此对象包含两个子对象：一组是用户可以选择指定Tab页的标签；另一组是FrameLayout用来显示该Tab页的内容。个别元素通常控制使用这个容器对象，而不是设置在子元素本身的值。

（译者注：即使使用的是单个元素，也最好把它放到容器对象ViewGroup里）

内部类

interface TabHost.OnTabChangeListener

接口定义了当选项卡更改时被调用的回调函数

interface TabHost.TabContentFactory

当某一选项卡被选中时生成选项卡的内容

class TabHost.TabSpec

单独的选项卡，每个选项卡都有一个选项卡指示符,内容和tag标签,以便于记录.

公共方法

public void addTab (TabHost.TabSpec tabSpec)

新增一个选项卡

参数

tabSpec 指定怎样创建指示符和内容.

public void clearAllTabs ()

从tab widget中移除所有关联到当前tab host的选项卡

public boolean dispatchKeyEvent (KeyEvent event)

分发按键事件到焦点传递路线上的下一视图。焦点传递路线从视图树的顶层开始一直到当前获取焦点的视图停止。如果此视图已经获取焦点,将分发给它自身。否则，将分发到焦点传递路线的下一节点。此方法会触发任何一个按键监听器.

（译者注：关于focus path,可以参考以下地址:

http://blog.csdn.net/maxleng/archive/2010/05/04/5557758.aspx)

参数

event 分发的按键事件

返回值

如果事件已经处理则返回true,否则返回false.

public void dispatchWindowFocusChanged (boolean hasFocus)

当窗口包含的此视图获取或丢失焦点时触发此方法.ViewGroups应该重写以路由到他的子元素

参数

hasFocus 如果窗口包含的此view依获取焦点,返回true,否则返回false.

public int getCurrentTab ()

（译者注：获取当前选项卡的id）

public String getCurrentTabTag ()

（译者注：当前选项卡的Tag标签内容）

public View getCurrentTabView ()

（译者注：获取当前选项卡的视图view）

public View getCurrentView ()

（译者注：获取当前的视图view）

public FrameLayout getTabContentView ()

获取保存tab内容的FrameLayout

public TabWidget getTabWidget ()

（译者注：根据系统规定的id：tabs来找到TabWidget，并返回，注意，这里的ID必须是tabs。源代码中表示如下：

private TabWidget mTabWidget;

mTabWidget=(TabWidget)findViewById(com.android.internal.R.id.tabs);）

public TabHost.TabSpec newTabSpec (String tag)

获取一个新的TabHost.TabSpec，并关联到当前tab host

参数

tag 所需的选项卡标签(tag)

public void onTouchModeChanged (boolean isInTouchMode)

当触摸模式发生改变时调用的回调函数.

参数

isInTouchMode 如果视图结构当前处于触摸模式,返回true,否则返回false.

public void setCurrentTab (int index)

（译者注：设置当前的选项卡

参数

Index 为当前选项卡的索引。）

public void setCurrentTabByTag (String tag)

（译者注：根据选项卡的Tab标签来设置当前的选项卡

参数

tag 想要被设置为当前选项卡的tag标签值。）

public void setOnTabChangedListener (TabHost.OnTabChangeListener l)

注册一个回调函数，当选项卡中的任何一个tab的选中状态发生改变时调用。

（译者注：setCurrentTab(index)时会触发调用）

参数

l 将运行的回调函数

public void setup ()

如果使用findViewById()加载TabHost，那么在新增一个选项卡tab之前，需要调用setup()。然而，当你在一个TabActivity里使用getTabHost()获取TabHost，你就不再需要调用setup()了。（译者注：实现tab窗口的两种方法：继承activity时，使用findViewById()查找TabHost，然后调用setup()；继承TabActivity，通过getTabHost()查找，此时不用调用setup()）例子：

public void setup (LocalActivityManager activityGroup)

如果你使用setContent(android.content.Intent)，那么当activityGroup用于加载本地activity之时，必须调用此方法。如果你拓展（继承）TabActivity将自动调用setup()方法。

参数

activityGroup 用来为选项卡内容加载activities的ativityGroup

受保护方法

protected void onAttachedToWindow ()

当视图附加到窗口上时被调用。在这个点的表面进行绘制。注意此函数确保在onDraw(Cancas)之前调用，然而它可能在第一次执行onDraw之前的任何时间被调用——包括的onMeasure(int,int)的之前或之后。

protected void onDetachedFromWindow ()

当视图从窗口分离时被调用。在这个点的表面不再有画面绘制。

补充

文章链接

史上最全的Android的Tab与TabHost讲解

Android UI设计 Tab TabHost标签页的使用

Android 控件之TabHost Tab页

动态Tab页

示例代码

Java：

public class Tabs1 extends TabActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TabHost tabHost = getTabHost();

LayoutInflater.from(this).inflate(R.layout.tabs1, tabHost.getTabContentView(), true);

tabHost.addTab(tabHost.newTabSpec("tab1")

.setIndicator("tab1")

.setContent(R.id.view1));

tabHost.addTab(tabHost.newTabSpec("tab3")

.setIndicator("tab2")

.setContent(R.id.view2));

tabHost.addTab(tabHost.newTabSpec("tab3")

.setIndicator("tab3")

.setContent(R.id.view3));

}

}

XML：

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

<TextView android:id="@+id/view1"

android:background="@drawable/blue"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="@string/tabs_1_tab_1"/>

<TextView android:id="@+id/view2"

android:background="@drawable/red"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="@string/tabs_1_tab_2"/>

<TextView android:id="@+id/view3"

android:background="@drawable/green"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="@string/tabs_1_tab_3"/>

</FrameLayout>

详细参见apidemo/view/tabs1


TabHost.TabSpec

译者署名： madgoat

译者链接：http://madgoat.cn

翻译时间：2010-11-25

版本：Android 2.3 r1

结构

继承关系

public class TabHost.TabSpec extends Object

java.lang.Object

android.widget.TabHost.TabSpec

类概述

每个选项卡都有一个选项卡指示符,内容和tag标签用于跟踪。这种生成器可以帮助从这些选项中做出选择。针对选项卡的指示符，你可以选择：

1)设置一个标题

2)设置一个标题和图标

针对选项卡的内容，你可以选择：

1)视图的ID

2)TabHost.TabContentFactory创建的视图内容

3)加载Activity的Intent对象

公共方法

public String getTag ()

（译者注：获取tag标签字符串）

public TabHost.TabSpec setContent (int viewId)

为选项卡的内容指定视图的ID

（译注：即设定选项卡内容的视图）

public TabHost.TabSpec setContent (Intent intent)

指定一个加载activity的Intent对象作为选项卡内容

public TabHost.TabSpec setContent (TabHost.TabContentFactory contentFactory)

指定一个TabHost.TabContentFactory用于创建选项卡的内容

public TabHost.TabSpec setIndicator (CharSequence label)

指定一个标签作为选项卡指示符

public TabHost.TabSpec setIndicator (View view)

指定一个视图作为选项卡指示符

public TabHost.TabSpec setIndicator (CharSequence label, Drawable icon)

为选项卡指示符指定一个标签和图标

补充

文章链接

TabHost中的TabSpec的标题能不能缩小啊？

android的TabActivity


TextView

农民伯伯

版本：Android 2.2

java.lang.Object

android.view.View

android.widget.TextView

直接子类：

Button, CheckedTextView, Chronometer, DigitalClock, EditText

间接子类：

AutoCompleteTextView, CheckBox, CompoundButton, ExtractEditText,

MultiAutoCompleteTextView, RadioButton, ToggleButton

XML属性

属性名称

描述

android:autoLink

设置是否当文本为URL链接/email/电话号码/map时，文本显示为可点击的链接。可选值(none/web/email/phone/map/all)

android:autoText

如果设置，将自动执行输入值的拼写纠正。此处无效果，在显示输入法并输入的时候起作用。

android:bufferType

指定getText()方式取得的文本类别。选项editable 类似于StringBuilder可追加字符，

也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式，参见这里1、这里2。

android:capitalize

设置英文字母大写类型。此处无效果，需要弹出输入法才能看得到，参见EditView此属性说明。

android:cursorVisible

设定光标为显示/隐藏，默认显示。

android:digits

设置允许输入哪些字符。如“1234567890.+-*/%\n()”

android:drawableBottom

在text的下方输出一个drawable，如图片。如果指定一个颜色的话会把text的背景设为该颜色，并且同时和background使用时覆盖后者。

android:drawableLeft

在text的左边输出一个drawable，如图片。

android:drawablePadding

设置text与drawable(图片)的间隔，与drawableLeft、drawableRight、drawableTop、drawableBottom一起使用，可设置为负数，单独使用没有效果。

android:drawableRight

在text的右边输出一个drawable，如图片。

android:drawableTop

在text的正上方输出一个drawable，如图片。

android:editable

设置是否可编辑。这里无效果，参见EditView。

android:editorExtras

设置文本的额外的输入数据。在EditView再讨论。

android:ellipsize

设置当文字过长时,该控件该如何显示。有如下值设置：”start”—–省略号显示在开头；”end”——省略号显示在结尾；”middle”—-省略号显示在中间；”marquee” ——以跑马灯的方式显示(动画横向移动)

android:freezesText

设置保存文本的内容以及光标的位置。参见：这里。

android:gravity

设置文本位置，如设置成“center”，文本将居中显示。

android:hint

Text为空时显示的文字提示信息，可通过textColorHint设置提示信息的颜色。此属性在EditView中使用，但是这里也可以用。

android:imeOptions

附加功能，设置右下角IME动作与编辑框相关的动作，如actionDone右下角将显示一个“完成”，而不设置默认是一个回车符号。这个在EditView中再详细说明，此处无用。

android:imeActionId

设置IME动作ID。在EditView再做说明，可以先看这篇帖子：这里。

android:imeActionLabel

设置IME动作标签。在EditView再做说明。

android:includeFontPadding

设置文本是否包含顶部和底部额外空白，默认为true。

android:inputMethod

为文本指定输入法，需要完全限定名（完整的包名）。例如：com.google.android.inputmethod.pinyin，但是这里报错找不到。

android:inputType

设置文本的类型，用于帮助输入法显示合适的键盘类型。在EditView中再详细说明，这里无效果。

android:marqueeRepeatLimit

在ellipsize指定marquee的情况下，设置重复滚动的次数，当设置为 marquee_forever时表示无限次。

android:ems

设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度，如图：

android:maxEms

设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:minEms

设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:maxLength

限制显示的文本长度，超出部分不显示。

android:lines

设置文本的行数，设置两行就显示两行，即使第二行没有数据。

android:maxLines

设置文本的最大显示行数，与width或者layout_width结合使用，超出部分自动换行，超出行数将不显示。

android:minLines

设置文本的最小行数，与lines类似。

android:linksClickable

设置链接是否点击连接，即使设置了autoLink。

android:lineSpacingExtra

设置行间距。

android:lineSpacingMultiplier

设置行间距的倍数。如”1.2”

android:numeric

如果被设置，该TextView有一个数字输入法。此处无用，设置后唯一效果是TextView有点击效果，此属性在EdtiView将详细说明。

android:password

以小点”.”显示文本

android:phoneNumber

设置为电话号码的输入方式。

android:privateImeOptions

设置输入法选项，此处无用，在EditText将进一步讨论。

android:scrollHorizontally

设置文本超出TextView的宽度的情况下，是否出现横拉条。

android:selectAllOnFocus

如果文本是可选择的，让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。TextView中设置后无效果。

android:shadowColor

指定文本阴影的颜色，需要与shadowRadius一起使用。效果：

android:shadowDx

设置阴影横向坐标开始位置。

android:shadowDy

设置阴影纵向坐标开始位置。

android:shadowRadius

设置阴影的半径。设置为0.1就变成字体的颜色了，一般设置为3.0的效果比较好。

android:singleLine

设置单行显示。如果和layout_width一起使用，当文本不能全部显示时，后面用“…”来表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"将只显示“t…”。如果不设置singleLine或者设置为false，文本将自动换行

android:text

设置显示文本.

android:textAppearance

设置文字外观。如“?android:attr/textAppearanceLargeInverse

”这里引用的是系统自带的一个外观，？表示系统是否有这种外观，否则使用默认的外观。可设置的值如下：textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse

android:textColor

设置文本颜色

android:textColorHighlight

被选中文字的底色，默认为蓝色

android:textColorHint

设置提示信息文字的颜色，默认为灰色。与hint一起使用。

android:textColorLink

文字链接的颜色.

android:textScaleX

设置文字缩放，默认为1.0f。分别设置0.5f/1.0f/1.5f/2.0f效果如下：

android:textSize

设置文字大小，推荐度量单位”sp”，如”15sp”

android:textStyle

设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个，用“|”隔开

android:typeface

设置文本字体，必须是以下常量值之一：normal 0, sans 1, serif 2, monospace(等宽字体) 3]

android:height

设置文本区域的高度，支持度量单位：px(像素)/dp/sp/in/mm(毫米)

android:maxHeight

设置文本区域的最大高度

android:minHeight

设置文本区域的最小高度

android:width

设置文本区域的宽度，支持度量单位：px(像素)/dp/sp/in/mm(毫米)，与layout_width的区别看这里。

android:maxWidth

设置文本区域的最大宽度

android:minWidth

设置文本区域的最小宽度


TimePicker

翻译人：桂仁

版本：Android 2.2 r1

public class TimePicker extends FrameLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.TimePicker

概述

用于选择一天中时间的视图，支持 24小时及上午/下午模式。小时，分钟及上午/下午（如果可用）都可以用垂直滚动条来控制。用键盘来输入小时。两个数的小时数可以通过输入两个数字来实现，例如在一定时间内输入‘1’和‘2’即选择了12点。分钟能显示输入的单个数字。在AM/PM模式下，用户可以输入'a', 'A"或 'p', 'P'来选取。对于对话框视图，参见 TimePickerDialog。

公共方法

public int getBaseline ()

返回窗口空间的文本基准线到其顶边界的偏移量。如果这个部件不支持基准线对齐，这个方法返回-1/。

返回值

基准线的偏移量，如果不支持基准线对齐则返回-1。

public Integer getCurrentHour ()

获取当前时间的小时部分。

返回值

当前小时（0-23）

public Integer getCurrentMinute ()

获取当前时间的分钟部分。

返回值

当前分钟。

public boolean is24HourView ()

获取当前系统设置是否是24小时制。

返回值

如果是24小时制返回true，否则返回false。

public void setCurrentHour (Integer currentHour)

设置当前小时。

public void setCurrentMinute (Integer currentMinute)

设置当前分钟（0-59）。

public void setEnabled (boolean enabled)

设置可用的视图状态。可用的视图状态的解释在子类中改变。

参数

enabled 如果可用为true，否则为false。

public void setIs24HourView (Boolean is24HourView)

设置是24小时还是上午/下午制。

参数

is24HourView True表示 24小时制. False表示上午/下午制.

public void setOnTimeChangedListener (TimePicker.OnTimeChangedListener onTimeChangedListener)

设置时间调整事件的回调函数。

参数

onTimeChangedListener 回调函数，不能为空。

受保护方法

protected void onRestoreInstanceState (Parcelable state)

允许一个视图回复到之前用onSaveInstanceState()保存的状态，state参数不能为空。

参数

state 之前调用onSaveInstanceState()返回的状态。

protected Parcelable onSaveInstanceState ()

用来允许一个视图保存当前的内部状态，之后可以创建新的实例应用相同的状态。状态信息不能包含常量或在之后重新构造。例如，你永远不能保存在屏幕上的当前位置，因为当创建一个新的视图时，它将会被放置到它的层次结构中，它的位置会被重新计算。

你可以存储到这里的一些例子：一个文本框中当前光标的位置（但通常不是文字本身，文字通常保存在内容提供者(content provider)或其他持久的储存中），一个列表视图中的当前选中项。

返回值

返回一个包含视图当前状态的Parcelable对象，或没有什么状态保存时返回null。默认实现返回null。

补充

文章链接

            [示例代码]Hello, TimePicker

            [示例代码]日期選擇器(DatePicker)和時間選擇器(TimePicker)

            Android TimePicker DatePicker 简单说明


TimePicker.OnTimeChangedListener

翻译人：桂仁

版本：Android 2.2 r1

public static interface TimePicker.OnTimeChangedListener

android.widget.TimePicker.OnTimeChangedListener

间接子类

TimePickerDialog

概述

调整时间事件的回调接口。

公共方法

public abstract void onTimeChanged (TimePicker view, int hourOfDay, int minute)

参数

view 与监听相关的视图。

hourOfDay 当前小时

minute 当前分钟


Toast

译者署名：cnmahj、 jiahuibin

译者链接：http://p.toolib.com/step

翻译时间：2010年11月2日

版本：Android 2.2 r1

类结构

public class Toast extends Object

java.lang.Object

android.widget.Toast

概述

Toast是一种提供给用户简洁信息的视图。Toast类帮助你创建和显示该信息。

该视图已浮于应用程序之上的形式呈现给用户。因为它并不获得焦点，即使用户正在输入什么也不会受到影响。它的目标是尽可能已不显眼的方式，使用户看到你提供的信息。有两个例子就是音量控制和设置信息保存成功。

使用该类最简单的方法就是调用一个静态方法，让他来构造你需要的一切并返回一个新的 Toast 对象。

常量

int LENGTH_LONG

持续显示视图或文本提示较长时间。该时间长度可定制。

参见

setDuration(int)

int LENGTH_SHORT

持续显示视图或文本提示较短时间。该时间长度可定制。该值为默认值。

参见

setDuration(int)

构造函数

public Toast (Context context)

构造一个空的 Toast 对象。在调用 show() 之前，必须先调用 setView(View)。

（译者注：只有使用setView(View)的时候，才使用new Toast(Content content)来得到Toast对象，否则必须用makeText()方法来创建toast对象，并且这种方式获得Toast对象不能使用setText()方法。）

参数

context 使用的上下文。通常是你的 Application 或 Activity 对象。

公共方法

public int cancel ()

如果视图已经显示则将其关闭，还没有显示则不再显示。一般不需要调用该方法。正常情况下，视图会在超过存续期间后消失。

public int getDuration ()

返回存续期间

请参阅

setDuration(int)

public int getGravity ()

取得提示信息在屏幕上显示的位置。

请参阅

Gravity

           setGravity()

public float getHorizontalMargin ()

返回横向栏外空白。

public float getVerticalMargin ()

返回纵向栏外空白。

public View getView ()

返回 View 对象。

请参阅

setView(View)

public int getXOffset ()

返回相对于参照位置的横向偏移像素量。

               Toast msg = Toast.makeText(Main.this, "Message", Toast.LENGTH_LONG);
               msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);
               msg.show();

public int getYOffset ()

返回相对于参照位置的纵向偏移像素量。

public static Toast makeText (Context context, int resId, int duration)

生成一个从资源中取得的包含文本视图的标准 Toast 对象。

参数

context 使用的上下文。通常是你的 Application 或 Activity 对象。

resId 要使用的字符串资源ID，可以是已格式化文本。

duration 该信息的存续期间。值为 LENGTH_SHORT 或 LENGTH_LONG

异常

当资源未找到时抛异常 Resources.NotFoundException

public static Toast makeText (Context context, CharSequence text, int duration)

生成一个包含文本视图的标准 Toast 对象。

参数

context | 使用的上下文。通常是你的 Application 或 Activity 对象。
resId | 要显示的文本，可以是已格式化文本。
duration | 该信息的存续期间。值为 LENGTH_SHORT 或 LENGTH_LONG

public void setDuration (int duration)

设置存续期间。

请参阅

LENGTH_SHORT

LENGTH_LONG

public void setGravity (int gravity, int xOffset, int yOffset)

设置提示信息在屏幕上的显示位置。

（译者注：自定义Toast的显示位置，例如toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0)可以把Toast定位在左上角。Toast提示的位置xOffset:大于0向右移，小于0向左移

请参阅

Gravity

getGravity()

public void setMargin (float horizontalMargin, float verticalMargin)

设置视图的栏外空白。

参数

horizontalMargin 容器的边缘与提示信息的横向空白（与容器宽度的比）。

verticalMargin 容器的边缘与提示信息的纵向空白（与容器高度的比）。

public void setText (int resId)

更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。

参数

resId 为 Toast 指定的新的字符串资源ID。

public void setText (CharSequence s)

更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。

参数

s 为 Toast 指定的新的文本。

public void setView (View view)

设置要显示的 View 。

（译者注：注意这个方法可以显示自定义的toast视图，可以包含图像，文字等等。是比较常用的方法。）

请参阅

getView()

public void show ()

按照指定的存续期间显示提示信息。

补充

文章链接

让Toast一直显示的解决方法

通知 Toast详细用法（显示view）

Android一种信息提示机制：Toast

[推荐] android Toast大全（五种情形）建立属于你自己的Toast

示例代码

示例一：使用图片的Toast

Toast toast = new Toast(this);

ImageView view = new ImageView(this);

view.setImageResource(R.drawable.icon);

toast.setView(view);

toast.show();

示例二：带文字带图片Toast

private void showToast() {

// 1 创建Toast

Toast toast = Toast.makeText(this, "图文显示", Toast.LENGTH_LONG);

// 2 创建Layout，并设置为水平布局

LinearLayout mLayout = new LinearLayout(this);

mLayout.setOrientation(LinearLayout.HORIZONTAL);

ImageView mImage = new ImageView(this); // 用于显示图像的ImageView

mImage.setImageResource(R.drawable.icon);

View toastView = toast.getView(); // 获取显示文字的Toast View

mLayout.addView(mImage); // 添加到Layout

mLayout.addView(toastView);

// 3 关键，设置Toast显示的View(上面生成的Layout).

toast.setView(mLayout);

toast.show();

}

示例三：综合Toast例子

Main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<Button android:id="@+id/button1"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="Toast 显示View"

/>

<Button android:id="@+id/button2"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="Toast 直接输出"

/>

<Button android:id="@+id/button3"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="VolumeToast 应用"

/>

</LinearLayout>

Toast.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<ImageView android:src="@drawable/toast"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

/>

<TextView android:id="@+id/tv1"

    android:text=""

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

/>

</LinearLayout>

Volumetoast.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

  android:layout_width="280dp"

  android:layout_height="wrap_content"

  android:gravity="center_horizontal"

  android:orientation="vertical"

  >

          <TextView

                  android:layout_width="fill_parent"

                  android:layout_height="wrap_content"

                  android:text="Volume"

             />

             <ProgressBar

                  android:id="@+id/progress"

                  android:layout_width="280dp"

                  android:layout_height="wrap_content"

                  android:progress="50"

                  android:max="100"

                  style="?android:attr/progressBarStyleHorizontal"

             />

</LinearLayout>

Java代码文件

public class toasttest extends Activity {

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

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button button1=(Button)findViewById(R.id.button1);

button1.setOnClickListener(bt1lis);

Button button2=(Button)findViewById(R.id.button2);

button2.setOnClickListener(bt2lis);

Button button3=(Button)findViewById(R.id.button3);

button3.setOnClickListener(bt3lis);

}

OnClickListener bt1lis=new OnClickListener(){

@Override

public void onClick(View v) {

showToast();

}

};

OnClickListener bt2lis=new OnClickListener(){

@Override

public void onClick(View v) {

Toast.makeText(toasttest.this,"直接输出测试", Toast.LENGTH_LONG).show();

}

};

OnClickListener bt3lis=new OnClickListener(){

@Override

public void onClick(View v) {

showvolumeToast();

}

};

public void showToast(){

LayoutInflater li=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View view=li.inflate(R.layout.toast,null);

//把布局文件toast.xml转换成一个view

Toast toast=new Toast(this);

toast.setView(view);

//载入view,即显示toast.xml的内容

TextView tv=(TextView)view.findViewById(R.id.tv1);

tv.setText("Toast显示View内容");

//修改TextView里的内容

toast.setDuration(Toast.LENGTH_SHORT);

//设置显示时间，长时间Toast.LENGTH_LONG，短时间为Toast.LENGTH_SHORT,不可以自己编辑

toast.show();

}

public void showvolumeToast() {

// TODO Auto-generated method stub

LayoutInflater li=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View volumeView=li.inflate(R.layout.volumetoast,null);

((ProgressBar)volumeView.findViewById(R.id.progress)).setProgress(((ProgressBar)volumeView.findViewById(R.id.progress)).getProgress() + 10);

//这里还有点问题，就是progress的进度条不动，因为我们主要是想给大家展示

//Toast的用法，这里就不深究了

Toast volumeToast= new Toast(this);

volumeToast.setGravity(Gravity.BOTTOM, 0, 100);

volumeToast.setView(volumeView);

volumeToast.setDuration(Toast.LENGTH_SHORT);

volumeToast.show();

}

}

备注：我们的代码没有重复概述中的通过代码布局toast实现方法，我们是通过布局文件转换成view视图来实现复杂toast，这是两种常用的方法，大家可以根据具体情况进行选择。

下载

/Files/over140/2010/11/demo_Toast.rar

不足之处

现象：当点击一个按钮 可以显示一个四秒的toast，但是我要是连点两下就是8秒 三下十二秒

解决办法：只用一个Toast, 自己设置toast.setText(), setDuration(); 之后无论多少次.show()都能马上更新显示, 一会就消失了


TableLayout

译者署名： cnmahj

译者链接：http://blog.toolib.net/cnmahj

版本：Android 3.0 r1

结构

继承关系

public class TableLayout extends LinerLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.LinearLayout

android.widget.TableLayout

类概述

按照行列来组织子视图的布局。表格布局包含一系列的 TableRow 对象，用于定义行（实际上你也可以使用其它子对象，将在后面进行解释）。表格布局不为它的行、列和单元格显示表格线。每个行可以包含0个以上（包括0）的单元格； 每个单元格可以设置一个 View 对象.与行包含很多单元格一样， 表格包含很多列。表格的单元格可以为空.单元格可以象 HTML 那样跨列。

列的宽度由该列所有行中最宽的一个单元格决定.不过表格布局可以通过 setColumnShrinkable() 方法或者 setColumnStretchable() 方法来标记某些列可以收缩或可以拉伸. 如果标记为可以收缩，列宽可以收缩以使表格适合容器的大小。如果标记为可以拉伸， 列宽可以拉伸以占用多余的空间。表格的总宽度由其父容器决定. 记住列可以同时具有可拉伸和可收缩标记是很重要的。在列可以调整其宽度以占用可用空间， 但不能超过限度时是很有用的.最后，你可以通过调用 setColumnCollapsed() 方法来隐藏列。

表格布局的子对象不能指定 layout_width 属性.宽度永远是 MATCH_PARENT。不过子对象可以定义 layout_height 属性；其默认值是 WRAP_CONTENT. 如果子对象是 TableRow，其高度永远是 WRAP_CONTENT。

无论是在代码还是在 XML 布局文件中，单元格必须安装索引顺序加入表格行. 列号是从 0 开始的.如果你不为子单元格指定列号，其将自动增值，使用下一个可用列号. 如果你跳过某个列号，他在表格行中作为空可以改对待。参见 ApiDemos 中通过 XML 创建表格的布局示例。

虽然表格布局典型的子对象是表格行，实际上你可以使用任何视图类的子类， 作为表格视图的直接子对象.视图会作为只有一行并结合了所有列的单元格显示。

参见

Table Layout tutorial

内部类

class TableLayout.LayoutParams

该类强制将子视图的宽度设为 MATCH_PARENT， 将没有设置高度的子视图的高度设为 WRAP_CONTENT。

XML属性

属性名称 | 描述
android:collapseColumns | 隐藏从0开始的索引列。列直接必须用逗号隔开：1, 2, 5。非法或重复的设置将被忽略。 相关方法 setColumnCollapsed(int,boolean)
android:shrinkColumns | 收缩从0开始的索引列。列直接必须用逗号隔开：1, 2, 5。非法或重复的设置将被忽略。你可以通过"*"代替收缩所有列。注意一列能同时表示收缩和拉伸。 相关方法 setColumnCollapsed(int,boolean)
android:stretchColumns | 拉伸从0开始的索引列。列直接必须用逗号隔开：1, 2, 5。非法或重复的设置将被忽略。你可以通过"*"代替收缩所有列。注意一列能同时表示收缩和拉伸。 相关方法 setColumnCollapsed(int,boolean)

构造函数

public TableLayout (Context context)

为给定的上下文创建表格布局。

参数

context 应用程序上下文

public TableLayout (Context context, AttributeSet attrs)

使用指定的属性集合为给定的上下文创建表格布局。

参数

context 应用程序上下文

attrs 属性集合

公共方法

public void addView (View child)

添加子视图。如果子视图没有设置布局参数，则使用视图组(ViewGroup)的布局参数为该视图布局。

参数

child 添加的子视图

public void addView (View child, int index)

添加子视图。如果子视图没有设置布局参数，则使用视图组(ViewGroup)的布局参数为该视图布局。

参数

child 添加的子视图

index 子视图加入的位置索引

public void addView (View child, int index, ViewGroup.LayoutParams params)

用指定的布局参数添加一个子视图。

参数

child 添加的子视图

index 子视图加入的位置索引

params 为子视图指定得布局参数

public void addView (View child, ViewGroup.LayoutParams params)

使用指定的布局参数添加子视图。

参数

child 添加的子视图

params 设置到子视图上的布局参数

public TableLayout.LayoutParams generateLayoutParams (AttributeSet attrs)

返回一组基于提供的属性集合的布局参数集合。

参数

attrs 用于生成布局参数的属性集

返回值

ViewGroup.LayoutParams 或其子类的实例

public boolean isColumnCollapsed (int columnIndex)

返回指定列的折叠状态。

参数

columnIndex 列索引

返回值

折叠时为true；否则为false

public boolean isColumnShrinkable (int columnIndex)

返回指定的列是否可收缩。

参数

columnIndex 列索引

返回值

如果列可以收缩，返回true；否则返回false

public boolean isColumnStretchable (int columnIndex)

返回指定的列是否可拉伸。

参数

columnIndex 列索引

返回值

如果列可以拉伸，返回true；否则返回false

public boolean isShrinkAllColumns ()

指示是否所有的列都是可收缩的。

返回值

如果所有列都可收缩，返回true；否则返回false

public boolean isStretchAllColumns ()

指示是否所有的列都是可拉伸的。

返回值

如果所有列都可拉伸，返回true；否则返回false

public void requestLayout ()

当某些变更导致视图的布局失效时调用该方法。该方法按照视图树的顺序调用。

public void setColumnCollapsed (int columnIndex, boolean isCollapsed)

折叠或恢复给定列。折叠时，列从屏幕上消失，其空间由其它列占用。 当列属于 TableRow 时才可以进行折叠/恢复操作。

调用该方法会请求布局操作。

相关XML属性

android:collapseColumns

参数

columnIndex 列索引

isCollapsed 折叠时为true；否则为false

public void setColumnShrinkable (int columnIndex, boolean isShrinkable)

设置指定列是否可收缩。当行太宽时，表格可以收缩该列以提供更多空间。

调用该方法会请求布局操作。

相关XML属性

android:shrinkColumns

参数

columnIndex 列索引

isShrinkable 如果列可以收缩，设为真；否则设为假。默认是假。

public void setColumnStretchable (int columnIndex, boolean isStretchable)

设置指定列是否可拉伸。可拉伸时，列会尽可能多的占用行中的可用空间。

调用该方法会请求布局操作。

相关XML属性

android:stretchColumns

参数

columnIndex 列索引

isStretchable 如果列可以拉伸，设为真；否则设为假.默认是假

public void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)

注册当从视图中添加或移除子视图时发生的回调函数。

参数

listener 层次结构变更时执行的回调函数

public void setShrinkAllColumns (boolean shrinkAllColumns)

标记所有列为可收缩的便利的方法。

相关XML属性

android:shrinkColumns

参数

shrinkAllColumns 如果标记所有列为可收缩时为true

public void setStretchAllColumns (boolean stretchAllColumns)

标记所有列为可拉伸的便利的方法。

相关XML属性

android:stretchColumns

参数

stretchAllColumns 如果标记所有列为可拉伸时为true

受保护方法

protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

（译者注：检测是不是AbsoluteLayout.LayoutParams的实例）

protected LinearLayout.LayoutParams generateDefaultLayoutParams ()

返回宽度为 MATCH_PARENT， 高度为 WRAP_CONTENT 的布局参数集合。

返回值

默认布局参数集合或空

protected LinearLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)

基于提供的布局参数返回一组安全的布局参数集合.当传入 ViewGroup 的视图的参数没有通过 checkLayoutParams(android.view.ViewGroup.LayoutParams) 的检测时，调用该方法. 该方法会返回适合 ViewGroup 的新的布局参数，可能从指定的布局参数中复制适当的属性。

参数

p 要转换为适合于 ViewGroup 的布局参数的集合

返回值

ViewGroup.LayoutParams 或其子类的实例

protected void onLayout (boolean changed, int l, int t, int r, int b)

该视图设置其子视图的大小及位置时调用.派生类可以重写此方法，并为其子类布局。

参数

changed 是否为视图设置了新的大小和位置

l 相对于父视图的左侧的位置

t 相对于父视图的顶部的位置

r 相对于父视图的右侧的位置

b 相对于父视图的底部的位置

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

评估视图及其内容，以决定其宽度和高度.此方法由 measure(int, int) 调用，子类可以重载以提供更精确、更有效率的衡量其内容尺寸的方法。

约定： 覆盖该方法时，必须调用 setMeasuredDimension(int, int) 方法来保存评估结果的视图的宽度和高度.如果忘记将导致 measure(int, int) 方法抛出 IllegalStateException 异常.要有效的利用父类的 onMeasure(int, int)方法。

基类测量的是背景的大小，除非 MeasureSpec 允许超过背景.子类应该重写 onMeasure(int, int) 方法，以为其内容提供更适合的大小。

如果重写了该方法，子类要确保其高度和宽度大于等于视图的最小高度和宽度. （getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()）

参数

widthMeasureSpec 父视图要求的横向空间大小.该要求由 View.MeasureSpec 进行了编码处理。

heightMeasureSpec 父视图要求的纵向空间大小.该要求由 View.MeasureSpec 进行了编码处理。

补充

文章精选

Android UI学习 - TableLayout


TableLayout.LayoutParams

译者署名： madgoat

译者链接： http://madgoat.cn

版本：Android 3.0 r1

结构

继承关系

public static class TableLayout.LayoutParams extends LinerLayout.LayoutParams

java.lang.Object

android.view.ViewGroup.LayoutParams

android.view.ViewGroup.MarginLayoutParams

android.widget.LinearLayout.LayoutParams

android.widget.TableLayout.LayoutParams

概述

这种布局参数强制每个子元素的宽度为 MATCH_PARENT和每个子元素的高度为 WRAP_CONTENT，但只有在未指定高度的情况下。

构造函数

public TableLayout.LayoutParams (Context c, AttributeSet attrs)

public TableLayout.LayoutParams (int w, int h)

public TableLayout.LayoutParams (int w, int h, float initWeight)

public TableLayout.LayoutParams ()

设置子元素的宽为 ViewGroup.LayoutParams 高为 WRAP_CONTENT。

public TableLayout.LayoutParams (ViewGroup.LayoutParams p)

public TableLayout.LayoutParams (ViewGroup.MarginLayoutParams source)

公共方法

protected void setBaseAttributes (TypedArray a, int widthAttr, int heightAttr)

修改行宽度的参数为 MATCH_PARENT；行高度的布局参数如果没有指定则修改为 WRAP_CONTENT。

参数

a 一组样式属性

widthAttr 获取的宽度属性

heightAttr 获取的高度属性


TableRow

译者署名：Snail

译者链接：http://blog.csdn.net/zuolongsnail

版本：Android 3.0 r1

类结构

public class TableRow extends LinerLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.LinearLayout

android.widget.TableRow

类概述

按照水平方向来组织子视图的布局。TableRow应该总是作为TableLayout的子视图。如果TableRow的父视图不是TableLayout，那么TableRow将相当于一个水平方向布局的LinearLayout。

在XML配置文件中TableRow的子视图不需要详细指定其layout_width和layout_height属性值。TableRow总是强制将这两个属性分别赋值为MATCH_PARENT和WRAP_CONTENT。

可参考android.widget.TableRow.LayoutParams的布局属性。

内部类

class TableRow.LayoutParams

适用于TableRow的子视图的属性设置

构造函数

public TableRow (Context context)

为给定的上下文创建TableRow布局。

参数

context 应用程序环境

public TableRow (Context context, AttributeSet attrs)

使用指定的属性集合为给定的上下文创建TableRow布局。

参数

context 应用程序环境

attrs 属性集合

公共方法

public TableRow.LayoutParams generateLayoutParams (AttributeSet attrs)

返回一组基于提供的属性集合的布局参数集合。

参数

attrs 用于生成布局参数的属性集

返回值

ViewGroup.LayoutParams或其子类的实例

public View getVirtualChildAt (int i)

返回指定索引的视图。这个方法被重载时应当考虑到其虚拟子视图。参见TableLayout和TableRow的示例代码。

参数

i 子视图的索引

返回值

指定索引的子视图

public int getVirtualChildCount ()

返回虚拟子视图的个数。如果这个布局支持子视图，此数量可能与实际子视图数量不同。 参见TableLayout和TableRow的示例代码。

返回值

虚拟子视图的数量

public void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)

注册一个回调函数，当从视图中添加或移除子视图时被调用。

参数

listener 层次结构变更时执行的回调函数

受保护方法

protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

（译者注：检测是不是AbsoluteLayout.LayoutParams的实例）

protected LinearLayout.LayoutParams generateDefaultLayoutParams ()

返回宽度为MATCH_PARENT，高度为WRAP_CONTENT且没有跨度的布局参数集合。

返回值

默认布局参数集合或空

protected LinearLayout.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)

返回一组合法的受支持的布局参数集合。当一个ViewGroup传递一个布局参数没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)检测的视图时，此方法将被调用。此方法会返回一组新的适合当前ViewGroup的布局参数，可能从指定的一组布局参数集合中复制适当的属性。

参数

p 被转换成一组适合当前ViewGroup的布局参数

返回值

一个ViewGroup.LayoutParams的实例或者其中的一个子节点

protected void onLayout (boolean changed, int l, int t, int r, int b)

在此视图设置其子视图的大小及位置时调用。派生类可以重写此方法并重新为其子类布 局。

参数

changed 这是当前视图的一个新大小或位置

l 相对于父节点的左边位置

t 相对于父节点的顶点位置

r 相对于父节点的右边位置

b 相对于父节点的底部位置

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

测量视图及其内容，以确定其宽度和高度。此方法由measure(int, int)调用。需要被子类重写以提供准确、高效的测量其内容的方法。

约定：当重写此方法时，必须调用setMeasuredDimension(int, int)来保存当前视图的宽度和高度。如果调用不成功将会导致一个IllegalStateException异常，由measure(int, int)抛出。要有效的调用父类的onMeasure(int, int)方法。

基类的实现是以背景大小为默认大小，除非MeasureSpec（测量细则）允许更大的背景。子类应重写onMeasure(int, int)以对其内容提供更合适的大小。

如果此方法被重写，那么子类要确保其测量高度和测量宽度要大于视图的最小宽度和最小高度（getSuggestedMinimumHeight()和getSuggestedMinimumWidth()）。

参数

widthMeasureSpec 父视图要求的横向空间大小。该要求由View.MeasureSpec进行编码

heightMeasureSpec 父视图要求的纵向空间大小。该要求由View.MeasureSpec进行编码

补充

推荐教程：

Android Doc官方教程-在TableLayout中使用TableRow

在TableLayout中使用TableRow对象来定义多行


TableRow.LayoutParams

译者署名：madgoat

译者链接：http://madgoat.cn

版本：Android 3.0 r1

类结构

public class TableRow extends LinerLayout

java.lang.Object

android.view.ViewGroup.LayoutParams

android.view.ViewGroup.MarginLayoutParams

android.widget.LinearLayout.LayoutParams

android.widget.TableRow.LayoutParams

类概述

设置在表格行中使用的布局参数

参见

TableLayout.LayoutParams

XML属性

属性名称 | 描述
android:layout_column | 该子元素所在的列的索引值。必须是一个整数值，例如“100”。
android:layout_span | 定义此子元素跨越多少列。必须>=1。必须是一个整数值，例如“100”。

字段

public int column

单元格cell在widget上代表的列索引。

public int span

widget跨越的列数

构造函数

public TableRow.LayoutParams (Context c, AttributeSet attrs)

public TableRow.LayoutParams (int w, int h)

设置子元素的宽度和高度

参数

w 期望高度

h 期望宽度

public TableRow.LayoutParams (int w, int h, float initWeight)

参数

w 期望高度

h 期望宽度

initWeight 期望权重(weight)

public TableRow.LayoutParams ()

设置子元素的宽度为 ViewGroup.LayoutParams，高度参数为 WRAP_CONTENT。

public TableRow.LayoutParams (int column)

设置指定列上的视图的宽度参数为 MATCH_PARENT，高度参数为 WRAP_CONTENT

参数

column 视图中列的索引

public TableRow.LayoutParams (ViewGroup.LayoutParams p)

public TableRow.LayoutParams (ViewGroup.MarginLayoutParams source)

公共方法

protected void setBaseAttributes (TypedArray a, int widthAttr, int heightAttr)

从提供的参数中提取出布局参数

参数

a 从布局参数中提取的样式属性

widthAttr 宽度属性的标识符

heightAttr 高度属性的标识符


TabWidget

译者署名：madgoat

译者链接：http://madgoat.cn

版本：Android 3.0 r1

结构

继承关系

public class TabWidget extends LinearLayout

implements View.OnFocusChangeListener

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.LinearLayout

android.widget.TabWidget

类概述

显示选项卡标签的列表，用于代表父选项卡集合的每一页。当前widget的容器对象是TabHost。当用户选择一个选项卡时，此对象给父容器对象TabHost发送一个消息，告诉TabHost切换到对应的页面显示。此对象上的很多方法，你通常不会直接使用。容器TabHost被用来添加标签，添加并管理回调函数。你可能会调用此对象以迭代选项卡列表，或者调整选项卡列表的布局，但大多数方法应该是通过容器TabHost对象调用。

参见Tab Layout tutorial。

XML属性

属性名称 | 描述
android:divider | 可绘制对象，被绘制在选项卡窗口间充当分割物。
android:tabStripEnabled | 确定是否在选项卡绘制
android:tabStripLeft | 被用来绘制选项卡下面的分割线左边部分的可视化对象。
android:tabStripRight | 被用来绘制选项卡下面的分割线右边部分的可视化对象。

公共方法

public void addView (View child)

增加子视图。如果子视图没有设置布局参数，那么将为子视图设置此ViewGroup默认的布局参数。

参数

child 新增的子视图

public void childDrawableStateChanged (View child)

如果调用addStatesFromChildren函数返回true，刷新此组的可视化对象的状态（包括它的子元素的状态）。

参数

child 可视化对象状态被改变的子元素。

public void dispatchDraw (Canvas canvas)

绘制时调用此方法来绘制子视图。派生类在被绘制之前，为获取控制可能会重写此方法（但必须在它自己的视图已经被绘制之后）。

参数

canvas 绘制视图的画布(canvas)

public void focusCurrentTab (int index)

设置当前选项卡并且让其获得焦点。此方法确保获取焦点的选项卡窗口匹配选中的窗口，一般情况下类似 setCurrentTab(int)。通常当我们通过操作UI实现时，这些都不是问题，

因为UI负责调用TabWidget.onFocusChanged()，但如果我们通过程序控制选中选项卡窗口，那么我们就必须确认保持焦点。（译者注：setCurrentTab(int)执行后，选中指定索引的选项卡窗口，但不获取焦点。focusCurrentTab(int)执行后，不仅通过调用setCurrentTab(int)

选中指定索引的选项卡窗口还获取焦点。）

参数

index 你想要设置焦点（橘色高亮）并且选中（选项卡被至于部件widget的前端）的选项卡。

参见

setCurrentTab(int)

public View getChildTabViewAt (int index)

返回位于指定索引位置的选项卡标识符的视图

参数

index 选项卡指示符视图返回的从零开始的索引

返回值

在提供的索引位置上的选项卡指示符视图

public int getTabCount ()

返回选项卡的数量

返回值

选项卡指示符视图的数量

public boolean isStripEnabled ()

指明选项卡指示符的底部分隔线是否绘制

public void onFocusChange (View v, boolean hasFocus)

当视图的焦点状态被改变时调用。

参数

v 状态变化的视图

hasFocus 视图的新焦点状态。

public void sendAccessibilityEventUnchecked (AccessibilityEvent event)

处理用于发送 AccessibilityEvent的请求。如果再发送之前调度事件，本方法不保证可访问性检查。可以通过调用者调用 isEnabled()检查。

参数

event 事件

public void setCurrentTab (int index)

设置当前选项卡。此方法被用来将选项卡置于widget的前部，并且通知其它的UI元素，一个不同的选项卡被调整到了前台。注意，这不同于传统的“焦点”，是从视图逻辑的焦点。

例如，如果我们在选项卡式视图中有一个列表，一个用户可能会上下移动列表，通过列表选项移动UI焦点（橘色高亮）。光标的移动并不影响选项卡的选中状态，因为滚动 是在同一个选项卡上的。选中的选项卡仅仅当我们在选项卡上切换时（在此例中，从列表视图移到下一选项卡视图）更改。如果想要一次性的设置焦点并选中选项卡，请使用 setCurrentTab(int)。

正常情况下，视图逻辑关注调整焦点，除非你规避了UI，你可能仅仅将你的兴趣集中在这里。

参数

index 你想要指做选中选项卡的选项卡索引（选项卡被显示到widget的前部）

参见

focusCurrentTab(int)

public void setDividerDrawable (Drawable drawable)

设置用于在选项窗口指示符间分隔的可绘制对象

参数

drawable 用于分隔的可绘制对象

public void setDividerDrawable (int resId)

设置用于在两个选项卡标识符之间进行分隔的可绘制对象

参数

resId 被用来分隔的可绘制对象的资源标识

public void setEnabled (boolean enabled)

设置当前视图的启用状态。子类的不同而其对应的启用状态的解释也不相同。

参数

enabled 是否启动

public void setLeftStripDrawable (int resId)

设置被用来当作选项卡指示符下面的分割线，左边部分的可绘制对象。

参数

resId the 被用来当作左边分隔线的可绘制对象的资源标识符

public void setLeftStripDrawable (Drawable drawable)

设置被用来当作选项卡指示符下面的分割线，左边部分的可绘制对象。

参数

drawable 左边分隔线的可绘制对象

public void setRightStripDrawable (int resId)

设置被用来当作选项卡指示符下面的分割线，右边部分的可绘制对象。

参数

resId 被用来当作右边分隔线的可绘制对象的资源标识符

public void setRightStripDrawable (Drawable drawable)

设置被用来当作选项卡指示符下面的分割线，右边部分的可绘制对象。

参数

drawable 右边分隔线的可绘制对象

public void setStripEnabled (boolean stripEnabled)

控制选项卡指示符底部的分隔线是否绘制。默认是绘制。如果用户为选项卡指示符指定一个定制的视图，那么TabHost类调用此方法以禁用绘制底部分割线。

参数

stripEnabled 如果需要绘制底部分割线为true

受保护方法

protected int getChildDrawingOrder (int childCount, int i)

返回要绘制的子元素在当前迭代中的索引。如果你需要修改子元素的绘制顺序，可以覆写此方法。默认情况下返回参数i值。

注意：为使此方法被调用，你必须先通过调用 setChildrenDrawingOrderEnabled(boolean)启用子元素排序

参数

i 当前的迭代值

返回值

将要绘制的子元素在当前迭代的索引

protected void onSizeChanged (int w, int h, int oldw, int oldh)

布局过程中，当此视图的大小发生改变时被调用的。如果你只是添加到视图的层次结构，你调用时可以使用0当作之前的值（old value）。

参数

w 此视图的当前宽度

h 此视图的当前高度

oldw Old此视图之前的宽度

oldh 此视图之前的高度

补充

术语对照

indicator 指示符

drawable 可绘制对象

iteration 迭代

strips 分割线

文章链接

Android选项卡(TabWidget)例子

{Android学习指南}TabWidget

Android将TAB选项卡放在屏幕底部

示例代码

Java：

public class TabDemo1 extends Activity implements OnClickListener {

TabHost mTabHost = null;

TabWidget mTabWidget = null;

Button btnVisiable, btnStrip;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.tabdemo1);

mTabHost = (TabHost) findViewById(android.R.id.tabhost);

mTabHost.setup();

mTabWidget = mTabHost.getTabWidget();

mTabHost.addTab(mTabHost.newTabSpec("tab1").setContent(

R.id.LinearLayout001).setIndicator("Tab1"));

mTabHost.addTab(mTabHost.newTabSpec("tab2").setContent(

R.id.LinearLayout002).setIndicator("Tab2"));

mTabHost.addTab(mTabHost.newTabSpec("tab3").setContent(

R.id.LinearLayout003).setIndicator("Tab3"));

// mTabHost.setCurrentTab(1);

btnVisiable = (Button) findViewById(R.id.btnVisiable);

btnStrip = (Button) findViewById(R.id.btnStrip);

btnVisiable.setOnClickListener(this);

btnStrip.setOnClickListener(this);

setTitle("共有" + mTabWidget.getTabCount() + "个tab");

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.btnVisiable:

if (mTabWidget.getVisibility() != android.view.View.VISIBLE)

mTabWidget.setVisibility(android.view.View.VISIBLE);

else

mTabWidget.setVisibility(android.view.View.INVISIBLE);

break;

case R.id.btnStrip:

mTabWidget.setStripEnabled(!mTabWidget.isStripEnabled());

mTabWidget.setRightStripDrawable(android.R.color.transparent);

break;

default:

break;

}

}

}

XML：

<?xml version="1.0" encoding="utf-8"?>

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent" android:layout_height="fill_parent"

android:id="@android:id/tabhost"

>

<LinearLayout android:layout_width="fill_parent"

android:orientation="vertical" android:layout_height="fill_parent"

>

<TabWidget android:id="@android:id/tabs"

android:layout_width="fill_parent" android:layout_height="wrap_content"

></TabWidget>

<FrameLayout android:id="@android:id/tabcontent"

android:layout_height="wrap_content" android:layout_width="fill_parent"

>

<LinearLayout android:id="@+id/LinearLayout001" android:orientation="vertical"

android:layout_width="fill_parent" android:layout_height="fill_parent"

>

<Button android:id="@+id/btnVisiable" android:text="显示状态切换"

android:layout_width="fill_parent" android:layout_height="wrap_content"

></Button>

<Button android:id="@+id/btnStrip" android:layout_width="fill_parent"

android:layout_height="wrap_content" android:text="分隔线状态切换"

></Button>

<TextView android:id="@+id/TextView1" android:layout_width="fill_parent"

android:layout_height="wrap_content" android:text="小龙是好人!!!"

></TextView>

</LinearLayout>

<LinearLayout android:id="@+id/LinearLayout002"

android:layout_width="fill_parent" android:layout_height="fill_parent"

>

<TextView android:id="@+id/TextView2" android:layout_width="fill_parent"

android:layout_height="wrap_content" android:text="小龙是坏蛋!"

></TextView>

</LinearLayout>

<LinearLayout android:id="@+id/LinearLayout003"

android:layout_width="fill_parent" android:layout_height="fill_parent"

>

<TextView android:id="@+id/TextView3" android:layout_width="fill_parent"

android:layout_height="wrap_content" android:text="小龙还是坏蛋!"

></TextView>

</LinearLayout>

</FrameLayout>

</LinearLayout>

</TabHost>


TextSwitcher

译者署名：madgoat

译者链接：http://madgoat.cn/

版本：Android 2.2 r1

public class TextSwitcher extends ViewSwitcher

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ViewAnimator

android.widget.ViewSwitcher

android.widget.TextSwitcher

概述

ViewSwitcher仅仅包含子类型TextView。TextSwitcher被用来使屏幕上的label产生动画效果。每当setText(CharSequence)被调用时，TextSwitcher使用动画方式将当前的文字内容消失并显示新的文字内容。

构造函数

public TextSwitcher (Context context)

创建一个新的空TextSwitcher

参数

context 应用程序上下文

public TextSwitcher (Context context, AttributeSet attrs)

使用提供的context和attributes来创建一个空的TextSwitcher

参数

context 应用程序环境

attrs 属性集合

公共方法

public void addView (View child, int index, ViewGroup.LayoutParams params)

根据指定的布局参数新增一个子视图

参数

child 新增的子视图

index 新增子视图的位置

params 新增子视图的布局参数

抛出异常

IllegalArgumentException 当子视图不是一个TextView实例时

public void setCurrentText (CharSequence text)

设置当前显示的文本视图的文字内容。非动画方式显示。

参数

text 需要显示的新文本内容

public void setText (CharSequence text)

设置下一视图的文本内容并切换到下一视图。可以动画的退出当前文本内容，显示下一文本内容。

参数

text 需要显示的新文本内容

示例

摘自APIDemos->View->TextSwitcher

Java:

/**

* Uses a TextSwitcher.

*/

public class TextSwitcher1 extends Activity implements ViewSwitcher.ViewFactory,

View.OnClickListener {

private TextSwitcher mSwitcher;

private int mCounter = 0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.text_switcher_1);

mSwitcher = (TextSwitcher) findViewById(R.id.switcher);

mSwitcher.setFactory(this);

Animation in = AnimationUtils.loadAnimation(this,

android.R.anim.fade_in);

Animation out = AnimationUtils.loadAnimation(this,

android.R.anim.fade_out);

mSwitcher.setInAnimation(in);

mSwitcher.setOutAnimation(out);

Button nextButton = (Button) findViewById(R.id.next);

nextButton.setOnClickListener(this);

updateCounter();

}

public void onClick(View v) {

mCounter++;

updateCounter();

}

private void updateCounter() {

mSwitcher.setText(String.valueOf(mCounter));

}

public View makeView() {

TextView t = new TextView(this);

t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);

t.setTextSize(36);

return t;

}

}

Xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<Button android:id="@+id/next"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/text_switcher_1_next_text" />

<TextSwitcher android:id="@+id/switcher"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

</LinearLayout>


ToggleButton

农民伯伯

版本：Android 2.2 r1

public class ToggleButton extends CompoundButton

java.lang.Object

android.view.View

android.widget.TextView

android.widget.Button

android.widget.CompoundButton

android.widget.ToggleButton

概述

通过一个带有亮度指示同时默认文本为“ON”或“OFF”的按钮显示选中/未选中状态。

XML属性

属性名称 | 描述
android:disabledAlpha | 设置按钮在禁用时透明度。
android:textOff | 未选中时按钮的文本
android:textOn | 选中时按钮的文本

公共方法

public CharSequence getTextOff ()

返回按钮未选中时的文本。

返回值

文本

public CharSequence getTextOn ()

返回按钮选中时的文本。

返回值

文本

public void setBackgroundDrawable (Drawable d)

设置指定的可绘制（译者注：如图片）为背景，或删除背景。如果让背景有边距，这个视图的边距就是背景的边距。然而，当背景被删除时，这个视图的边距不能被触摸。如果需要设置边距，请使用方法setPadding(int, int, int, int)。

（译者注：如果设置删除背景整个就不显示了，此外设置背景后选中和被选中的图片也不显示了，如下图： ，实现代码：

）

参数

d 设置可绘制（译者注：如图片）为背景，或设置为空删除背景。

public void setChecked (boolean checked)

改变按钮的选中状态。

参数

checked true让按钮选中，false让按钮不选中

public void setTextOff (CharSequence textOff)

设置按钮未选中时显示的文本。

参数

textOff 文本

public void setTextOn (CharSequence textOn)

设置按钮选中时显示的文本。

参数

textOn 文本

受保护方法

protected void drawableStateChanged ()

在视图状态的变化影响到所显示可绘制的状态时调用这个方法。

确保在覆盖时中调用父类方法（译者注：super. drawableStateChanged ()）。

protected void onFinishInflate ()

XML文件加载视图完成时调用。这个函数在加载的最后阶段被调用，所有的子视图已经被添加。

即使子类重写了onFinishInflate方法，也应该始终确保调用父类方法（译者注：super. onFinishInflate()），使系统能够调用。


TwoLineListItem

译者署名:loveshirui

译者链接：http://heji.javaeye.com

版本：Android 2.2 r1

public class TwoLineListItem extends RelativeLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.RelativeLayout

android.widget.TwoLineListItem

概述

这个布局是用在ListView中的，有两个子View。每一项有两个ID值为text1和text2的TextView的元素。也有一个ID是selecteIcon的元素，这个元素可以是任何View的子类（最典型的就是ImageView）。支持标准的布局资源文件（不包含所选择的icon），但是你可以为这个对象自己定义XML布局文件。

XML属性

属性名称 | 描述
android:mode | 布局模式：oneLine 一行collapsing 折叠twoLine 两行

公共方法

Public TextView getText1 ()

返回ID为Text1的TextView对象

返回值

ID为Text1的TextView对象

Public TextView getText2 ()

返回ID为Text1的TextView对象

返回值

ID为Text1的TextView对象

受保护方法

protected void onFinishInflate ()

初始化XML布局。


VideoView

译者署名：唐明

审核：cnmahj

版本：Android 3.1 r1

结构

继承关系

public class VideoView extends SurfaceView

implements MediaController.MediaPlayerControl

java.lang.Object

android.view.View

android.view.SurfaceView

android.widget.VideoView

类概述

（图片转载至这里）

用于播放视频文件。 VideoView 类可以从不同的来源（例如资源文件或内容提供器） 读取图像，计算和维护视频的画面尺寸以使其适用于任何布局管理器， 并提供一些诸如缩放、着色之类的显示选项。

构造函数：

public VideoView (Context context)

创建一个默认属性的VideoView实例。

参数

context 视图运行的应用程序上下文，通过它可以访问当前主题、资源等等。

public VideoView (Context context, AttributeSet attrs)

创建一个带有attrs属性的VideoView实例。

参数

context 视图运行的应用程序上下文，通过它可以访问当前主题、资源等等。

attrs 用于视图的 XML 标签属性集合。

public VideoView (Context context, AttributeSet attrs, int defStyle)

创建一个带有attrs属性，并且指定其默认样式的VideoView实例。

参数

context 视图运行的应用程序上下文，通过它可以访问当前主题、资源等等。

attrs 用于视图的 XML 标签属性集合。

defStyle 应用到视图的默认风格。如果为 0 则不应用（包括当前主题中的）风格。 该值可以是当前主题中的属性资源，或者是明确的风格资源 ID。

公共方法

public boolean canPause ()

（译者注：判断是否能够暂停播放视频）

public boolean canSeekBackward ()

（译者注：判断是否能够倒退）

public boolean canSeekForward ()

（译者注：判断是否能够快进）

public int getBufferPercentage ()

（译者注：获得缓冲区的百分比）

public int getCurrentPosition ()

（译者注：获得当前的位置）

public int getDuration ()

（译者注：获得所播放视频的总时间）

public boolean isPlaying ()

（译者注：判断是否正在播放视频）

public boolean onKeyDown (int keyCode, KeyEvent event)

KeyEvent.Callback.onKeyMultiple() 的默认实现。如果视图可用并可按， 当按下 KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER 时执行视图的按下事件。

参数

keyCode 表示按下的键的、在 KEYCODE_ENTER 中定义的键盘代码

event KeyEvent 对象，定义了按钮动作

返回值

如果处理了事件，返回真。如果允许下一个事件接受器处理该事件，可以返回假

public boolean onTouchEvent (MotionEvent ev)

实现该方法来处理触屏事件。

参数

event 触屏事件

返回值

如果事件已经处理返回True，否则返回false。

public boolean onTrackballEvent (MotionEvent ev)

实现这个方法去处理轨迹球的动作事件，轨迹球相对于上次事件移动的位置能用MotionEvent.getX() 和 MotionEvent.getY()函数取回。对应用户按下一次方向键， 他们通常作为一次移动处理（为了表现来自轨迹球的更小粒度的移动信息，他们返回小数）。

参数

ev 动作的事件

public void pause ()

（译者注：使得播放暂停）

public int resolveAdjustedSize (int desiredSize, int measureSpec)

（译者注：取得调整后的尺寸。如果measureSpec对象传入的模式是UNSPECIFIED那么返回的是desiredSize。如果measureSpec对象传入的模式是AT_MOST，返回的将是desiredSize和measureSpec对象的尺寸两者中最小的那个。如果measureSpec对象传入的模式是EXACTLY，那么返回的是measureSpec对象中的尺寸大小值。

关于MeasureSpec类的额外说明：MeasureSpec是一个android.view.View的内部类。它封装了从父类传送到子类的布局要求信息。每个MeasureSpec对象描述了控件的高度或者宽度。MeasureSpec对象是由尺寸和模式组成的，有3个模式：UNSPECIFIED、EXACTLY、AT_MOST，这个对象由MeasureSpec.makeMeasureSpec()函数创建。）

public void resume ()

（译者注：恢复挂起的播放器）

public void seekTo (int msec)

（译者注：设置播放位置）

public void setMediaController (MediaController controller)

（译者注：设置媒体控制器）

public void setOnCompletionListener (MediaPlayer.OnCompletionListener l)

注册在媒体文件播放完毕时调用的回调函数。

参数

l 要执行的回调函数

public void setOnErrorListener (MediaPlayer.OnErrorListener l)

注册在设置或播放过程中发生错误时调用的回调函数。如果未指定回调函数， 或回调函数返回假，VideoView 会通知用户发生了错误。

参数

l 要执行的回调函数

public void setOnPreparedListener (MediaPlayer.OnPreparedListener l)

注册在媒体文件加载完毕，可以播放时调用的回调函数。

参数

l 要执行的回调函数

public void setVideoPath (String path)

（译者注：设置视频文件的路径名）

public void setVideoURI (Uri uri)

（译者注：设置视频文件的统一资源标识符）

public void start ()

（译者注：开始播放视频文件）

public void stopPlayback ()

（译者注：停止回放视频文件）

public void suspend ()

（译者注：挂起视频文件的播放）

补充

文章精选

VideoView « { Android学习指南}

Android利用VideoView实现VideoPlayer

编写简单自定义VideoView

Android VideoView如何播放RTSP的流

android利用VideoView实现视频全屏播放


ViewAnimator

译者署名： madgoat

译者链接：http://madgoat.cn

版本：Android 2.3 r1

public class ViewAnimator extends FrameLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ViewAnimator

已知直接子类

ViewFlipper, ViewSwitcher

已知间接子类

ImageSwitcher, TextSwitcher

概述

FrameLayout容器的基类，当进行视图切换时显示动画效果。

（译者注：此类不常用，常用其直接子类ViewFlipper, ViewSwitcher或间接子类ImageSwitcher, TextSwitcher）

XML属性

属性名称 | 描述
android:inAnimation | （译者注：设置View 进入屏幕时候使用的动画）
android:outAnimation | （译者注：设置View 离开屏幕时候使用的动画）

公共方法

public void addView (View child, int index, ViewGroup.LayoutParams params)

添加一个具有指定布局参数子视图。

参数

child 添加的子视图

index 添加的子视图所在的位置

params 设置子视图的布局参数

public int getBaseline ()

返回widget的文本基线到widget上边界的偏移量，如果当前widget不支持基线对齐，此方法返回-1

返回值

在widget界限内基线的偏移量，如果不支持基线对齐，返回-1

public View getCurrentView ()

返回与当前显示的子元素相应的视图

返回值

当前显示的视图

参见

getDisplayedChild()

public int getDisplayedChild ()

返回当前显示的子视图的索引

public Animation getInAnimation ()

返回被用来显示视图进入屏幕的动画

返回值

一个动画对象animation，如果没有设置的话，返回一个null

参见

setInAnimation(android.view.animation.Animation)

setInAnimation(android.content.Context, int)

public Animation getOutAnimation ()

返回被用来显示视图离开屏幕的动画

返回值

一个动画对象animation，如果没有设置的话，返回一个null

参见

setOutAnimation(android.view.animation.Animation)

setOutAnimation(android.content.Context, int)

public void removeAllViews ()

调用此方法从ViewGroup中移除所有的子视图

public void removeViewAt (int index)

移除组(group)中指定位置上的视图

参数

index 需要移除的视图在组中的位置

public void removeViewInLayout (View view)

在布局时移除一个视图。当你需要在onLayout()中移除一个视图时，此方法很有用。

参数

view 要从组中移除的视图

public void removeViews (int start, int count)

从组中移除指定范围的视图

参数

start 要移除的多个视图在组中的开始位置

count 移除视图的数量

public void removeViewsInLayout (int start, int count)

在布局时移除一组视图。当你需要在onLayout()中移除很多视图时，此方法很有用。

参数

start 移除的多个视图在组中第一个视图的索引

count 移除视图的数量

public void setAnimateFirstView (boolean animate)

设置当前视图在首次加载时是否动画显示。

参数

animate 在第一次显示当前视图时，是否动画显示

public void setDisplayedChild (int whichChild)

设置哪个子视图将被显示出来

参数

whichChild 将要显示的子视图的索引

public void setInAnimation (Animation inAnimation)

设置视图进入屏幕时使用的动画。

参数

inAnimation 视图进入屏幕时使用的动画

参见

getInAnimation()

setInAnimation(android.content.Context, int)

public void setInAnimation (Context context, int resourceID)

设置视图进入屏幕时使用的动画。

参数

context 上下文

resourceID 动画的资源id

参见

getInAnimation()

setInAnimation(android.view.animation.Animation)

public void setOutAnimation (Animation outAnimation)

设置视图退出屏幕时使用的动画

参数

outAnimation 当视图退出屏幕时开始的动画

参见

getOutAnimation()

setOutAnimation(android.content.Context, int)

public void setOutAnimation (Context context, int resourceID)

设置视图退出屏幕时使用的动画

参数

context 上下文

resourceID 动画的资源id

参见

getOutAnimation()

setOutAnimation(android.view.animation.Animation)

public void showNext ()

手动显示下一个子视图

public void showPrevious ()

手动显示上一个子视图

补充

文章精选

Android-自定义切换视图一

Ophone 2D UI 动画教程之二——屏幕切换效果实现


ViewFlipper

译者署名： ivanlee

版本：Android 2.2 r1

结构

继承关系

public class ViewFlipperextends ViewAnimator

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ViewAnimator

android.widget.ViewFlipper

类概述

被添加到ViewFlipper中的两个或两个以上的视图之间将执行一个简单的ViewAnimator动画。一次仅能显示一个子视图。如果需要，可以设置间隔时间使子视图像幻灯片一样自动显示。（译者注：com.example.android.apis.view/Animation_2.java包含该类示例程序）

XML属性

属性名称 | 描述
android:autoStart | 当设为true时，自动启动动画 此时必须是一个布尔值，属性值为true或false （对应于全局资源属性R.attr.autoStart）
android:flipInterval | 显示下一个视图的时间间隔

公共方法

public bool isAutoStart ()

如果视图显示到窗口上时会自动调用startFlipping()方法，则返回true

public bool isFlipping()

如果子视图正在切换，则返回true

public bool setAutoStart (bool autoStart)

设置视图显示到窗口上时是否会自动调用startFlipping()方法

public bool setFlipInterval (int milliseconds)

视图间切换的时间间隔

参数

milliseconds 毫秒数

public bool startFlipping ()

开始在子视图间定时循环切换

public bool stopFlipping ()

停止切换

补充

文章精选

ViewFlipper的使用

android开发ViewFlipper触摸动画

Android 固定物件的進出動畫 (入場/出場) - ViewFlipper（blogspot）

android手势翻页效果


ViewSwitcher

译者署名： ivanlee

版本：Android 2.3 r1

结构

继承关系

public class ViewSwitcher extends ViewAnimator

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ViewAnimator

android.widget.ViewSwitcher

已知直接子类

ImageSwitcher, TextSwitcher

类概述

在两个视图间转换时显示动画，有一个可以创建这些视图的工厂类。你可以用工厂来创建这些视图，也可以自己创建。一个ViewSwitcher只允许包含两个子视图，且一次仅能显示一个。

（译者注：与ViewFlipper类相似，但该类不常用，常用其两个子类ImageSwitcher：转换图片时增加动画效果; TextSwitcher： 转换文字时增加动画效果; 其实例见apidemos中ImageSwitcher实例和TextSwitcher实例）

内部类

interface ViewSwitcher.ViewFactory

在一个ViewSwitcher里创建视图

构造函数

public ViewSwitcher (Context context)

构造一个新的空的视图转换器(ViewSwitcher)。

参数

context 应用环境（译者注：应用程序上下文）

public ViewSwitcher (Context context, AttributeSet attrs)

构造一个指定上下文、属性集合的空的视图转换器(ViewSwitcher)。

参数

context 应用环境（译者注：应用程序上下文）

attrs 属性集合

公共方法

public void addView(View child, int index, ViewGroup.LayoutParams params)

添加一个指定布局参数的子视图

参数

child 添加的子视图

index 添加的子视图的索引

params 子视图的布局参数

异常

IllegalStateException 如果切换器中已经包含了两个视图时。

public View getNextView ()

返回下一个要显示的视图

返回

视图切换之后将要显示出的下一个视图

public void reset ()

重置视图转换器(ViewSwitcher）来隐藏所有存在的视图，并使转换器达到一次动画都还没有播放的状态。

public void setFactory (ViewSwitcher.ViewFactory factory)

设置用来生成将在视图转换器中切换的两个视图的工厂。也可以调用两次 addView(android.view.View, int, android.view.ViewGroup.LayoutParams)来替代使用工厂的方法。

参数

factory 用来生成转换器内容的视图工厂

补充

文章精选

android UI ViewSwitcher的使用（续二）

Android: Don’t Overlook ViewSwitcher

Using a ViewSwitcher in your Android xml layouts


ViewSwitcher.ViewFactory

译者署名： ivanlee

版本：Android 2.3 r1

结构

继承关系

public static interface ViewSwitcher.ViewFactory

android.widget.ViewSwitcher.ViewFactory

类概述

在视图转换器(ViewSwitcher)中创建视图

(译者注：ImageSwitcher, TextSwitcher常实现此接口来生成视图)

公共方法

public abstract View makeView ()

创建一个用于添加到视图转换器(ViewSwitcher)中的新视图

返回值

a View 一个视图


ZoomButtonsController

译者署名：獨鍆躌踄

译者链接：http://www.cnblogs.com/mxgsa/

版本：Android 2.2 r1

结构

继承关系

public class ZoomButtonsController extends View implements View.OnTouchListener

java.lang.Object

android.widget.ZoomButtonsController

类概述

ZoomButtonsController处理缩放控件的显示和隐藏并且定位其在相关父视图的位置。他也可以做为缩放控件的容器，允许在缩放控制窗口里面显示一些附加的按钮。

通常情况下，客户端在按下或者移动显示容器需要调用setVisible(ture)方法(不需要调用setVisible(false)，来隐藏空间，因为当时间超时，它会自动隐藏)，同时，当拥有者不能再进一步缩放的时候，客户端应该调setZoomInEnabled(boolean) 和 setZoomOutEnabled(boolean)

来及时更新。

如果你需要和自定义视图搭配使用，请在 onDetachedFromWindow()方法中调用setVisible(false)。

构造函数

public ZoomButtonsController (View ownerView)

ZoomButtonsController的构造函数

参数

ownerView 被缩放控件进行缩放的可视控件， 缩放控件显示将和可视控件保持一致

公共方法

public ViewGroup getContainer ()

获取缩放控件的父容器。

客户端可以增加其他的可视控件，和缩放控件一起放到这个容器中

返回

缩放控件的容器，它的布局将和它子控件的布局保持一致

public View getZoomControls ()

获取缩放控件的视图

返回

缩放控件视图

public boolean isAutoDismissed ()

获取缩放控件是否显示后自动关闭

返回

缩放控件是否显示后自动关闭

public boolean isVisible ()

缩放控件是否对用户可视

返回

true 或者false

public void setAutoDismissed (boolean autoDismiss)

设置缩放控件是否显示后自动关闭

参数

AutoDismiss true或者false

public void setFocusable (boolean focusable)

设置缩放控件是否获取焦点，如果控件获取焦点，就是可以使用轨迹球和方向键进行操作，否则，只能触摸进行操作

参数

focusable True和false

public void setOnZoomListener (ZoomButtonsController.OnZoomListener listener)

设置ZoomButtonsController.OnZoomListener侦听接收回调进行缩放

参数

listener 介绍是否缩放的侦听器

public void setVisible (boolean visible)

设置缩放控件是否对用户可视

参数

visible 缩放控件是否对用户可视（true或者false）

public void setZoomInEnabled (boolean enabled)

是否允许空间放大

参数

enabled 是否允许空间放大（true或者false）

public void setZoomOutEnabled (boolean enabled)

是否允许控件缩小

参数

enabled 是否允许控件缩小（true或者false）

public void setZoomSpeed (long speed)

设置用户操作缩放按钮到缩放回调的延迟时间

参数

speed 以毫秒为单位的缩放回调的间隔时间

补充

文章精选

Android Google map使用心得

googlemap加载多个overlay内存溢出

示例代码


ZoomButtonsController.OnZoomListener

译者署名：獨鍆躌踄

译者链接：http://www.cnblogs.com/mxgsa/

版本：Android 2.2 r1

结构

继承关系

public static interface ZoomButtonsController.OnZoomListener

android.widget.ZoomButtonsController.OnZoomListener

概述

当用户执行了互动或者触发了一些行为的接口，例如缩放。

公共方法

public abstract void onVisibilityChanged (boolean visible)

当缩放控件的显示发生变化时调用

参数

visible 缩放控件是否可见

public abstract void onZoom (boolean zoomIn)

当该控件的拥有者需要被缩放时候调用

参数

zoomIn 缩放的方向：true是放大，false是缩小


ZoomButton

农民伯伯

版本：Android 2.2

public class ZoomButton extends ImageButton implements View.OnLongClickListener

java.lang.Object

android.view.View

android.widget.ImageView

android.widget.ImageButton

android.widget.ZoomButton

概述

缩放按钮，实际上是很普通的两个按钮，可以简单的理解为一个ImageButton加上一张缩放的图标。如下代码：

公共方法

public boolean dispatchUnhandledMove (View focused, int direction)

对于获得焦点的View，这个方法是捕获箭头事件最后的机会。这就是在获取焦点的View没有在内部处理、系统在要求的方向也不能找到一个新的View让其获得焦点时调用。

参数

focused 当前焦点View

direction焦点移动的方向。其中之一:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT和 FOCUS_RIGHT.

返回值

如果为true，将清除这个View未处理的事件。

（注：从源码中可看出ZoomButton覆盖了父类的该方法，在super之前调用了一下clearFocus，如下代码：

public boolean onKeyUp (int keyCode, KeyEvent event)

默认实现至KeyEvent.Callback.onKeyMultiple() ：当点击执行时KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER被释放。

参数

keyCode 按下按钮代表的键值，属于KeyEvent (注：KeyEvent的静态属性)。

event 该KeyEvent对象，定义按钮动作

返回值

如果您处理这一事件中，返回true。如果你想允许事件被下一个接收器处理，返回false。

public boolean onLongClick (View v)

当一个View被长按时调用。

参数

v 被长按的View。

返回值

如果返回true，这个回调在长按时被执行了，反之返回false.

public boolean onTouchEvent (MotionEvent event)

实现这个方法处理触摸屏移动事件。

参数

event 该移动事件.

返回值

如果是true，该事件是触摸，反之返回false。

public void setEnabled (boolean enabled)

设置这个View启用状态。

参数

enabled 设置true表示启用，反之表示禁用。

public void setZoomSpeed (long speed)

（注：单独使用无实际意义，可以用来存放临时数据）


ZoomControls

译者署名：jiahuibin

联系译者：huibin.jia@gmail.com

2010-10-22

版本：Android 2.2 r1

一、类结构

public class ZoomControls extends LinearLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.LinearLayout

android.widget.ZoomControls

二、概述

ZoomControl显示一个简单的设置来控制缩放并回调已注册的事件。

三、公共方法

public boolean hasFocus ()

如果这个视图获得了焦点就返回真。

返回值

如果这个视图获得了焦点就返回真。

public void hide ()

这个方法可以将zoomControl视图隐藏起来，不显示。

public boolean onTouchEvent (MotionEvent event)

这个方法处理触摸屏移动事件。

参数

event该移动事件.

返回值

如果是true，该事件是触摸，反之返回false。

public void setIsZoomInEnabled (boolean isEnabled)

这个方法可以设置放大按钮是否可用。

参数

isEnabled 如果是true，放大按钮可用，反之不可用（按钮变成灰色）。

public void setIsZoomOutEnabled (boolean isEnabled)

这个方法可以设置缩小按钮是否可用。

参数

isEnabled 如果是true缩小按钮可用，反之不可用（按钮变成灰色）。

public void setOnZoomInClickListener (View.OnClickListener listener)

注册放大监听器

参数

Listener 点击放大按钮事件触发的事件。（译者注：为OnClickListener的实例，可以复写onClick方法，里面为具体的响应动作。我感觉这个方法还有下面的方法是本类的重点，我们可以在里面实现相应的动作，来响应我们的事件。）

public void setOnZoomOutClickListener (View.OnClickListener listener)

注册缩小监听器

参数

Listener点击缩小按钮事件触发的事件。（译者注：为OnClickListener的实例，可以复写onClick方法，里面为具体的响应动作。）

public void setZoomSpeed (long speed)

设置缩放速度。

参数

Speed 缩放速度

public void show ()

这个方法和hide方法对应，用来显示ZoomControl。

四、代码

声明：这个代码部分思路来源于网络上一个博客，谨以此来解释，特此声明。

package com.jhb.zoomcontroltest;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Toast;

import android.widget.ZoomControls;

public class ZoomCotroltest extends Activity {

        @Override

        protected void onCreate(Bundle savedInstanceState) {

                // TODO Auto-generated method stub

                super.onCreate(savedInstanceState);

                this.setContentView(R.layout.main);

                setTitle("ZoomControls");

                ZoomControls zoomControls = (ZoomControls) this.findViewById(R.id.zoomControls);

                zoomControls.hide();

                zoomControls.show();

                // setOnZoomInClickListener() - 响应单击放大按钮的事件

                zoomControls.setIsZoomInEnabled(true);

                zoomControls.setIsZoomOutEnabled(true);

                zoomControls.setOnZoomInClickListener(new OnClickListener() {

                        public void onClick(View v) {

                                Toast.makeText(ZoomCotroltest.this, "单击了放大按钮", Toast.LENGTH_SHORT).show();

                        }

                });

                // setOnZoomOutClickListener() - 响应单击缩小按钮的事件

                zoomControls.setOnZoomOutClickListener(new OnClickListener() {

                        public void onClick(View v) {

                                Toast.makeText(ZoomCotroltest.this, "单击了缩小按钮", Toast.LENGTH_SHORT).show();

                        }

                });

        }

}

它对应的布局文件是下面这样的：

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

<!--

放大/缩小按钮控件

-->

<ZoomControls android:id="@+id/zoomControls"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

</ZoomControls>

</LinearLayout>


dalvik.system

类

DexFile


DexFile

译者署名：阿年

译者链接：http://blog.csdn.net/mtding

版本：Android 4.0 r1

结构

继承关系

public final class DexFile extends Object

java.lang.Object

dalvik.system.DexFile

类概述

操作DEX文件。这个类原理上和ZipFile相似。主要在类装载器里被使用。

注意，我们不直接打开和读取DEX文件。它们被虚拟机以只读方式映射到内存了。

构造函数

public DexFile (File file)

通过指定的File对象打开DEX文件。指定的文件通常是一个ZIP/JAR文件，里面包含一个”classes.dex”。虚拟机将在目录/data/dalvik-cache下生成对应的文件名字并打开它，如果系统权限允许的话会首先创建或更新它。不要传目录/data/dalvik-cache下的文件名给它，因为这个文件被认为处于初始状态（DEX被优化之前）。

参数

File 引用实际DEX文件的File对象

异常

IOException 发生I/O异常，例如文件不存在或者没有权限访问。

public DexFile (String fileName)

打开指定文件名的DEX文件。指定的文件通常是一个ZIP/JAR文件，里面包含一个”classes.dex”。虚拟机将在目录/data/dalvik-cache下生成对应的文件名字并打开它，如果系统权限允许的话会首先创建或更新它。不要传目录/data/dalvik-cache下的文件名给它，因为这个文件被认为处于初始状态（DEX被优化之前）。

参数

fileName DEX文件名。

异常

IOException 发生I/O异常，例如文件不存在或者没有权限访问。

公共方法

public void close ()

关闭DEX文件。

有可能无法释放任何资源。如果来自DEX文件的类还存活着的话，DEX文件不能被取消映射。

异常

IOException 在关闭文件的过程中可能发生I/O异常，一般不会发生。

public Enumeration<String> entries ()

枚举DEX文件里面的类名。

返回值

DEX文件所包含类名的枚举，类名的类型是一般内部格式（像java/lang/String）。

public String getName ()

获取（已打开）DEX文件名。

返回值

文件名

public static boolean isDexOptNeeded (String fileName)

如果虚拟机认为apk/jar文件已经过期返回true，并且应该再次通过”dexopt”传递。（译者注：dexopt是apk优化工具）

参数

fileName 被检查apk/jar文件的绝对路径名。

返回值

如果应该调用dexopt处理文件返回true；否则false。

异常

FileNotFoundException 文件不可读、不是一个文件或者文件不存在。

IOException fileName不是有效的apk/jar文件，或者在解析文件时出现问题。

NullPointerException fileName是空的。

StaleDexCacheError 优化过的DEX文件已过期且位于只读分区。

public Class loadClass (String name, ClassLoader loader)

装载一个类。返回成功装载的类，失败返回空。

如果在类装载器之外调用它，往往不会得到你想要的结果，这时请使用forName(String)。

该方法不会在找不到类的时候抛出ClassNotFoundException异常，因为每次在我们看到的第一个DEX文件里找不到类就粗暴地抛出异常是不合理的。

参数

name 类名，应该是一个"java/lang/String"

loader 试图装载类的类装载器（大多数情况下就是该方法的调用者）

返回值

类名对应的对象，装载失败时返回空。

public static DexFile loadDex (String sourcePathName, String outputPathName, int flags)

打开一个DEX文件，并提供一个文件来保存优化过的DEX数据。如果优化过的格式已存在并且是最新的，就直接使用它。如果不是，虚拟机将试图重新创建一个。该方法主要用于应用希望在通常的应用安装机制之外下载和执行DEX文件。不能在应用里直接调用该方法，而应该通过一个类装载器例如dalvik.system.DexClassLoader.

参数

sourcePathName 包含”classes.dex”的Jar或者APK文件。(将来可能会扩展支持"raw DEX"。)

outputPathName 保存优化过的DEX数据的文件。

flags 打开可选功能（目前什么也没定义）

返回值

一个新的，或者先前已经打开的DexFile。

异常

IOException 无法打开输入或输出文件。

受保护方法

protected void finalize ()

类结束时调用。确保DEX文件被关闭。

异常

IOException 关闭文件时发生I/O异常，一般不会发生。

补充

文章精选

Dalvik 分析 - Class加载篇

启用另一个程序某些方法

Android类动态加载技术