降低学习成本是每个.NET传教士义务与责任。

建立生态,保护生态,见者有份。

我们在翻看一些java的源码经常会说我们要在AndroidManifest.xml 中添加一些东西。而我们使用xamarin里面实际上是通过C#的特性Attribute进行标记实现的

我们创建一个Xamarin Android 项目MainActivity会有一个默认的一个标记特性

   [Activity(Label = "App", MainLauncher = true)]
public class MainActivity : Activity

详细的内容来自于

https://developer.xamarin.com/guides/android/advanced_topics/working_with_androidmanifest.xml/

下面我们将详细的讲解如何在Xamarin Android中使用。

概述

AndroidManifest.xml 是Android平台中的一个功能强大的清单文件,它允许您描述应用程序对Android的功能和要求。然而,用好它并不容易。 Xamarin.Android通过添加自定义Attribute的到对应类中, 用于自动生成清单文件,以降低使用AndroidManifest.xml的难度。我们的目标是99%的用户不需要手动修改AndroidManifest.xml.

AndroidManifest.xml 作为生成构建中的一部分,自定义Attribute将和Properties/AndroidManifest.xml中的文件进行合并。(所以不用担心你在AndroidManifest.xml手工定义的会被覆盖掉)。由此合并生成xml文件可以在项目的obj目录中看到:比如, 存在于obj/Debug/android/AndroidManifest.xml 文件。XML文件合并的过程非常简单:

1、 通过扫描程序集中的特定标记并使用自定义Attribute去生成XML元素, 2、然后将这些元素都插入到AndroidManifest.xml中。

基础

在编译时,会对从Activity类派生的非抽象类进行扫描,并将[Activity]特性声明在它们上。然后它使用这些类和特性来构建清单。例如,参考以下代码:

namespace Demo
{
public class MyActivity : Activity
{
}
}

但是这样做在AndroidManifest.xml中没有生成任何东西。如果要生成<activity/>元素,则需要使用[Activity]自定义特性:

namespace Demo
{
[Activity]
public class MyActivity : Activity
{
}
}

这段代码将会生成下面的xml片段并插入到AndroidManifest.xml:

<activity android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />

[Activity]特性对抽象类型没有影响;抽象类型将被忽略。

Activity Name

从Xamarin.Android 5.1开始Activity的name属性默认值是基于被导出的类型的集合限定名的MD5SUM。这允许从两个不同的程序集提供相同的完全限定名,而不会得到打包错误。(Xamarin.Android 5.1以前,活动的默认类型名称是由小写的名称空间和类名创建的。)

如果您希望重写此缺省值并显式指定Activity的名称,请使用name属性:

[Activity (Name="awesome.demo.activity")]
public class MyActivity : Activity
{
}

这样的用处是方便第三方调用等等。如果没有这方面的需求可以不设置 使用缺省值即可。

以上代码生成了下面的xml片段

<activity android:name="awesome.demo.activity" />

注意:使用Name属性你应该仅用于为了向后兼容,因为这样的设定将会减慢运行时的类型查找。如果您有遗留代码,该代码期望基于底层名称空间和类名的活动的默认类型名称,请参见Android Callable包装器命名,以了解如何维护兼容性。

Activity Title Bar

默认情况下,在运行时,Android会给你的应用程序一个标题栏。这个值将用于/manifest/application/activity/@android:label中。在大多数情况下,这个值与类名不同。要在标题栏上指定应用程序的标签,请使用标签属性。例如:

[Activity (Label="Awesome Demo App")]
public class MyActivity : Activity
{
}

下面是生成的xml片段

<activity android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />

Launchable from Application Chooser

默认情况下,您的Activity不会出现在Android的应用程序启动屏幕上。这是因为在您的应用程序中可能会有很多Activity,要指定应该从应用程序启动程序中启动哪一个,可以使用MainLauncher属性。例如:

[Activity (Label="Awesome Demo App", MainLauncher=true)]
public class MyActivity : Activity
{
}

生成的xml片段

<activity android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Activity Icon

默认情况下,您的Activity将得到系统提供的默认启动图标。要使用自定义图标,首先添加您的.pngResources/drawable,设置文件的构建动作设置为AndroidResource,然后使用Icon属性指定要使用的图标。例如:

[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")]
public class MyActivity : Activity
{
}

生成的xml片段

<activity android:icon="@drawable/myicon" android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Permissions

当你添加权限Android清单(AndroidManifest中权限中描述)。这些权限被保存在Properties/AndroidManifest.xml。例如,如果您设置了网络许可元素 Properties/AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

调试模式会自动添加一些权限以简化调试(如:网络权限 读取扩展存储权限)—— 这些设置只会出现在 obj/Debug/android/AndroidManifest.xml 调试模式中并不会在配置权限界面出现即不会出现在下图红框中

如果你打开清单文件 obj/Debug/android/AndroidManifest.xml, 你可以看到下面的权限配置

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在Release构建中(obj/Debug/android/AndroidManifest.xml)上面的权限将不会自动配置。如果你发现切换到Release版本时候会丢失调试版可用的权限,请检查在您应用程序权限配置中是否已经显式的设置了这个权限。

具体的操作请查看上图(VS MAC  也类似)。

高级功能

Intent Actions and Features

AndroidManifest.xml 提供了一种描述Activity能力的方法。这是通过 Intents 和 [IntentFilter] 自定义属性实现的。您可以使用IntentFilter构造器中的Categories属性用于指定那些操作类型适合您的Activity。您至少需要提供一个actions (这也是为什么要在构造器中要求提供actions的原因)。[IntentFilter] 允许您在一个Activity中定义多次. 比如:

[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")]
[IntentFilter (new[]{Intent.ActionView},
Categories=new[]{Intent.CategorySampleCode, "my.custom.category"})]
public class MyActivity : Activity
{
}

下面是生成的xml片段

<activity android:icon="@drawable/myicon" android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.SAMPLE_CODE" />
<category android:name="my.custom.category" />
</intent-filter>
</activity>

Application Element

AndroidManifest.xml 还提供了一种方法,可以为整个应用程序声明属性。这是通过<application>元素及其对应的应用程序自定义特性来完成的。注意,这些都是整个应用程序范围(程序集范围)设置。 您的整个应用程序声明<application>全局的设置,然后在每个Activity的基础上重写这些设置(根据需要)。

例如,下面的应用程序属性被添加到 AssemblyInfo.cs表示应用程序可以被调试,它的用户可读名称是My App,并且它使用了Theme.Light风格作为所有Activity的默认主题:

[assembly: Application (Debuggable=true,
Label="My App",
Theme="@android:style/Theme.Light")]

这将在以下位置 obj/Debug/android/AndroidManifest.xml 生成下面的xml片段

<application android:label="My App"
android:debuggable="true"
android:theme="@android:style/Theme.Light"
... />

在这个例子中,所有App中的Activity都将默认使用Theme.Light主题。如果你设置了一个Activity的主题为Theme.Dialog 那么只有这个Activity会生效,其他的Activity依然是默认的Theme.Light主题。

设置[Application]特性并不是唯一的配置方式;同样的,你可以直接修改Properties/AndroidManifest.xml 中<applicaiton>节点,你的设置将会和其他的Attribute进行合并后保存在obj/Debug/android/AndroidManifest.xml中,

需要注意的是手工在xml中的配置会总是覆盖掉自定义特性的设置

这里有许多的整个app全局的属性可以在<application>中进行配置,具体的可以查看下面的连接进行查看   Public Properties   ApplicationAttribute.

List of Custom Attributes

其他相关的一些关于配置项的对应关系 都可以在这里面得到答案

5、xamarin.android 中如何对AndroidManifest.xml 进行配置和调整的更多相关文章

  1. Xamarin.Android中使用android:onClick="xxx"属性

    原文:Xamarin.Android中使用android:onClick="xxx"属性 在原生Android开发中,为一个View增加点击事件,有三种方式: 1.使用匿名对象 ( ...

  2. [置顶] Xamarin android中使用signalr实现即时通讯

    前面几天也写了一些signalr的例子,不过都是在Web端,今天我就来实践一下如何在xamarin android中使用signalr,刚好工作中也用到了这个,也算是总结一下学到的东西吧,希望能帮助你 ...

  3. SignalR在Xamarin Android中的使用

    原文:SignalR在Xamarin Android中的使用 ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 ...

  4. Xamarin Android 中Acitvity如何传递数据

    在xamarin android的开发中,activity传递数据非常常见,下面我也来记一下在android中activity之间传递数据的几种方式, Xamarin Android中Activity ...

  5. studio构建错误Element uses-permission#android.permission.ACCESS_NETWORK_STATE at AndroidManifest.xml:38:5-79 dupli

    今天在项目构建的时候遇到了如下报错: Element uses-permission#android.permission.ACCESS_NETWORK_STATE at AndroidManifes ...

  6. Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

  7. Xamarin.Android中使用ResideMenu实现侧滑菜单

    上次使用Xamarin.Android实现了一个比较常用的功能PullToRefresh,详情见:Xamarin. Android实现下拉刷新功能 这次将实现另外一个手机App中比较常用的功能:侧滑菜 ...

  8. Android学习笔记之AndroidManifest.xml文件解析(转)

    //自已备注: <?xml version="1.0" encoding="utf-8"?>//说明了版本号,字符集 <manifest xm ...

  9. Android学习笔记之AndroidManifest.xml文件解析

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

随机推荐

  1. 着重基础之—MySql Blob类型和Text类型

    着重基础之—MySql Blob类型和Text类型 在经历了几个Java项目后,遇到了一些问题,在解决问题中体会到基础需要不断的回顾与巩固. 最近做的项目中,提供给接口调用方数据同步接口,传输的数据格 ...

  2. asp.net 中长尾链接实现推送 -- comet

    一般需求推送服务时,都会去第三方拿推送组件,如”极光“,”百度“,”小米"什么的,自己用.net实现推送服务端需要面对很多问题,比如C10K,但是企业内部使用往往用不了10K的链接,有个1K ...

  3. time & datetime 模块

    在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime,calendar(很少用,不讲),下面分别来介绍. 在开始之前,首先要说明几点: 一 ...

  4. IntelliJ IDEA 2017版 spring-boot基础补充,原理详解

    一.Spring发展史  1.Spring1.x       版本一时代主要是通过XML文件配置bean,在java和xml中不断切换,在学习java web 初期的时候经常使用  2.Spring2 ...

  5. 一种基于Redis的10行代码实现IP频率控制方法

    优点:可支持海量访问的频率控制,只需要增加Redis机器,单个Redis节点(只占用一个cpu core)即可支持10万/s以上的处理. 基于IP频率限制是种常见需求,基于Redis可以十分简单实现对 ...

  6. 在 Java 中使用 protobuf

    在 Java 中使用 protobuf 从 https://github.com/google/protobuf/releases 下载编译器,并设置环境变量. 创建java项目添加protobuf- ...

  7. CDialog类

    CDilalog包含三个关键函数:OnInitDialog.OnOK和OnCancel,可以覆盖这三个函数初始化对话框.响应点击OK和Cancel按钮.尽管每个函数都响应一条对话框消息,但是不需要你提 ...

  8. 我的成长比价系列:java web开发过程中遇到的错误一:sql语句换行错误

    字符串换行导致的错误,确切的说是马虎的错误,自己在编写简单的servlet项目时,在StudentDao.java 中的  查询语句:String  sql= "SELECT Type,fl ...

  9. DevOps Workshop 研发运维一体化(广州站)

    第一天对软件开发的需求管理.项目计划和源代码管理进行的全面而深入的介绍,并且为到会的所有开发人员提供现场动手实验的机会,大家兴致高涨,按照我们的操作手册完成了所有实验课题. 第二天主要介绍了最新的自动 ...

  10. bootstrap-treeview + angular 使用

    bootstrap-treeview是什么 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件. 怎样使用bootstrap-treeview 插 ...