原文链接: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深入理解的更多相关文章

  1. [译]:Xamarin.Android开发入门——Hello,Android深入理解

    返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...

  2. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  3. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手

    原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...

  4. 教我徒弟Android开发入门(一)

    前言: 这个系列的教程是为我徒弟准备的,也适合还不懂java但是想学android开发的小白们~ 本系列是在Android Studio的环境下运行,默认大家的开发环境都是配置好了的 没有配置好的同学 ...

  5. Android开发入门经典【申明:来源于网络】

    Android开发入门经典[申明:来源于网络] 地址:http://wenku.baidu.com/view/6e7634050740be1e650e9a7b.html?re=view

  6. Android开发入门要点记录:四大组件

    cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...

  7. Android开发入门

    教我徒弟Android开发入门(一) 教我徒弟Android开发入门(二) 教我徒弟Android开发入门(三) 出处:http://www.cnblogs.com/kexing/tag/Androi ...

  8. Android开发周报:Android L默认加密用户数据

    Android开发周报:Android L默认加密用户数据 新闻 <iCloud前车之鉴,Android L默认开启加密功能>:iCloud 艳照风波再起,第二波女星照片流出,大量女星的裸 ...

  9. Android开发艺术探索第五章——理解RemoteViews

    Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...

随机推荐

  1. ubuntu安装/卸载mysql

    1.安装mysql root@openstack001:/tmp# apt-get install mysql-server Reading package lists... Done Buildin ...

  2. ubuntu竖屏显示

    xrandr -o left 向左旋转90度 xrandr -o right 向右旋转90度 xrandr -o inverted 上下翻转 xrandr -o normal 回到正常角

  3. 很方便的后台ajax上传文件

    <a href="javascript:void(0);" url="{:U('teacherd?id='.$vo['id'])}" class=&quo ...

  4. 学习CodeIgniter框架之旅(一)自定义模板目录

    在常用的框架本身都已经做好了分层和目录结构,但这在很多时候不满足项目的需求甚至在某些情况下变得不合理,因此很多时候需要自定义目录结构,在此就看看如果在CodeIgniter框架中自定义模板目录: 在C ...

  5. 01 HDFS 简介

    01.HDFS简介 大纲: hadoop2 介绍 HDFS概述 HDFS读写流程 hadoop2介绍 框架的核心设计是HDFS(存储),mapReduce(分布式计算),YARN(资源管理),为海量的 ...

  6. oracle DDL(数据定义语言)基本语句

    --创建表格 create table  production( ProductIdvarchar2(10), ProductNamevarchar2(20), ProductPricenumber( ...

  7. win10 Vmware12装mac os X10.11虚拟机教程

    1.下载安装VMware 12,具体教程在网上都能看见. 2.下载mac os的镜像,最好下载cdr格式的. 3.在导入虚拟机的时候,到选择客户机操作系统的时候,没有网上出现的Mac os,如下图所示 ...

  8. a标签产生间隙,<a> 包裹 <img> 产生 4px 间隙

    图片文字等inline元素默认是和父级元素的baseline对齐的,而baseline又和父级底边有一定距离(这个距离和 font-size,font-family 相关),所以设置 vertical ...

  9. python之路二十一

    URL        - 两个    Views        - 请求的其他信息        from django.core.handlers.wsgi import WSGIRequest   ...

  10. 连载 [ LTS + Top ]

    +---[ LTS List ]--->| 1. 每日被自己坑的debugging.. http://www.cnblogs.com/tmzbot/p/5582302.html| 2. [待添加 ...