什么是落后R.java概念?(What is the concept behind R.java?)

2019-06-23 09:34发布

在Android的R.java是用来提供访问在XML文件中定义的资源。 要访问我们需要调用资源findViewById()方法传入资源的ID是牵强。

这类似于弹簧,其中豆在XML上下文中定义和使用应用程序上下文中获取。 context.getBean("beanId")

这提供了由于豆外部定义的并且不会使修改代码可以被改变松散耦合。

这有我的困惑。 虽然Android的什么也类似于弹簧,它提供什么优势呢?

  1. 什么是反正具有中间R.java的地步? 我们能不能就通过使用资源读取器/应用程序上下文中直接获取资源的XML。 例如findViewById("resourceId")
  2. 没有任何松耦合。 由于在R.java引用得到自动生成一个如何删除资源,并把在一个新的?
  3. 它遵循什么样的设计模式(如果有的话)?
  4. 那岂不是更好,以使用IOC注入资源(如Roboguice)? 为什么那么谷歌决定给我们使用资源的这样一个奇怪的方式?

请原谅我的无知。 我是一个新手Java开发者在一次尝试的东西太多了。 :-)感谢所有的反馈。

Answer 1:

android.R.java是不是在哪里XML ID存储。 它也包含了对资源的访问 - 如可绘制,布局,字符串,数组,基本上任何你能在资源声明。

我个人觉得,它使用Eclipse时非常有用。 我可以简单地输入findViewById(R.id.和Eclipse将显示工具提示使用的选项可供选择的列表。

然而,在一个平台级的,我要说的是硬编码的ID变量有助于避免错误使用字符串时标识资源 - 东西,可以调试的同时,编程(或编译时,而不是运行时)。



Answer 2:

最大的优点是在本地化和提供候补资源不同的屏幕尺寸。

例如,你可以有一个字符串资源R.string.myname这可以用英文定义在/values-en/strings.xml和西班牙语/values-es/strings.xml

系统会照顾或拿起取决于你只需要使用的语言环境的正确的文件@string/myname在布局文件或R.string.myname在你的代码。

同样,你可以有纵向和横向中限定的两个布局文件

res/layout/mylayout.xml
res/layout-land/mylayout.xml

在你的代码将只指定R.layout.mylayout膨胀布局。 如果该设备是在横向模式下资源经理拿起布局,土地的文件。

这样做手工将是一场噩梦 - 因此需要R档



Answer 3:

比较有点感觉一点点(实际上)奇怪,因为您可以根据自己使用的东西,做东西命名的事实比较两个机制。 对于资源的荷载,看看资源处理是如何在做.Net世界。


它提供了如果资源是可用编译时检查。 因为如果它不是,也不会有内部的静态R.java指向它。 在Spring例子,你怎么能肯定有一个叫豆beanId ? 它不提供检查,如果它是资源的正确类型 ,虽然。

这是为什么不松? 只要新的资源具有相同的名称,它会产生相同的静态常量。 在Spring中,你将不得不使用相同的bean的名称。

设计模式? 没有。 它只是通过命名的资源,然后只用名字称呼他们,而不是从自己的真实位置直接加载它们添加一个间接层。

实际上,资源注入 ,因为资源加载必须本地化处理。 见这里为Android怎么做的东西; 在.Net世界,更多的文化包装到卫星组件; 在资源管理器将加载基于当前文化的权利之一。



Answer 4:

它也包含了对资源的访问 - 如身份证,图形,布局,字符串,数组,基本上任何你能在资源声明。



文章来源: What is the concept behind R.java?