在Android开发(JAVA语言)中,R.layout.activity_main的含义是什么?

14
R.layout.activity_main的意思是什么?
我了解"."运算符用于定义特定对象的变量,但在这种情况下它被使用了两次,所以我无法理解它的含义。另外,“R”和“layout”到底是什么?
我的意思是,它们显然是类(对吗?),但它们的功能是什么?请简要解释一下 R.layout.activity_main!
如果问题过于模糊或过于广泛,请留言。

5个回答

22

R.java 是一个类(包括像 layoutstring 这样的内部类),在构建过程中生成并引用您的应用程序资源。每个您创建的资源(或 Android 提供的资源)都由一个名为资源 ID 的整数在 R 中引用。

R.layout.* 引用您创建的任何布局资源,通常位于 /res/layout 中。因此,如果您创建了一个名为 activity_main.xml 的活动布局,则可以使用 R.layout.activity_main 中的引用来访问它。许多内置功能都可以轻松接受这种资源 ID,例如您在创建活动时使用的 setContentView(int layoutResid),您可能会遇到这个特定示例。

如果您创建一个字符串资源(在 strings.xml 中),如下所示:

<string name="app_name">Application name</string>

它将在R.string.app_name中获得新的引用。您可以在任何接受字符串资源的地方使用它,例如在AndroidManifest.xml中应用程序的android:label,或在TextView上;可以在xml中使用:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/app_name"
    />

或者在代码中:textview.setText(R.string.app_name)

您可以使用Resources类以编程方式访问资源,通过在任何上下文(如您的activity)上调用getResources方法获取该类的引用。例如,您可以通过调用this.getResources().getString(R.string.app_name)在您的activity中获取上面描述的应用程序名称。

您还可以为不同的设备属性/设置(如屏幕大小或语言)提供不同的资源,可以使用相同的R引用访问这些资源。最简单的例子是字符串:如果在/res文件夹中添加带有语言说明符的新values文件夹(例如/res/values-nl表示荷兰语),并添加具有相同标识符但不同翻译的字符串,则资源管理系统会巧妙地根据用户的设备自动选择提供哪一个字符串资源。

希望这能有所帮助。有关资源的更多信息,请参见文档


3

R 是一个自动生成的类,它描述了你的项目的资源。它包含静态内部类,其中之一就是 layout。R.layout 指的是名为 layout 的内部类。activity_main 是类 layout 的一个 public static final 成员。


3
在Android中,R是一个Java类,由构建过程从您的资源自动生成。 R.layout成员是一个自动生成的类,包含所有布局的ID。 R.layout.activity_main是一个static final int成员,表示layout/activity_main.xml中布局文件的ID。

3

好的,所以R是一个生成的类。如果你很幸运,你永远不会看到它,也不需要去碰它,否则你肯定做错了什么。

当你创建布局或对布局进行任何更改时,Android Studio会为你生成相当多的文件。其中包括一个R.java文件。以下是R.java类的一部分:

public final class R {
    public static final class anim {
        public static final int abc_fade_in = 0x7f050000;
        public static final int abc_fade_out = 0x7f050001;
        public static final int abc_grow_fade_in_from_bottom = 0x7f050002;
        public static final int abc_popup_enter = 0x7f050003;
        public static final int abc_popup_exit = 0x7f050004;
        public static final int abc_shrink_fade_out_from_bottom = 0x7f050005;
        public static final int abc_slide_in_bottom = 0x7f050006;
        public static final int abc_slide_in_top = 0x7f050007;
        public static final int abc_slide_out_bottom = 0x7f050008;
        public static final int abc_slide_out_top = 0x7f050009;
    }
    public static final class attr {
        public static final int actionBarDivider = 0x7f010062;
        public static final int actionBarItemBackground = 0x7f010063;
        public static final int actionBarPopupTheme = 0x7f01005c;
        public static final int actionBarSize = 0x7f010061;
        public static final int actionBarSplitStyle = 0x7f01005e;
        public static final int actionBarStyle = 0x7f01005d;
        public static final int actionBarTabBarStyle = 0x7f010058;
        public static final int actionBarTabStyle = 0x7f010057;
        public static final int actionBarTabTextStyle = 0x7f010059;

正如您所看到的,在这种情况下,如果我键入

,那么...
R.anim.abc_fade_in

我会选择值为0x7f050000;每个布局文件都映射在这个R文件中,并通过其ID被Android识别。布局位于R.Layout中。所以,R.layout.activity_main可以得到类R的布局类变量activity_main的值。

再次提醒,不要尝试查找或更改生成的R文件。如果你这样做,事情可能会出大问题。


1

来自 https://dev59.com/6G445IYBdhLWcg3wRoHH#4953282

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

如果您想在活动类中膨胀布局,可以使用 R.layout.activity_main,其中 layout 指定您的资源是布局,名称为 activity_main。

如果您想在活动类中使用可绘制图像,则可以使用 R.drawable.image_name,其中 drawable 指定您的资源是可绘制图像。

此外,R.java 类是自动生成的类,不应手动更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接