为什么资产根据主要活动或类别而使用不同的名称空间?

时间:2019-05-05 09:13:50

标签: xamarin.android

如果我处于主要活动中,如果要打开资产中存在的文件,请使用以下代码:

using (Stream miFicheroOrigen = Assets.Open("configuration.xml"))
{}

我可以看到名称空间是Android.Context.Res.AssetManager。

但是,我想创建一个包含用于管理配置的方法的类,因此我创建了此类:

internal class ConfigurationManager
{
}

但是在这种情况下,我必须使用Android.Content.Resoruces.System.Assets,不能在与主要活动相同的名称空间中使用Assets。

它可以工作,但是我想知道它是真的是相同的资产还是不同的资产。

也许是因为第一个是Activity,而第二个是普通类,但是我不太明白为什么在第二种情况下我无法访问相同的名称空间。

谢谢。

1 个答案:

答案 0 :(得分:1)

  

我可以看到名称空间是Android.Context.Res.AssetManager。

     

但是在这种情况下,我必须使用Android.Content.Resoruces.System.Assets

似乎您在问题中输入了错误的字母。也许您想知道它们之间的区别如下:

Android.Content.Res.AssetManager Class VS Android.Content.Res.Resources Class

不同:

Android.Content.Res.AssetManager:提供对应用程序原始资产文件的访问;有关大多数应用程序想要检索其资源数据的方式,请参见Resources。此类提供了一个较低级别的API ,该API允许您打开和读取与应用程序捆绑在一起的原始文件,作为简单的字节流。

Android.Content.Res.Resources:用于访问应用程序资源的类。它位于应用程序资产管理器的顶部(可通过Resources.Assets进行访问),并提供了一个高级API ,用于从资产中获取类型化的数据。使用应用程序资源可轻松更新各种特征无需修改代码即可访问应用程序,并且(通过提供其他资源)使您能够针对各种设备配置(例如,针对不同的语言和屏幕尺寸)优化应用程序。 这是开发可在不同类型的设备上兼容的Android应用程序的重要方面

Android.Content.Res.Resources.System属性:返回全局共享资源对象,该对象仅提供对系统资源(无应用程序资源)的访问,并且未配置为当前屏幕(不能使用尺寸单位) ,不会根据方向等发生变化。

相同

他们都可以获取 Android.Content.Res.AssetManager

Android.Content.Res.AssetManager assetManager = Android.Content.Res.Resources.System.Assets;

结果:因此,您可以看到 Android.Content.Res.Resources.System 是全局共享资源对象,因此可以从普通类中获取。这并不意味着 Android.Content.Res.AssetManager 不能从普通类中获取。根据文档,它们只是api的高点和低点,因此该文档建议使用获取资源的方法( Android.Content.Res.Resources.System )。