[译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
原文链接:Hello, Android Multiscreen_DeepDive.
译文链接:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解.
本部分介绍利用Xamarin.Android处理导航
Hello,Android Multiscreen Deep Dive
在Hello,Android Multiscreen Quickstart中,我们建立并运行了我们第一个多屏Xamarin.Android应用。接下来我们将深入理解Android导航和架构,以便于我们创建出更加复杂的应用。
在本指南中,我们将探讨更多的Android架构,因此,我们会介绍Android应用程序块,深入Android导航(关于Intents内容),以及探讨Android硬件导航选项。我们将会解析Phoneword应用中新添加的功能,以便于我们可以更全面的理解我们的应用程序和操作系统,以及其他应用程序之间的关系。
Android架构基础
在Hello,Android Deep Dive(原文、译文)中,我们知道了Android应用是独特的程序,因为它没有单一的入口。取而代之的是,操作系统(或另一个应用程序)通过启动应用中已注册的Activity之一来启动应用进程。
在本次Android架构介绍中,我们会进一步拓宽关于Android应用是如何构建的相关知识面,其中包含:Android应用程序构建块以及相关的功能。
Android应用程序块
Android应用由以下几个部分捆绑组成:一组叫应用程序块的特殊的Android类集合,许多app资源(如图片,主题,辅助类等等)和协调上述内容的XML文件——Android Manifest。
应用程序块形成了Android应用的骨架,因为它允许我们进行一些在普通的类中所无法完成的事。其中最重要的两个部分是Activity和Service:
- Activity —— 一个Activity对应一个UI界面,其在概念上类似于web应用中的一个web页面。例如,在一个新闻订阅应用中,登录界面会是第一个Activity,新闻项列表会是另一个Activity,而新闻项的详细页面会是第三个Activity。关于更多Activity的内容见:Activity Lifecyle。
- Service —— Android服务支持Activity接收长时间运行的任务并在后台运行。Service不需要用户界面,且并不在界面显示任务处理 —— 例如,播放音乐或上传照片到服务端。关于更多Service信息,见:原文:Creating Services 和 原文:Android Services。
一个Android应用可能不会使用所有类型的块,且通常情况下,一个类型含有多个块。例如,我们在Hello,Android Quickstart中完成的Phoneword应用只有一个Activity(屏幕)和一些资源文件。一个简单的音乐播放app可能含有几个Activity以及一个后台音乐播放的Service。
Intents
另一个Android应用的基础概念是Intent。Android是以最小特权原则进行设计的 —— 应用只允许访问它们工作所需要的块,对于组成操作系统或其他应用的块是限制访问的。同样,块是松耦合的 —— 对于其他的块,当前块指南知道很少的信息,且限制访问,甚至是同一个应用中的各个部分的块。
为了通信,应用程序块通过调用Intent发送异步消息来进行交互。Intent包含一些接收块的信息,有时还会有一些数据。Intent通过一个应用的组件触发器发送一些信息使另一个应用组件工作,以此绑定两个应用组件并允许他们进行通信。通过Intent来回发送,我们可以利用块处理一些复杂的操作,如启动相机应用进行采集保存,获取位置信息,或者从一个屏幕导航到另一个屏幕。
AndroidManifest.XML文件
当我们向应用中添加块时,它通过一个特殊的XML文件(Android Manifest)来注册。Manifest在应用程序中保持跟踪所有应用程序块,以及版本要求,权限和链接库 —— 所有操作系统需要知道的应用运行要求。Android Manifest同时还和Activity与Intent一起使用,以此控制给定Activity进行适当的操作。关于更多Android Manifest的高级功能见:原文:Working with the Android Manifest。
在单屏幕版本的Phoneword应用中,我们仅仅含有一个Activity,一个Intent和AndroidManifest.xml文件,以及额外的资源文件(如icon)。在多屏幕版本的Phoneword应用中,我们添加了一个额外的Activity —— 需要我们在第一个Activity中使用Intent来启动。在下一节,我们会探讨Intent如何在Android应用中帮助我们进行导航操作。
Android导航
我们在Phoneword应用中使用了两次Intent —— 一次是屏幕跳转,另一次是拨打电话。下面我们将深入代码来理解Intent如何工作,以及它们在Android导航中的角色。
利用Intent启动第二个Activity
在Phoneword应用中,我们使用Intent启动了第二个屏幕(Activity)。我们首先创建了一个Intent,并传入参数:当前上下文(this——指向当前上下文)和我们希望的应用程序块的类型(CallHistoryActivity):
Intent intent = new Intent(this, typeof(CallHistoryActivity));
上下文是一个关于应用环境的整体信息接口 —— 它让新建对象知道应用发生了什么。如果我们把Intent想象为一条消息,我们需要提供信息接受者的姓名(CallHistoryActivity)和信息接受者的地址(上下文-Context)。
Android为我们提供了一个为Intent附加简单数据的选项(辅助数据处理会困难很多)。在Phoneword示例中,我们使用PutStringArrayExtra
来给Intent附加了一个电话号码列表,然后调用StartActivity
来处理Intent。完整代码如下:
callHistoryButton.Click += (sender, e) =>
{
var intent = new Intent(this, typeof(CallHistoryActivity));
intent.PutStringArrayListExtra("phone_numbers", _phoneNumbers);
StartActivity(intent);
};
利用Intent启动另一个应用
在上面示例中,我们利用Intent启动了同一应用中的第二个Activity,但是Android让它启动另一个的应用的Activity也一样容易。事实上,我们在Phoneword应用中,已经处理过这种情况。当我们点击Call按钮,我们使用了如下代码:
Intent callIntent = new Intent(Intent.ActionCall);
callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber));
StartActivity(callIntent);
当我们创建Intent,我们传入了Intent.ActionCall
参数,它是一个特殊的Intent类型 —— 用于启动Android电话应用,以及传递一个电话号码到拨号界面。然后我们使用SetData
来为Intent附加了一个电话号码。当我们调用StartActivity
并传入callIntent时,我们就调出了系统电话应用的拨号界面。这里将系统电话应用加载到内存中,因此启动系统的电话应用。
Phoneword中遇到的额外概念介绍
Phoneword应用中包含了几个没有在此指南中介绍的概念。其中主要有如下内容:
String Resources —— 在我们的Phoneword应用中,我们将
CallHistoryButton
的text值设为了@string/callHistory
。其中@string
语法表示,这个字符串值存储在 String资源文件 中(String.xml)。我们在String.xml文件中对callHistory
字符串进行了如下定义:Call History
关于更字符串资源和其他Android资源的信息,见:原文:Android Resources。
ListView and ArrayAdapter —— ListView是一个UI组件 —— 用于提供显示滚动列表的简便方法。ListView需要一个为行视图添加数据的Adapter。我们在CallHistoryController中使用如下代码来向界面填入数据:
this.ListAdapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, phoneNumbers);
ListView和Adapter超出了本文范围,关于其更多内容可见指南: 原文:ListViews and Adapters。其中第二部分特别介绍了使用内置ListActivity和ArrayAdapter类来创建和填充ListView,这无需自定义布局,就像我们在Phoneword示例中一样处理。第二部分链接:原文:Part 2 of ListViews and Adapters guide。
总结
至此,你已经完成了第一个多屏幕Android应用的学习。在本指南中,我们介绍了Android应用程序构建块和Intent,并利用它们构建一个多屏幕Android应用。后面课程请自行选择。
译:奇葩史
[译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解的更多相关文章
- [译]:Xamarin.Android开发入门——Hello,Android深入理解
返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...
- [译]:Xamarin.Android开发入门——Hello,Android快速上手
返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手
原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...
- 教我徒弟Android开发入门(一)
前言: 这个系列的教程是为我徒弟准备的,也适合还不懂java但是想学android开发的小白们~ 本系列是在Android Studio的环境下运行,默认大家的开发环境都是配置好了的 没有配置好的同学 ...
- Android开发入门经典【申明:来源于网络】
Android开发入门经典[申明:来源于网络] 地址:http://wenku.baidu.com/view/6e7634050740be1e650e9a7b.html?re=view
- Android开发入门要点记录:四大组件
cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...
- Android开发入门
教我徒弟Android开发入门(一) 教我徒弟Android开发入门(二) 教我徒弟Android开发入门(三) 出处:http://www.cnblogs.com/kexing/tag/Androi ...
- Android开发周报:Android L默认加密用户数据
Android开发周报:Android L默认加密用户数据 新闻 <iCloud前车之鉴,Android L默认开启加密功能>:iCloud 艳照风波再起,第二波女星照片流出,大量女星的裸 ...
- Android开发艺术探索第五章——理解RemoteViews
Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...
随机推荐
- 第一章 Shiro简介——《跟我学Shiro》(转)
目录贴:跟我学Shiro目录贴 1.1 简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可 ...
- 第三章 --- 关于Javascript 设计模式 之 代理模式
第一.定义: 代理模式是为一个对象提供代用品或者占位符,以便控制对它的访问. 比如说,某男生小明想向他的女神 A 表白,刚好小明认识的一个女生B 和 女神A 是好朋友,那么小明就想让 女生B 帮忙送花 ...
- 网络第三节——NSURLSession
有的程序员老了,还没听过NSURLSession有的程序员还嫩,没用过NSURLConnection有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSURLS ...
- 08-linux 其他知识
linux其他知识点 1-防火墙- iptables原理 2- 本部分属于一步一步学习大数据系列之 Linux 的章节,欢迎订阅更多文章 更多内容请参考:一步一步学习大数据系列介绍
- Mysql字符转义
在字符串中,某些序列具有特殊含义.这些序列均用反斜线('\')开始,即所谓的转义字符.MySQL识别下面的转义序列: \0 ASCII 0(NUL)字符. \' 单引号('''). \" 双 ...
- Android如何一进入一个activity就唤醒键盘
方法总结: 在AndroidManife.xml中对应的的Activity配置中加入以下配置项: android:windowSoftInputMode="stateVisible|adju ...
- Spring+Mybatis基于注解整合Redis
基于这段时间折腾redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题. 首先准备Redis,我下的是Windows版,下载 ...
- 前端工具HBuilder安装Sass插件
HBuilder自带未安装的less插件,但是sass插件却没有,需要自己安装,步骤如下: 1.安装sass,参考: http://www.w3cplus.com/sassguide/install. ...
- 用遗传算法GA改进CloudSim自带的资源调度策略
首先理解云计算里,资源调度的含义: 看了很多云计算资源调度和任务调度方面的论文,发现很多情况下这两者的意义是相同的,不知道这两者是同一件事的不同表述还是我没分清吧,任务调度或者资源调度大概就是讲这样一 ...
- Redis 3.0 Cluster集群配置
Redis 3.0 Cluster集群配置 安装环境依赖 安装gcc:yum install gcc 安装zlib:yum install zib 安装ruby:yum install ruby 安装 ...