Android中的R类是什么?

时间:2011-02-10 03:33:52

标签: 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 void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

使用名为R的神秘类。这个课程的目的是什么R

4 个答案:

答案 0 :(得分:103)

R是一个类,其中包含特定应用程序包的所有资源的定义。它位于应用程序包的命名空间

例如,如果您在清单中说明您的包名称为com.foo.bar,则会生成一个R类,其中包含com.foo.bar.R中所有资源的符号。

您将要处理的两个 R课程

  1. android.R
  2. 中的框架资源
  3. 您自己的,在您的命名空间中
  4. 它被命名为R,因为它代表 R 资源,并且没有必要让人们输入更长的内容,特别是因为通常以相当长的符号名称结束在它之后,这可能会导致相当数量的换行。

答案 1 :(得分:19)

什么是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 /文件夹(包视图)。您将看到其中列出的一个包,它将具有您在清单中指定的名称。尝试删除它,如果所有资源都遵循正确的命名规则,并且所有xml文件都遵循正确的xml规则,并且在eclipse中启用了自动构建,它将会返回。

理解R文件的关键是要意识到它与其他类在同一个包中,即使它与属于“main”包的其他文件位于不同的目录中。了解了这一点并理解资源文件的语法和命名后,解决R问题很容易。

答案 2 :(得分:2)

R是您资源的名称。您通过R.$FOLDER.$RESOURCE访问的任何资源或非常相似的资源。

如果无法解析,请确保路径正确且引用的资源存在(区分大小写;包括扩展名)。

另外,令人困惑的部分(对我而言)是两个不同的R如果你得到了很多“无法解决”的错误,试着看看你要导入什么。尝试更改或删除它。或者您可以尝试清理您的项目(警告:有时会使事情变得比现在更糟)。

答案 3 :(得分:2)

Android R.java是AAPT(Android资产打包工具)自动生成的文件,其中包含res / directory的所有资源的资源ID。 如果您在activity_main.xml文件中创建任何组件,则将在该文件中自动创建对应组件的ID。可以在活动源文件中使用此ID,以对该组件执行任何操作。