Android两种方式访问应用资源

Android两种方式访问应用资源

萌新一个,第一份工作,入职android系统开发,总结一下这一个月在学习途中所做的笔记,发个博客,忘了这些是从哪里总结了,如有跟贵博重复的,麻烦评论一下,我添一下您的链接,抱歉。另外,建议同样学习android开发的新人,主要看一下android.developer这个官方网站开发指南,很有用。排版就不搞了,我是从我自己做的word直接复制出来的,如果看到这个博客的请多多担待,写这个博客目的就是给我自己留个总结回忆,忘了的话回头看看

在应用中提供资源后,您可通过引用其资源 ID 来应用该资源。所有资源 ID 都在您项目的 R 类中进行定义,该类由 aapt 工具自动生成。

编译应用时,aapt 会生成 R 类,其中包含 res/ 目录中所有资源的资源 ID。每个资源类型都有对应的 R 子类(例如,R.drawable 对应所有可绘制对象资源),而该类型的每个资源都有对应的静态整型数(例如,R.drawable.icon)。该整型数就是可用来检索资源的资源 ID。

尽管资源 ID 是在 R 类中指定的,但您完全不需要在该类中查找资源 ID。资源 ID 始终由以下部分组成:
资源类型:每个资源都被分到一个“类型”组中,例如 string、drawable 和 layout。如需了解有关不同类型的详细信息,请参阅资源类型。
资源名称,它是不包括扩展名的文件名;或是 XML android:name 属性中的值(如资源是字符串等简单值)。
访问资源的方法有两种:
在代码中:使用来自 R 类子类的静态整型数,例如:
R.string.hello
string 为资源类型,hello 为资源名称。当您提供此格式的资源 ID 时,有许多 Android API 可以访问您的资源。请参阅在代码中访问资源。

在 XML 中:使用同样与 R 类中所定义资源 ID 对应的特殊 XML 语法,例如:
@string/hello
string 为资源类型,hello 为资源名称。只要 XML 资源中的某处拥有您在资源中提供的值,则您便可在该 XML 资源中使用此语法。请参阅在 XML 中访问资源。

1、在代码中访问资源
可以以方法参数的形式传递资源ID,进而在代码中使用资源。
eg:设置一个ImageView,从而借助setImageResource() 使用res/drawable/myimage.png 资源:
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

用例
许多方法可接受资源 ID 参数,您可利用 Resources 中的方法检索资源。您可以通过 Context.getResources() 获得 Resources 的实例。

以下是一些在代码中访问资源的示例:
// 从可绘制资源加载当前屏幕的背景
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

//通过从Resources对象获取字符串来设置活动标题,因为此方法需要CharSequence而不是资源ID
getWindow().setTitle(getResources().getText(R.string.main_title));

// 加载当前屏幕的自定义布局
setContentView(R.layout.main_screen);

// 通过从资源对象获取动画来设置动画中的幻灯片
flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.hyperspace_in));

// 使用资源ID设置TextView对象上的文本
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);

2、在 XML 中访问资源
您可以使用对现有资源的引用,为某些 XML 属性和元素定义值。创建布局文件时,为给您的微件提供字符串和图像,您会经常这样做。
例如,如果您为布局添加 Button,则应为按钮文本使用字符串资源:

用例
在某些情况下,您必须使用资源作为 XML 中的值(例如,对微件应用可绘制图像),但您也可在 XML 中任何接受简单值的地方使用资源。例如,如果您拥有以下资源文件,其中包括一个颜色资源和一个字符串资源:

<?xml version="1.0" encoding="utf-8"?> #f00 Hello!

您可以在以下布局文件中使用这些资源来设置文本颜色和文本字符串:

<?xml version="1.0" encoding="utf-8"?>

在此情况下,您无需在资源引用中指定包名称,因为资源来自您自己的资源包。如要引用系统资源,则您需要加入包名称。例如:

<?xml version="1.0" encoding="utf-8"?>

您甚至可以在 XML 中使用资源创建别名。例如,您可以创建一个可绘制对象资源,将其作为另一个可绘制对象资源的别名:

<?xml version="1.0" encoding="utf-8"?>

3、引用样式属性
利用样式属性资源,您可以在当前应用的主题背景中引用某个属性的值。借助引用样式属性,在自定义界面元素的外观时,您无需采用提供硬编码值这种方式,您可以通过为其设置样式,以匹配当前主题背景提供的标准变体来达成目的。引用样式属性的实质作用是,“在当前主题背景中使用此属性定义的样式”。
如要引用样式属性,名称语法几乎与普通资源格式完全相同,区别在于您需将 at 符号 (@) 改为问号 (?),并且资源类型部分为可选项。例如:
?[<package_name>:][<resource_type>/]<resource_name>

例如,以下代码展示了如何通过引用属性来设置文本颜色设,使其匹配系统主题背景的“基本”文本颜色:

在以上代码中,android:textColor 属性指定当前主题背景中某个样式属性的名称。Android 现在会将应用于 android:textColorSecondary 样式属性的值用作此微件中 android:textColor 的值。由于系统资源工具知道此环境中肯定存在某个属性资源,因此您无需显式声明类型(类型应为 ?android:attr/textColorSecondary)— 您可以将 attr 类型排除在外。

4、访问原始文件
尽管并不常见,但您的确有可能需要访问原始文件和目录。如果确有需要,则将文件保存在 res/ 中并没有用,因为从 res/ 读取资源的唯一方法是使用资源 ID。您可以改为将资源保存在 assets/ 目录中。
保存在 assets/ 目录中的文件没有资源 ID,因此您无法通过 R 类或在 XML 资源中引用它们。您可以改为采用类似普通文件系统的方式查询 assets/ 目录中的文件,并利用 AssetManager 读取原始数据。
不过,如果您只需要读取原始数据(例如视频文件或音频文件)的能力,则可将文件保存在 res/raw/ 目录中,并利用 openRawResource() 读取字节流。

5、访问平台资源
Android 包含许多标准资源,例如样式、主题背景和布局。如要访问这些资源,请通过 android 包名称限定您的资源引用。例如,您可以将 Android 提供的布局资源用于 ListAdapter 中的列表项:
setListAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1 ,myrray));
在上例中,simple_list_item_1 是平台为 ListView 中的项目所定义的布局资源。您可以使用该资源,而不必自行创建列表项布局。

代码访问资源(总结)

1、访问自己定义的资源文件,格式:R.资源文件类型.资源文件名称
2、访问系统中的资源文件,格式:android.R.资源文件类型.资源文件名称
3 如何使用资源?

①res/drawable 专门存放png、jpgÉ图标文件。在代码中使用getResources().getDrawable(resourceId)获取该目录下的资源。

②res/layout 专门存放xml界面文件,xml界面文件和HTML文件一样,主要用于显示用户操作界面。

③res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中,如下:

④strings.xml 定义字符串和数值,在Activity中使用getResources().getString(resourceId) 或getResources().getText(resourceId)取得资源。它的作用和struts中的国际化资源文件一样。

<?xml version="1.0" encoding="UTF-8"?> admin

· arrays.xml 定义数组。

<?xml version="1.0" encoding="utf-8"?> red yellow green blue

⑤colors.xml 定义颜色和颜色字串数值,你可以在Activity中使用getResources().getDrawable(resourceId) 以及getResources().getColor(resourceId)取得这些资源。例子如下:

<?xml version="1.0" encoding="UTF-8"?> #ff0000

⑥dimens.xml 定义尺寸数据,在Activity中使用getResources().getDimension(resourceId) 取得这些资源

<?xml version="1.0" encoding="UTF-8"?> 50dip

⑦styles.xml 定义样式。

<?xml version="1.0" encoding="utf-8"?>

⑧res/anim/ 存放定义动画的XML文件。

⑨res/xml/ 在Activity中使用getResources().getXML()读取该目录下的XML资源文件。

⑩res/raw/ 该目录用于存放应用使用到的原始文件,如音效文件等。编译软件时,这些数据不会被编译,它们被直接加入到程序安装包里。 为了在程序中使用这些资源,你可以调用getResources().openRawResource(ID) , 参数ID形式:R.raw.somefilename。

eg:实例1:
访问res/drawable/myimage.png,并将其设置到ImageView上:

//用R.id.myimageview来在布局文件中获取id定义为myimageview的ImageView
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
//用R.drawable.myimage来获取res/的drawable子目录下名为myimage的图片
imageView.setImageResource(R.drawable.myimage);

实例2:
在id为msg的TextView对象上使用资源id来设置保存在string.xml文件中的文本:

TextView textview = (TextView) findViewById(R.id.msg);
textview.setText(R.string.hello);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值