Android中的R类是什么?
在AndroidStudio中,当我使用空活动创建项目时,我会在Android中的R类是什么?,android,Android,在AndroidStudio中,当我使用空活动创建项目时,我会在MainActivity.java文件中获得以下代码: package my.company.my_proj; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected vo
MainActivity.java
文件中获得以下代码:
package my.company.my_proj;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
其中使用了名为
R
的神秘类。此类R
的目的是什么?R是资源的名称。通过R.$FOLDER.$resource
或类似方式访问的任何资源
如果无法解决,请确保路径正确且引用的资源存在(区分大小写;包括扩展名)
另外,(无论如何,对我来说)令人困惑的是,有两种不同的
R
。如果您遇到很多“无法解决”的错误,请尝试查看您导入的内容。尝试更改或删除它。或者您可以尝试清理您的项目(警告:有时这会使事情变得更糟)。R
是一个包含特定应用程序包的所有资源的定义的类。它位于应用程序包的命名空间中
例如,如果您在清单中说您的包名是com.foo.bar
,则会生成一个R
类,其中包含com.foo.bar.R
中所有资源的符号
通常,您将处理两个R
类
它之所以被命名为
R
,是因为它代表Resources,而且让人们键入更长的内容是没有意义的,特别是因为后面通常有相当长的符号名,这可能会导致相当多的行包装。什么是R:
关于R并没有什么神秘的地方。它只是一个有许多静态子类的类,在eclipse中打开它并看一看(在gen/下)
这个类的每个成员都是两件事中的一件:1)静态最终类或2)相对于其类的其他成员是唯一的静态最终整数
为什么这么神秘:
很容易混淆,因为R是由ant自动生成的。它很神秘,因为你不应该手动“触摸”它(当然你可以,但你的更改会在再生时自动删除)。另外,它还很神秘,因为有时eclipse会自动导入androids标准R文件(如上面的答案所述)
为什么它总是第一个无法解决的问题:R完全遵循Java类和包的规则,关于R如何处理导入,没有什么特别的问题。R将自动放置在清单文件中的包条目指定的包中
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="package.which.will.contain.R.and.probably.the.main.package.in.the.application" android:versionName="8.6.2011" android:versionCode="1">
<uses-sdk android:minSdkVersion="13" />
要查看您的R文件属于哪个包,只需在eclipse中打开gen/文件夹(packages视图)。您将看到其中列出了一个包,它将具有您在清单中指定的名称。尝试删除它,如果您的所有资源都遵循正确的命名规则,所有xml文件都遵循正确的xml规则,并且在eclipse中启用了build automatically,那么它将返回
理解R文件的关键是认识到它与其他类位于同一个包中,即使它与属于“主”包的其他文件位于不同的目录中。理解了这一点并理解了资源文件的语法和命名之后,就很容易解决R的问题。Android R.java是由AAPT(Android资产打包工具)自动生成的文件,其中包含res/directory所有资源的资源ID。
如果在activity_main.xml文件中创建任何组件,则会在此文件中自动创建相应组件的id。这个id可以在活动源文件中用于对组件执行任何操作。是的,清理我的项目似乎是一项日常工作——eclipse总是乱成一团,忘记了一些事情,但是一次好的清理似乎可以解决问题(尽管我从来没有经历过比现在更糟糕的事情,正如John提到的)@Brian:当我清理我的项目时,Eclipse会销毁并重新生成我的
R
文件。偶尔,它会错过“重新生成”步骤,使我没有(或有一个空的)R
,R
被编程为自动撤消手动所做的任何更改。@John:出于好奇,你在使用什么操作系统?@John,在我的情况下,清理没有帮助。您可以看到该线程中的实际错误列表(尚未回答):在解决所有问题并继续阅读本书之后,我可以(从本书中)添加:这是一个自动生成的实用程序类,提供对项目中资源的引用。它被称为“R类”,因为它的名称是R.java。它是由AAPT从res文件夹中定义的resourced中生成的。有一点需要人们输入更长的内容:它被称为clean code,可能还没有到达每个人。单字母类、扩展名和变量在局部环境中可能很好,但在全局环境中永远不会。像这样难听的名字会导致像这样多余的问题。