R.java背后的概念是什么?

Mon*_*ael 37 architecture android r.java-file android-resources

在android中,R.java用于提供对XML文件中定义的资源的访问.要访问资源,我们需要调用findViewById()传入要获取的资源的id的方法.

这与Spring类似,其中bean在XML上下文中定义,并通过使用应用程序上下文获取. context.getBean("beanId")

这提供了松散耦合,因为bean是在外部定义的,并且可以在不修改代码的情况下进行更改.

这让我很困惑.虽然Android看起来与spring相似,但它有什么优势?

  1. 有一个中间的R.java有什么意义呢?我们难道不能通过使用资源读取器/应用程序上下文直接从XML获取资源.例如findViewById("resourceId")
  2. 没有任何松耦合.由于R.java中的引用会自动生成,因此如何删除资源并放入新资源?
  3. 它遵循什么样的设计模式(如果有的话)?
  4. 使用IOC(如Roboguice)注入资源不是更好吗?为什么然后谷歌决定给我们这样一种奇怪的资源合作方式?

请原谅我的无知.我是一个新手Java开发人员,一次尝试太多东西.:-)感谢您的所有反馈.

Raj*_*Dua 21

最大的优势在于本地化并为不同的屏幕尺寸提供备用资源.

例如,你可以拥有一个String资源,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
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您只需指定R.layout.mylayout来扩充布局.如果设备处于横向模式,资源管理器将在layout-land中获取文件.

手动执行此操作将是一场噩梦 - 因此需要R文件


Phi*_*hil 19

android.R.java不仅仅是存储XML ID的地方.它还包含对资源的访问 - 例如drawable,布局,字符串,数组,以及您可以在资源中声明的任何内容.

就个人而言,我发现它在使用Eclipse时很有用.我可以简单地键入findViewById(R.id.,Eclipse将显示一个工具提示,其中包含可供选择的选项列表.

但是在平台级别,我会说硬编码的id变量有助于防止在使用字符串识别资源时出现错误 - 在编程时(或在编译期间,而不是运行时)可以调试的东西.

  • 不能同意更多.我认为编译时检查值得.编译时间安全性是我喜欢Java而不是其他动态语言的原因之一.:-) (5认同)