2010年4月13日
     摘要: http://blog.csdn.net/iefreer/archive/2009/09/10/4537371.aspx 安全和许可Security and Permissions Android是一个多进程系统,每个应用程序(以及系统的部分)运行在它自己的进程里。大多数程序和系统之间的安全性通过基础的Linux机制在进程级别进行支持,如分配给应用程序的用户和群组IDs。更多细化的安全特性通过...  阅读全文
posted @ 2010-04-13 23:13 seedshopezhong 阅读(847) | 评论 (0)编辑 收藏
  2010年4月12日
     摘要: 内容提供器Content Providers内容提供器用来存放和获取数据并使这些数据可以被所有的应用程序访问。它们是应用程序之间共享数据的唯一方法;不存在所有Android软件包都能访问的公共储存区域。Android为常见数据类型(音频,视频,图像,个人联系人信息,等等)装载了很多内容提供器。你可以看到在android.provider包里列举了一些。你还能查询这些提供器包含了什么数据(尽管,对某...  阅读全文
posted @ 2010-04-12 23:55 seedshopezhong 阅读(877) | 评论 (0)编辑 收藏
     摘要: 数据存储Data Storage概览Storage quickview²  系统偏好:快速,轻量级存储²  文件:存储到设备内部或可移动闪存²  数据库:任意的结构化存储²  支持基于网络的存储一个典型的桌面操作系统提供了一个通用文件系统使得任何应用程序能够使用它来存储文件,这些...  阅读全文
posted @ 2010-04-12 23:53 seedshopezhong 阅读(353) | 评论 (0)编辑 收藏
     摘要: 转自:http://blog.csdn.net/iefreer/archive/2009/08/17/4456376.aspx意图和意图过滤器Intents and Intent Filters 一个应用程序的三个核心组件-活动,服务和广播接收器是通过消息即意图(Intents)来激活的。Intent消息传送是相同或不同应用中组件运行时晚绑定的一种机制。意图本身,一个意图对象,是一个包含...  阅读全文
posted @ 2010-04-12 23:34 seedshopezhong 阅读(419) | 评论 (0)编辑 收藏
  2010年4月11日
     摘要: 转载于:http://blog.csdn.net/iefreer/archive/2009/09/06/4526004.aspxAndroid开发指南-框架主题-资源和资产资源和资产Resources and Assets资源是Android应用程序不可或缺的部分。一般而言,资源是你想包含和引入到应用程序里面的一些外部元素,比如图片、音频、视频、文本字符串、布局、主题等。每个Android应用程序...  阅读全文
posted @ 2010-04-11 22:28 seedshopezhong 阅读(836) | 评论 (0)编辑 收藏
转自:http://blog.csdn.net/iefreer/archive/2009/09/27/4602532.aspx

Android怎么绘画视图How Android Draws Views

当一个活动接收到焦点时,它将被要求绘制它的布局。Android框架将处理这个绘画的过程,但是活动必须提供它的布局层次的根节点。

绘画从布局的根节点开始。它被要求来测量和绘制布局树。绘画通过遍历布局树并渲染每个和失效区域相交的视图来处理。相应的,每个视图组负责请求绘制它的子视图(通过draw() 方法)而每个视图负责画它自己。因为这个树是顺序遍历的,这意味着先画父节点(也就是在屏幕后面),然后按照树中出现的顺序画其同层次节点。

框架将不会画不在失效区域的视图,而且还将会帮你画视图背景。

你可以强制一个视图被重画,通过调用invalidate()

绘画布局共有两步:一个度量过程和一个布局过程。度量过程在measure(int, int)里实现且是一个自顶向下的视图树遍历。每个视图在递归时往下推送尺寸规格。在度量过程的最后,每个视图都已经保存了自己的度量。第二个过程发生在layout(int, int, int, int) 中并且也是自顶向下。在这个过程中,每个父节点负责定位它的所有子节点,通过使用在度量过程中计算得到的尺寸。

当一个视图的measure()方法返回时,它的getMeasuredWidth()getMeasuredHeight() 值必须被设置,以及所有这个视图子节点的值。一个视图的度量的宽度和高度值必须符合父视图引入的限制。这确保在度量过程之后,所有父节点接受所有它们的子节点的度量值。一个父视图可能会在其子视图上多次调用measure()方法。比如,父视图可能会通过未指定的尺寸调用measure来发现它们的大小,然后使用实际数值再次调用measure(),如果所有子视图未做限制的尺寸总合过大或过小(也即是,如果子视图之间不能对各自占据的空间达成共识的话,父视图将会干预并设置第二个过程的规则)。

要开始一个布局,可调用requestLayout()。这个方法通常在视图认为它自己不再适合它当前的边界的情况下被调用。

度量过程使用两个类来交流尺寸。View.MeasureSpec类被视图用来告诉它们的父视图它们想如何被度量和定位。基础的LayoutParams类仅仅描述了视图想有多大(高和宽)。对于每个维度,它可以指定下面之一:

·         一个准确的数值

·         FILL_PARENT这意味着视图想和父视图一样大(减掉填充padding)。

·         WRAP_CONTENT这意味着视图只想有刚好包装其内容那么大(加上填充)

对于不同的ViewGroup子类,有相应的LayoutParams子类。比如,相对布局RelativeLayout有它自己的LayoutParams子类,这包含了能够让子视图横向和竖向居中显示的能力。

度量规格(MeasureSpecs)被用来沿着树从父到子的下传度量需求。一个MeasureSpecs可以是下面三种模式之一:

·         UNSPECIFIED: 这被父视图用来决定其子视图期望的尺寸。比如,一个线性布局可能在它的子视图上调用measure() on its child,通过设置其高度为UNSPECIFIED 以及一个宽度为EXACTLY 240,来找出这个子视图在给定240像素宽度的情况下需要显示多高。

·         EXACTLY: 这被父视图用来给子视图强加一个准确的尺寸。子视图必须使用这个大小,并确保其所有的后代将适合这个尺寸。

·         AT_MOST: 这被父视图用来给子视图强加一个最大尺寸。子视图必须确保它自己以及所有的后代都适合这个尺寸。

posted @ 2010-04-11 21:55 seedshopezhong 阅读(314) | 评论 (0)编辑 收藏
     摘要: 转自:http://blog.csdn.net/iefreer/archive/2009/09/28/4606633.aspx通用布局对象Common Layout Objects本章描述了可用于你的应用程序的一些更为通用的布局对象类型。像所有的布局一样,它们是ViewGroup.的子类。也可以参见Hello Views 教程,有更多关于使用Android视图布局的指南。框架布局Fram...  阅读全文
posted @ 2010-04-11 21:53 seedshopezhong 阅读(1178) | 评论 (0)编辑 收藏
转自:http://blog.csdn.net/iefreer/archive/2009/09/27/4601808.aspx

AdapterView绑定数据Binding to Data with AdapterView

AdapterViewViewGroup的子类,其子视图由绑定某类型数据的适配器Adapter决定。AdapterView用于当你需要在布局中显示存储数据时(不是字符串或可绘制资源)。

画廊Gallery,列表视图ListView,和微调控件Spinner就是适配器视图AdapterView子类的例子,用来绑定到特定类型的数据并以一定的方式显示。

AdapterView对象有两个主要责任:

·         用数据填充布局

·         处理用户的选择

用数据填充布局Filling the Layout with Data

通常是通过绑定AdapterView类到一个适配器Adapter插入数据到布局中,这从外部获取数据(可能是代码中所提供的一个列表数据,或者是设备数据库中的查询结果)。

下面的代码示例执行以下操作:

1.     用现有的一个视图创建一个微调控件Spinner并将其绑定到一个新的ArrayAdapter,该适配器从本地资源中读取颜色数组。

2.     从一个视图创建另外的微调对象,并将其绑定到一个新的SimpleCursorAdapter,将从设备联系人中读取人名(见Contacts.People)。

// Get a Spinner and bind it to an ArrayAdapter that 
// references a String array.
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource(
    this, R.array.colors, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(adapter);
 
// Load a Spinner and bind it to a data query.
private static String[] PROJECTION = new String[] {
        People._ID, People.NAME
    };
 
Spinner s2 = (Spinner) findViewById(R.id.spinner2);
Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null);
     
SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,
    android.R.layout.simple_spinner_item, // Use a template
                                          // that displays a
                                          // text view
    cur, // Give the cursor to the list adatper
    new String[] {People.NAME}, // Map the NAME column in the
                                         // people database to...
    new int[] {android.R.id.text1}); // The "text1" view defined in
                                     // the XML template
                                       
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s2.setAdapter(adapter2);

注意Projection中的People._ID列是必须的,否则你将收到一个异常。

如果,在你的应用程序生命周期过程中,你改变了适配器所读取的下层数据,你应该调用notifyDataSetChanged()方法。这将通知附着视图数据已经更改,它需要刷新自己。

处理用户的选择Handling User Selections

你通过设置类的AdapterView.OnItemClickListener成员变量为一个侦听器来处理用户的选择并且捕获选择变化。

// Create a message handling object as an anonymous class.
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id)
    {
        // Display a messagebox.
        Toast.makeText(mContext,"You've got an event",Toast.LENGTH_SHORT).show();
    }
};
 
// Now hook into our object and set its onItemClickListener member
// to our class handler object.
mHistoryView = (ListView)findViewById(R.id.history);
mHistoryView.setOnItemClickListener(mMessageClickedHandler); 

 

想了解更多有关如何创建不同AdapterViews讨论,请阅读以下教程: Hello SpinnerHello ListViewHello GridView

posted @ 2010-04-11 21:51 seedshopezhong 阅读(449) | 评论 (0)编辑 收藏
     摘要: 转自:http://blog.csdn.net/iefreer/archive/2009/09/25/4595533.aspx应用风格和主题Applying Styles and Themes当设计应用程序时,你可以用风格和主题来统一格式化各种屏幕和UI元素。l   风格是一个包含一种或者多种格式化属性的集合,你可以将其作为一个单位用在布局XML单个元素当中。比如,你...  阅读全文
posted @ 2010-04-11 21:47 seedshopezhong 阅读(552) | 评论 (0)编辑 收藏

转载于:http://blog.csdn.net/iefreer/archive/2009/09/25/4594818.aspx

通知用户Notifying the User

某些情况下需要通知用户你的应用程序中发生了一个事件。一些事件请求用户应答而另外一些则不需要。比如:

·         当一个事件比如保存文件结束时,应该出现一条消息确认保存成功。

·         如果一个后台运行的应用程序需要用户关注,这个应用程序应该创建一个通知来允许用户在方便时进行应答。

·         如果这个应用程序在执行一个用户必须等待的任务(比如家在一个文件),那么应用程序应该显示一个盘旋的进度轮或进度条。

所有这些通知任务可以通过一个不同的技术获取到:

·         一个消息条通知Toast Notification用于从后台出现的简短信息。for brief messages that come from the background.

·         一个状态条通知Status Bar Notification用于来自后台的持续提醒并请求用户应答。

·         一个对话框通知Dialog Notification用于活动相关的通知。

这篇文档总结了用来通知用户的所有这些技术并包含相应的链接。

消息条通知Toast Notification

 

 

一个消息条通知是一个在窗口表面弹出的信息。它只填充内容所需的空间并且用户当前活动仍然保持可见和可交互。这个通知自动渐入渐出,而且不接受交互事件。因为消息条可以从一个后台服务Service中创建,即便应用程序不可见,它也将呈现出来。

一个消息条是用来显示简短文本信息的最好方法,比如文件已保存,当你很确信用户正在关注屏幕时。一个消息条不能接受用户交互事件;如果你希望用户应答并采取相应动作,请考虑使用一个状态条通知Status Bar Notification

更多信息,请参考创建消息条通知Creating Toast Notifications.

状态条通知Status Bar Notification

 

一个状态条通知添加一个图标到系统状态栏上(以及一个可选的滚动条文本信息)以及在这个通知窗口中的一个扩展消息。当用户选择这个扩展消息时,Android发出这个通知所定义的一个意图(通常是启动一个活动)。你也可以配置这个通知来通过一个声音,震动和设备上的闪烁灯来警告用户。

当你的应用程序以后台服务运行并需要通知用户事件时,这类通知是一个理想的方式。如果你需要在活动仍处于焦点下时警告用户一个发生的事件,请考虑使用对话框通知Dialog Notification 

更多信息,请参考创建状态条通知Creating Status Bar Notifications

对话框通知Dialog Notification

 

一个对话框通常是出现在当前活动前面的一个小窗口。背后的活动丢失焦点而由这个对话框接受所有的用户交互。对话框通常用做和运行中应用程序直接相关的通知和短暂活动。

你应该使用对话框来显示一个进度条或者一个需要用户确认的短消息(比如带有确认取消按钮的一个警告)。你也可以把对话框作为构成应用程序界面整体的组件以及用于除了通知之外的其它目的。要完整讨论所有可用对话框资源,包括用作通知,请参考创建对话框Creating Dialogs

posted @ 2010-04-11 21:43 seedshopezhong 阅读(423) | 评论 (0)编辑 收藏
仅列出标题  下一页