ndroid程序中的ID是怎么来的?如何与实际资源对应?

ndroid程序中的ID是怎么来的?如何与实际资源对应?,第1张

Android程序中的资源ID是Android SDK自动生成的,Android SDK会自动生成一个R文件,里面有所有的资源ID。

Android设备的设备id是惟一确定一台设备的ID标识,即不同的设备是不相同的,不会重复,而且是固定不变的。

Android中的组件要用一个int类型的值来表示,这个值也就是组件标签中的ID属性值。ID属性只能接受资源类型的值,即是必须以@开头的值,例如@id/abc等。

如果在@后面使用“+”则表示当修改完某个布局文件,并保存后,系统会自动在  R.java文件中生成相应的int类型变量。变量名就是“/”后面的值,例如@+id/xyz会在R.java文件中生成int xyz = value,其中value是一个十六进制的数。

@+id 系统会自动把你起的ID名字加入到配置文件中,在业务逻辑中可以直接在R.id中找到。

而用@id 则不会自动加载到R.id 而且也不能随意起名,要在Value目录下写一个ids.xml来对每个id进行声明,声明的个格式为,<item name="" type="id" />这种写法主要方便统一管理

如果xyz在R.java中已经存在同名的变量,就不再生成新的变量而该组件会使用这已存在的变量的值。

R文件的说明如下:

/* AUTO-GENERATED FILE.  DO NOT MODIFY.

* This class was automatically generated by the

* aapt tool from the resource data it found.  It

* should not be modified by hand.

*/

提示开发者,这是一个自动生成的文件,不能手动去修改它。

资源文件的使用分为在代码中使用和在其他资源文件中引用该资源文件。在我们编译一个Android应用时,Android会自动生成一个R类,在该类中根据不同的资源类型又生成了相应的内部类,该类包含了系统中使用到的所有资源文件的标示,其内容如下所示。

Java代码:

package com.xxx.xxx

// 资源类

public final class R {

// 数组

public static final class array {

public static final int faultRecords=0x7f060000

}

// 属性

public static final class attr { }

// 颜色

public static final class color {

public static final int black=0x7f040001

public static final int red=0x7f040000

}

// 图片

public static final class drawable {

public static final int icon=0x7f020001

public static final int logo2=0x7f020002

}

// ID标示

public static final class id {

public static final int licenseEditText=0x7f070022

public static final int lngEditText=0x7f070001

}

// 布局

public static final class layout {

public static final int custom_dialog=0x7f030000

public static final int custom_dialog1=0x7f030001

}

// 字符串

public static final class string {

public static final int app_name=0x7f050001

public static final int hello=0x7f050000

}

}

1.在代码中使用资源文件

在代码中访问资源文件,我们是通过使用R资源类中定义的资源文件类型和资源文件名称来访问的。具体格式为:R.资源文件类型.资源文件名称。例如:

Java代码:

// 设置Activity显示的布局视图

setContentView(R.layout.login_system)

// 获得Button实例

cancelBtn = (Button)findViewById(R.id.cancelButton)

loginBtn = (Button)findViewById(R.id.loginButton)

// 获得TextView实例

userEditText = (EditText)findViewById(R.id.userEditText)

pwdEditText = (EditText)findViewById(R.id.pwdEditText)

}

另外,除了访问用户自己定义的资源文件,还可以访问系统中的资源文件。大部分的资源文件被定义在android包下的R类中。访问系统中的资源文件格式为:android.R.资源文件类型.资源文件名称。例如:

Java代码:

int i

// 动画

i = android.R.anim.fade_in

// 数组

i = android.R.array.emailAddressTypes

// 颜色

i = android.R.color.darker_gray

// 尺寸

i = android.R.dimen.app_icon_size

// 可绘制图片

i = android.R.drawable.title_bar

// 字符串

i = android.R.string.cancel

2.在其他资源文件中引用资源文件

我们经常会在布局文件的元素属性中引用其他资源文件,经常用到的有字符串、图片、颜色等资源。例如,下列布局文件中的TextView组件引用了一个字符串来表示文本内容,引用了一个颜色来表示文本颜色,引用了一个尺寸来表示文本尺寸。

Java代码:

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/styled_welcome_message"

android:textColor="@color/opaque_red"

android:textSize="@dimen/sixteen_sp" />


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11750111.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存