【发布时间】:2018-11-12 18:27:36
【问题描述】:
R.layout.activity_main 是什么意思?
我明白“。”运算符用于定义特定对象的变量,但在这种情况下,它被使用了两次,所以我无法从中做出任何事情。 “R”和“布局”到底是什么?
我的意思是显然它们是类(对吗?)但它们的功能是什么?基本上解释 R.layout.activity_main !
如果问题太模糊或太宽泛,请发表评论。
【问题讨论】:
R.layout.activity_main 是什么意思?
我明白“。”运算符用于定义特定对象的变量,但在这种情况下,它被使用了两次,所以我无法从中做出任何事情。 “R”和“布局”到底是什么?
我的意思是显然它们是类(对吗?)但它们的功能是什么?基本上解释 R.layout.activity_main !
如果问题太模糊或太宽泛,请发表评论。
【问题讨论】:
R.java 是在构建过程中生成的类(具有内部类,如layout 或string),并引用了您的应用资源。您创建的每个资源(或由 Android 提供的)都由 R 中的一个整数引用,称为资源 ID。
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 或TextView 中为您的应用程序使用android:label;在 xml 中:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
/>
或在代码中:textview.setText(R.string.app_name)。
您可以使用Resources 类以编程方式访问资源,您可以通过在任何上下文(例如您的活动)上调用getResources 来获取对它的引用。因此,例如,您可以通过调用this.getResources().getString(R.string.app_name) 来在您的活动中获取上述应用名称。
您还可以为不同的设备属性/设置(如屏幕大小或语言)提供不同的资源,您可以使用R 中的相同参考来访问这些资源。恕我直言,这里最简单的例子是字符串:如果您在 /res 中添加一个带有语言说明符的新 values 文件夹(所以 /res/values-nl 是荷兰语),然后添加具有相同标识符但翻译和资源不同的字符串管理系统会根据您的用户设备巧妙地确定为您提供哪一个。
我希望这会有所帮助。有关资源的更多信息,请参阅documentation。
【讨论】:
R 是一个自动生成的类,并描述了您项目的资源。它包含静态内部类。 layout 就是其中之一。 R.layout 指的是称为布局的内部类。 activity_main 是 public static final 类的成员 layout
【讨论】:
在 Android 中,R 是一个 Java 类,由构建过程从您的资源中自动生成。
R.layout 成员是一个自动生成的类,其中包含布局的所有 ID。
R.layout.activity_main 是一个static final int 成员,代表layout/activity_main.xml 中布局文件的ID。
【讨论】:
好的,所以 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 可以通过该 ID 识别它。布局位于 R.Layout 中。因此,R.layout.activity_main 为您获取类 R 的类布局的变量 activity_main 的值。
同样,不要尝试查找或更改生成的 R 文件。如果你这样做,事情可能会大错特错。
【讨论】:
来自https://stackoverflow.com/a/4953282/1393766
R 是一个包含特定应用程序包的所有资源定义的类。它位于应用程序包的命名空间中。
如果你想在你的 Activity 类中扩展一个布局,你可以使用 R.layout.activity_main 其中 layout 指定你的资源是一个布局,它的名字是 activity_main。
如果您想在 Activity 类的布局中使用可绘制图像,可以使用 R.drawable.image_name ,其中 drawable 指定您的资源是可绘制图像。
另外,R.java 类是一个自动生成的类,不应手动更改。
【讨论】: