原文链接: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. MVC CheckBoxList的实现

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  2. leetcode 111 minimum depth of binary tree

    problem description: Given a binary tree, find its minimum depth. The minimum depth is the number of ...

  3. 浅谈Android样式开发之selector

    引言 上一篇Android UI中文章我们详细介绍了Android中shape标签的使用.通过shape标签我们可以定义矩形.椭圆.环形.直线等效果.不过shape只能定义单一的形状,在实际开发中,我 ...

  4. 美团HD(3)-加载分类导航数据

    DJHomeViewController.m /** 设置导航栏左侧内容 */ - (void)setupLeftNavItem { // Logo UIImageView *logoView = [ ...

  5. [译]C#编码约定

    原文:https://msdn.microsoft.com/en-us/library/ff926074.aspx 编码约定的目的是: 创建统一格式的代码,让读者的注意力更集中在内容上面,而不是结构 ...

  6. java文件上传

    jsp界面代码: <body>  <form action="servlet/UploadServlet" enctype="multipart/for ...

  7. SqlServer 常用函数

    case ..   when ..   then ..   else   ..  end

  8. Web 常用功能测试方法

    功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能.常用的测试方法如下: 1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确. 2. 相 ...

  9. android 选择图片或拍照时旋转了90度问题

    由于前面的博文中忽略了点内容,所以在这里补上,下面内容就是解决拍照或者选择图片显示的时候图片旋转了90度或者其他度数问题,以便照片可以正面显示:具体如下: 首先直接看上面博文下的拍完照或者选完图后处理 ...

  10. linux第二天

    由于今天公司事情比较多,今天基本没有自学.了解了一下type命令:主要是显示命令类型的命令.linux命令分为内置命令和外部命令两种.内置命令就shell内置的命令,外部命令,就是需要有系统存在一个名 ...