[译]: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 ...
随机推荐
- php二维数组相同id的数量相加
数组样式 $arr = array( array( , , , ), array( , , , ), array( , , , ), array( , , , ), ); 处理办法 $item=arr ...
- HMM基本原理及其实现(隐马尔科夫模型)
HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...
- mysql-proxy 读写分离
mysql-proxy 读写分离 主从复制 MySQL Replication可以将master的数据复制分布到多个slave上,然后利用slave来分担master的读压力. 读写分离 MySQL- ...
- 阿里云推送SDK在某些机型(某米为主)下崩溃问题的解决方法
引言 最近APP上线,遇到一个比较诡异的问题.最后竟然和dex文件有关,也是醉了,看来还得深入底层学习啊. 问题描述 在集成阿里推送SDK时,需要在Application中进行初始化,大多数Andro ...
- CenterOS 7 常用命令
1.防火墙开放端口 1.1 开启端口 # firewall-cmd --zone=public --add-port=80/tcp --permanent 1 ...
- 移动Web之响应式布局的探讨
响应式布局的探讨 响应式布局的两种方式 基于百分比的布局 例:Bootstrap 基于rem的布局 例:淘宝触屏版 这两种布局都需要依赖于CSS3的media query来设置布局断点(或者通过js监 ...
- Redis 缓存过期(maxmemory) 配置/算法 详解
LRU(Least Recently Used) 最近最少使用算法是众多置换算法中的一种. Redis中有一个 maxmemory 概念,主要是为了将使用的内存限定在一个固定的大小.Redis 用到的 ...
- Django配合使用Jquery post方法
Django使用jQuery的post方法需要解决两个问题: 1.Django中为了防止跨站请求,在post提交时都会带上csrf_token,利用Jquery进行post请求也需要:否则就会出现40 ...
- Ubuntu安装SSH服务器故障分析及解决办法(错误1:E:软件包 openssh-server 还没有可供安装的候选者,错误2:E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系)
• 微博: 小样儿老师2015 Windows下做Linux开发需要SSH强大功能的支持.安装SSH的过程会出现了很多问题,看完这篇文章可以让你少走些弯路,PS:折腾一下午的成果. Ubuntu ...
- Android6.0权限组申请
void checkPermission() { final List<String> permissionsList = new ArrayList<>(); if (Bui ...