热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

探索资源访问的学习路径与方法

本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。

Accessing Resource

译者署名:CodeGuy

     译者链接:http://www.cnblogs.com/CodeGuy/

版本:Android 3.2 r1

 

原文

         http://developer.android.com/guide/topics/resources/accessing-resources.html 

 

资源的调用

当你在应用程序中提供了某种资源后(在Providing Resources中有讨论),你就可以通过引用资源ID号来调用相关的资源。所有的资源ID号都在你工程下的R.class文件中定义好,这是由aapt工具自动生成的。

当你的应用程序被编译时,aapt工具就会自动生成R.class 文件,这个文件中包含有res/目录下所有资源的ID号。对于每一种资源类型都有一个R的子类对应着(例如:R.drawable中包含着所有drawable资源),并且对每个特定类型的所有资源都有一个静态的整型数值一一对应(例如:R.drawable.icon)。这个整型数值就是这个特定资源的ID号,你可以通过它来获取你的对应资源。

虽然R.class文件中定义着每种资源的ID号,但是你不应该也不需要到该文件下去查看某个资源的ID号。一个资源的ID号一般的组成如下:

l  资源类型: 每种资源都会被分组到一种特定的资源类型,例如string, drawable,和 layout 。要了解更多关于不同的资源类型,见Resource Types。

l  资源名,同时也是:文件名,不包括拓展名;或者是XML 中android:name属性的值,条件是这个资源是一个简单的值(例如一个字符串)。

调用某个资源有两种方法:

在代码中调用:通过使用R.class 的相应子类中的静态整形数值,例如:

R.string.hello

string 是资源类型,hello是资源名。当你通过这种方式提供资源的ID号时,有很多Android APIs 就可以调用你的相应资源了。详见:在代码中调用资源。

XML中调用:通过特殊的XML语法同样可以对应到你的R.class文件中的相关资源ID,例如:

           @string/hello

string 是资源类型,hello是资源名。你可以在任何需要使用自己提供的资源的地方,通过这种语法在XML中调用。详见:在XML中调用资源。

 

在代码中调用资源

你可以把资源ID号作为方法的参数在代码中调用该资源。例如,你可以设置一个ImageView通过调用setImageResource()方法来使用res/drawable/myimage.png 资源:

    ImageView imageView = (ImageView) findViewById(R.id.myimageview);

        imageView.setImageResource(R.drawable.myimage);

你也可以通过调用Resources中的方法来获取某一特定的资源,通过getResources()方法可以得到Resources的一个实例。

 

语法

这是在代码中引用资源的语法:

 [.]R..

l   资源所在的包名 (当你要应用自己包下的资源时,该字段不需要填写).

l   R类下对应一种特定资源类型的子类.(译者注:如R.String)

l   可以是不包含文件拓展名的资源文件名或者XML元素中android:name 属性的值(仅限简单的值,如字符串)

了解更多关于每种资源类型的信息以及如何引用它们,见Resource Types 。

 

用例

有很多方法可以接受资源的ID号作为参数,你可以通过Resources中的方法来获取某种对应的资源。你可以通过Context.getResources()方法来获得Resources类的一个实例。.

以下是在代码中调用资源的一些例子:

    // 注:通过一个drawable类型的资源给当前屏幕加载背景

    getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

 

    // 注:通过从Resources对象获取的字符串给Activity 设置标题,因为该方法需要一个字符序    列而不是一个资源ID号

    getWindow().setTitle(getResources().getText(R.string.main_title));

 

    // 注:给当前屏幕载入自定义布局

    setContentView(R.layout.main_screen);

 

    // 注:通过从Resources 实例获取的动画来设置一个动画幻灯片

    mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

            R.anim.hyperspace_in));

 

    // 注:通过资源ID号给TextView 类的对象设置显示文字

    TextView msgTextView = (TextView) findViewById(R.id.msg);

    msgTextView.setText(R.string.hello_message);

特别提醒: 你不能自己手动修改R.java 文件,这个文件是在你的工程被编译时由aapt工具自动生成的。所有程序中的修改都会在工程下一次编译时重写。

 

 

在XML中调用资源

你可以通过引用一个存在的资源来给一些XML的属性和元素指定具体的值。你经常会在创建布局文件的时候这样做,给你的部件提供字符串和图像。

例如,如果你添加一个按钮到你的布局中,你应该使用一个字符串资源来指定显示在按钮上的文字:

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/submit" />

(译者注:@string/submit即为你定义好的字符串资源)

 

语法

以下是在XML资源文件中引用资源的语法:

@[:]/

资源所在的包名 (当你要应用自己包下的资源时,该字段不需要填写)

R类下对应一种特定资源类型的子类.(译者注:如R.String)

可以是不包含文件拓展名的资源文件名或者XML元素中android:name 属性的值(仅限简单的值,如字符串)

了解更多关于每种资源类型的信息以及如何引用它们,见Resource Types 。

 

用例

在某些情况下你必须得在XML中使用资源(例如:给部件应用一个drawable图像),但是你可以在XML中任何可以接受简单值的地方使用资源。例如,如果你有如下包含color(颜色)资源和string(字符串)资源的资源文件:

"1.0" encoding="utf-8"?>

   "opaque_red">#f00

   "hello">Hello!

你可以使用这些定义好的资源在以下的布局文件中来设置文本的颜色和内容:

"1.0" encoding="utf-8"?>

"http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:textColor="@color/opaque_red"

    android:text="@string/hello" />

在以下情况下在引用资源时你不需要指定包名,因为这些资源在你自己的当前包中。要引用一个系统资源,你需要在引用时声明资源所在包名。例如:

"1.0" encoding="utf-8"?>

"http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:textColor="@android:color/secondary_text_dark"

    android:text="@string/hello" />

特别提醒:在需要用字符串时,你应该坚持使用字符串资源,因此你的应用程序就可以对其他语言进行本地化。关于创建可替代资源(例如本地化字符串),见Providing Alternative Resources。

你甚至可以可以在XML文件中用资源来创建别名。例如,你可以创建一个drawable类型的资源,这个资源是另一个drawable类型资源的别名:

"1.0" encoding="utf-8"?>

"http://schemas.android.com/apk/res/android"

    android:src="@drawable/other_drawable" />

这个听起来像是多余的介绍,但是在使用可替代资源的时候会很有用。了解更多关于Creating alias resources。

 

引用样式属性

一个样式属性资源允许你在当前应用的主题中引用一个属性的值。引用一个样式属性允许你通过样式化UI元素以匹配当前主题提供的标准变化来定制UI元素的外观,而不是通过提供一个硬编码的值。引用样式属性从基本上说,“使用当前主题中的属性已定义好的样式”。

引用样式属性,其名称的语法与普通的资源格式几乎是等同的,但是取代符号(@),这使用的是问号(?),资源类型部分是可选的。例如:

                    ?[<package_name>:][<resource_type>/]<resource_name>

例如&#xff0c;这个例子将介绍如何引用一个属性来设置文本的颜色以匹配系统主题的“主”文本的颜色&#xff1a;

"text"

    android:layout_width&#61;"fill_parent"

    android:layout_height&#61;"wrap_content"

    android:textColor&#61;"?android:textColorSecondary"

    android:text&#61;"&#64;string/hello_world" />

在这&#xff0c;android:textColor 属性指定了当前主题中一个样式属性的名称。Android 现在使用应用于android:textColorSecondary 样式属性的值作为该部件中android:textColor 的值。因为系统资源工具知道这个属性资源就是环境所期望的&#xff0c;所以你不需要显式地声明是那个类型&#xff08;这个类型可能是&#xff1f;android:attr/textColorSecondary&#xff09;—你可以排除掉attr类型。

 

 

调用平台资源

Android中包含有很多标准的资源&#xff0c;例如styles&#xff08;样式&#xff09;、themes&#xff08;主题&#xff09;、layouts&#xff08;布局&#xff09;等等。要调用这些资源&#xff0c;需要通过android包名来限定你的资源。例如&#xff0c;Android提供了一个布局资源&#xff0c;你可以在ListAdapter中用以罗列表项。&#xff08;译者注&#xff1a;ListAdapter是指列表适配器&#xff09;

        setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray));

在这个例子中&#xff0c;simple_list_item_1是平台为ListView的表项定义的布局资源。你可以使用这个列表布局&#xff0c;而不需要自己创建表项布局。&#xff08;更多关于ListView&#xff0c;参见List View Tutorial&#xff09;。


转:https://www.cnblogs.com/zhoujn/p/4136742.html



推荐阅读
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 本文详细介绍了如何在 Android 开发中高效地管理和使用资源,包括本地资源和系统资源的访问方法。通过实例和代码片段,帮助开发者更好地理解和应用资源管理的最佳实践。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 深入理解Java字符串池机制
    本文详细解析了Java中的字符串池(String Pool)机制,探讨其工作原理、实现方式及其对性能的影响。通过具体的代码示例和分析,帮助读者更好地理解和应用这一重要特性。 ... [详细]
  • 本文探讨了在Java中如何正确地将多个不同的数组插入到ArrayList中,避免所有数组在插入后变得相同的问题。我们将分析代码中的问题,并提供解决方案。 ... [详细]
  • 本文详细介绍了 Java 中 org.geotools.data.shapefile.ShapefileDataStore 类的 getCurrentTypeName() 方法,并提供了多个代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 本文详细介绍了装饰者(Decorator)模式,这是一种动态地为对象添加职责的方法。与传统的继承方式不同,装饰者模式通过组合而非继承来实现功能扩展,从而提供更大的灵活性和可维护性。 ... [详细]
author-avatar
瑩影貓貓05
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有