为什么R文件至关重要?揭秘安卓开发背后的神器,避免常见错误
当我在为我的Android应用程序设计一个简单的用户界面时,我偶然发现了R文件。迄今为止,我读过的所有书籍(或者试图阅读的书籍)以及我在网上找到的教程都告诉我“忽略”它们,继续我的编程旅程!今天,我想对所有那些隐藏在复杂代码背后的R文件表示感谢。你们被看见了,被听见了。好了,把这个傻傻的开场白放到一边,让我们来了解一下R文件及其重要作用。
在Android应用开发中,“R”文件指的是资源文件,这些自动生成的Java文件作为引用,指向Android项目中使用的各种资源。这些资源包括布局、字符串、可绘制图形、尺寸、颜色、样式等元素。R文件在代码中(用Java或Kotlin编写)以编程方式访问这些资源中扮演着至关重要的角色。
那么,这些文件是如何生成的呢?Android Studio是如何知道这些文件指向哪些资源的呢?有没有其他方法?(是的,但它更好吗?)
XML文件中的资源(如布局、字符串、可绘制图形等)都被分配了一个独一无二的资源ID。当你构建你的Android项目(当然是使用Gradle)时,这些资源及其关联的资源ID被编译。基于XML文件中定义的资源,Android Gradle插件为每种资源类型生成相应的R.java文件。这些R.java文件包含代表资源ID的常量整数值,并放在项目的“gen”(生成)目录中。现在,你(一名开发者)可以使用这些资源ID在你的Kotlin/Java代码中访问这些资源。
简单,不是吗?但如果你真的“讨厌”R文件,并想使用另一种(不那么好的)方法,那么你可能会有点失望。
你看,R文件存在的整个原因是因为它们使你的工作更容易、更高效和更方便。一种方法可能是直接使用方法使用资源。例如,由Context类提供的‘getResources()’方法。这种方法允许你在运行时动态地访问资源,而不依赖于R文件来获取资源ID。然而,这种方法更容易出错。它缺乏类型安全性,如果资源名称拼写错误或修改,可能会导致运行时错误。另一种方法(对我来说没有意义)是在代码中手动定义常量来代表资源ID。即使你得到了正确的资源ID,也要注意这些ID会因更新或重构而改变。所以你需要手动更改项目中的每一个硬编码常量。我甚至不想解释这种方法,特别是如果你有多个布局(在大型项目中)。
Android使用资源编译和映射的组合,将项目的XML文件中声明的资源与R.java文件中相应的整数ID关联起来。虽然在Android开发中有其他访问资源的方法(不是真的),但R文件仍然是由于其效率、类型安全性和易用性而成为标准和推荐的方法。通常最好坚持使用R文件,除非你有使用其他方法的特定理由。