Android中的R类是什么?

And*_*Eve 83 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

其中使用了一个名为神秘的类R.这堂课的目的是R什么?

hac*_*bod 106

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

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

通常有两个 R课程要处理

  1. 在该框架的资源android.R
  2. 你自己的名字空间

它之所以被命名R是因为它代表了R esources,并且没有必要让人们输入更长的东西,特别是因为在它之后最终会有相当长的符号名称,这会导致相当多的换行符.

  • 在解决了所有问题并继续完成本书之后,我可以添加(从书中):这是一个自动生成的**实用程序类**,它提供对项目中资源的引用.它被称为"R类",因为它的名字是**R.java**.它由AAPT从**res**文件夹中定义的资源生成. (10认同)
  • 有一点让人们输入更长的东西:它被称为干净的代码,可能还没有到达每个人.一个字母类,扩展,变量可能在本地环境中很好,但从不全局.像这样丑陋的名字导致像这样的多余问题. (8认同)

tjb*_*tjb 21

什么是R: 关于R,没有什么是非常神秘的.它只是一个有很多静态子类的类,在eclipse中打开并查看(在gen /下).

该类的每个成员都是以下两种情况之一:1)静态最终类或2)静态最终整数,它们对于其他类的成员是唯一的.

为什么它如此神秘: 它容易混淆,因为R是由蚂蚁自动生成的.它是神秘的,因为你不应该手动"触摸"它(当然你可以,但你的更改将在重新生成时自动删除).它另外神秘,因为有时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" />
Run Code Online (Sandbox Code Playgroud)

要查看R文件所属的包,只需打开eclipse中的gen /文件夹(包视图).您将看到其中列出的一个包,它将具有您在清单中指定的名称.尝试删除它,如果所有资源都遵循正确的命名规则,并且所有xml文件都遵循正确的xml规则,并且在eclipse中启用了自动构建,则会返回.

理解R文件的关键是要意识到它与其他类在同一个包中,即使它与属于你的"main"包的其他文件位于不同的目录中.了解了这一点并理解资源文件的语法和命名后,可以轻松解决R问题.


小智 6

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