`
kurting615
  • 浏览: 94817 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android 资源目录的相关知识 raw drwable values

 
阅读更多

1. 相关文件夹介绍      在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的。assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不 会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件。在后面会介绍如何读取assets文件夹的资源!
    res文件夹里面的多个文件夹的各自介绍(来自网上的Android开发指南中文版内容):

目录 Directory

资源类型 Resource Types

res/anim/

XML 文件,它们被编译进逐帧动画( frame by frame animation )或补间动画( tweened animation )对象

res/drawable/

.png .9.png .jpg 文件,它们被编译进以下的 Drawable 资源子类型中:

要获得这种类型的一个资源,可以使用 Resource.getDrawable(id )

位图文件

9-patches (可变尺寸的位图)

为了获取资源类型,使用 mContext.getResources().getDrawable(R.drawable.imageId)

注意: 放在这里的图像资源可能会被 aapt 工具自动地进行无损压缩优化。比如,一个真彩色但并不需要 256 色的 PNG 可能会被转换为一个带调色板的 8 PNG 。这使得同等质量的图片占用更少的资源。所以我们得意识到这些放在该目录下的二进制图像在生成时可能会发生变化。如果你想读取一个图像位流并转 换成一个位图 (bitmap) ,请把图像文件放在 res/raw/ 目录下 这样可以避免被自动优化。

res/layout/

被编译为屏幕布局(或屏幕的一部分)的 XML 文件。 参见布局声明 (Declaring Layout)

res/values/

可以被编译成很多种类型的资源的 XML 文件。

注意 :
不像其他的
res/ 文件夹,它可以保存任意数量的文件,这些文件保存了要创建资源的描述,而不是资源本身。 XML 元素类型控制这些资源应该放在 R 类的什么地方。


尽管这个文件夹里的文件可以任意命名,不过下面使一些比较典型的文件(文件命名的惯例是将元素类型包含在该名称之中):


array.xml 定义数组


colors.xml 定义 color drawable 颜色的字符串值(color string values) 。使用 Resource.getDrawable() Resources.getColor() 分别获得这些资源。


dimens.xml 定义 尺寸值(dimension value) 。使用 Resources.getDimension() 获得这些资源。


strings.xml 定义 字符串(string) 值。使用 Resources.getString() 或者 Resources.getText() 获取这些资源。 getText() 会保留在 UI 字符串上应用的丰富的文本样式。


styles.xml 定义 样式 (style) 对象。

res/xml/

任意的 XML 文件,在运行时可以通过调用 Resources.getXML() 读取。

res/raw/

直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。 要使用这些资源,可以调用 Resources.openRawResource() ,参数是资源的 ID ,即 R.raw.somefilename



2.自动生成的R class      在项目文件夹的gen文件夹里面有个R.java,我们平常引用的资源主要引用这个类的变量。

    注意:R类是自动生成的,并且它不能被手动修改。当资源发生变动时,它会自动修改。

3. 在代码中使用资源 下面是一个引用资源的语法:
R.resource_type.resource_name    或者 android .R.resource_type.resource_name

其中resource_type 是R的子类,保存资源的一个特定类型。resource_name 是在XML文件定义的资源的name属性 ,或者有其他文件类型为资源定义的文件名(不包含扩展名,这指的是drawable文件夹里面的icon.png类似的文件,name=icon)。 Android 包含了很多标准资源,如屏幕样式和按钮背景。要在代码中引用这些资源,你必须使用android进行限定,如android.R.drawable.button_background

下面是官方给出的一些在代码中使用已编译资源的正确和错误用法的例子:

  • // Load a background for the current screen from a drawable resource.
  • this.getWindow().setBackgroundDrawableResource(R.drawable.my_background_image);
  • // WRONG Sending a string resource reference into a
  • // method that expects a string.
  • this.getWindow().setTitle(R.string.main_title);
  • // RIGHT Need to get the title from the Resources wrapper.
  • this.getWindow().setTitle(Resources.getText(R.string.main_title));
  • // Load a custom layout for the current screen.
  • setContentView(R.layout.main_screen);
  • // Set a slide in animation for a ViewFlipper object.
  • mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  •        R.anim.hyperspace_in));
  • // Set the text on a TextView object.
  • TextView msgTextView = (TextView)findViewByID(R.id.msg);
  • msgTextView.setText(R.string.hello_message);  

   查了SDK Doc,才明白为什么window.setTitle要先Resources.getText,原来setTitle的参数是 CharSequence,Resources.getText(int)返回的是CharSequence;而其他setText的参数有的是 CharSequence,有的是int(这就是Resources变量值)。

同时官方还给了两个使用系统资源的例子:

  • //在屏幕上显示标准应用程序的图标
  • public
    class MyActivity extends Activity {
  • public
    void onStart() {
  •        requestScreenFeatures(FEATURE_BADGE_IMAGE);
  •        super.onStart();
  •        setBadgeResource(android.R.drawable.sym_def_app_icon);
  • }
  • }
  • //应用系统定义的标准"绿色背景"视觉处理
  • public
    class MyActivity extends Activity
  • public
    void onStart() {
  •        super.onStart();
  •        setTheme(android.R.style.Theme_Black);
  • }
  • }


4. xml文件内引用资源 1) 引用自定义的资源
   android:text="@string/hello"
   这里使用"@"前缀引入对一个资源的引用--在@[package:]type/name形式中后面的文本是资源的名称。在这种情况下,我们不需要指定包名,因为我们引用的是我们自己包中的资源。type是xml子节点名,name是xml属性名:

  • <?xml
    version="1.0"
    encoding="utf-8"?>
  • <resources>
  • <string
    name="hello">Hello World, HelloDemo!</string>
  • </resources>


2) 引用系统资源
   android:textColor="@android:color/opaque_red" 指定package: android

3) 引用主题属性
       另外一种资源值允许你引用当前主题中的属性的值。这个属性值只能在样式资源和XML属性中使用;它允许你通过将它们改变为当前主题提供的标准变化来改变UI元素的外观,而不是提供具体的值。
       android:textColor="?android:textDisabledColor"

       注意,这和资源引用非常类似,除了我们使用一个"?"前缀代替了"@"。当你使用这个标记时,你就提供了属性资源的名称,它将会在主题中被查找 --因为资源工具知道需要的属性资源,所以你不需要显示声明这个类型(如果声明,其形式就是?android:attr/android:textDisabledColor) 。除了使用这个资源的标识符来查询主题中的值代替原始的资源,其命名语法和"@"形式一致:?[namespace:]type/name ,这里类型可选。

5. 替换资源(为了可替换的资源和配置) 个人理解这个替换资源主要用于适应多种规格的屏幕,以及国际化。对于这部分的内容,请参考http://androidappdocs.appspot.com/guide/topics/resources/resources-i18n.html ,以后再研究!

6. Color Value 语法:

  • <color
    name="color_name">#color_value</color>

可以保存在res/values/colors.xml (文件名可以任意)。
xml引用:android:textColor="@color/color_name"
Java引用: int color = Resources.getColor(R.color.color_name)

其中#color_value有以下格式(A代表Alpha通道):
#RGB
#ARGB
#RRGGBB
#AARRGGBB

xml示例(声明两个颜色,第一个不透明,第二个透明色):

  • <?xml
    version="1.0"
    encoding="utf-8"?>
  • <resources>
  • <color
    name="opaque_red">#f00</color>
  • <color
    name="translucent_red">#80ff0000</color>
  • </resources>


7.Color Drawables 语法:

  • <drawable
    name="color_name">color_value</drawable>

可以保存在res/values/colors.xml。
xml引用:android:background="@drawable/color_name"
java引用:Drawable redDrawable = Resources.getDrawable(R.drawable.color_name)

color_name和上面的一样。个人认为,一般情况下使用color属性,当需要用到paintDrawable时才使用drawable属性。



xml示例:

  • <?xml
    version="1.0"
    encoding="utf-8"?>
  • <resources>
  • <drawable
    name="opaque_red">#f00</drawable>
  • <drawable
    name="translucent_red">#80ff0000</drawable>
  • </resources>


8. 图片    一般放在res/drawable/ 里面。官方提示png (preferred), jpg (acceptable), gif (discouraged),看来一般使用png格式比较好!
xml引用   @[package:]drawable/some_file
java引用 R.drawable.some_file     引用是不带扩展名

9. dimension 语法:

  • <dimen
    name="dimen_name">dimen_value单位</dimen>

一般保存为res/values/dimen.xml。
度量单位:
px (象素): 屏幕实际的象素,常说的分辨率1024*768pixels,就是横向1024px, 纵向768px,不同设备显示效果相同。

in (英寸): 屏幕的物理尺寸, 每英寸等于2.54厘米。

mm (毫米): 屏幕的物理尺寸。

pt (点)   : 屏幕的物理尺寸。1/72英寸。

dp/dip    : 与密度无关的象素,一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。但dp和px的比例会随着屏幕密度的变化而改变,不同设备有不同的显示效果。

sp    : 与刻度无关的象素,主要用于字体显示best for textsize,作为和文字相关大小单位。

XML: android:textSize="@dimen/some_name"
Java:
float dimen = Resources.getDimen(R.dimen.some_name)

xml示例:

  • <?xml
    version="1.0"
    encoding="utf-8"?>
  • <resources>
  • <dimen
    name="one_pixel">1px</dimen>
  • <dimen
    name="double_density">2dp</dimen>
  • <dimen
    name="sixteen_sp">16sp</dimen>
  • </resources>


10. string 下面是官方给出的正确/错误的例子:

  • //不使用转义符则需要用双引号包住整个string
  • <string
    name="good_example">"This'll work"</string>
  • //使用转义符
  • <string
    name="good_example_2">This\'ll also work</string>
  • //错误
  • <string
    name="bad_example">This won't work!</string>
  • //错误 不可使用html转义字符
  • <string
    name="bad_example_2">XML encodings won&apos;t work either!</string>

对于带格式的string,例如在字符串中某些文字设置颜色,可以使用html标签。对于这类型的string,需要进行某些处理,在xml里面不可以被其他资源引用。官方给了一个例子来对比普通string和带格式string的使用:

  • <?xml
    version="1.0"
    encoding="utf-8"?>
  • <resources>
  • <string
    name="simple_welcome_message">Welcome!</string>
  • <string
    name="styled_welcome_message">We are <b><i>so</i></b> glad to see you.</string>
  • </resources>

Xml代码

  • <TextView
  • android:layout_width="fill_parent"
  • android:layout_height="wrap_content"
  • android:textAlign="center"
  • android:text="@string/simple_welcome_message"/>

Java代码

  • // Assign a styled string resource to a TextView on the current screen.
  • CharSequence str = getString(R.string.styled_welcome_message);
  • TextView tv = (TextView)findViewByID(R.id.text);
  • tv.setText(str);

另外对于带风格/格式的string的处理,就麻烦一点点。官方给了一个例子

  • <?xml
    version="1.0"
    encoding="utf-8"?>
  • <resources>
  •    <string
    name="search_results_resultsTextFormat">%1$d results for &lt;b>&amp;quot;%2$s&amp;quot;&lt;/b></string>
  • </resources>

这里的%1$d是个十进制数字,%2$s是字符串。当我们把某个字符串赋值给%2$s之前,需要用htmlEncode(String) 函数处理那个字符串:

  • //title是我们想赋值给%2$s的字符串
  • String escapedTitle = TextUtil.htmlEncode(title);

然后用String.format() 来实现赋值,接着用fromHtml(String) 得到格式化后的string:

  • String resultsTextFormat = getContext().getResources().getString(R.string.search_results_resultsTextFormat);
  • String resultsText = String.format(resultsTextFormat, count, escapedTitle);
  • CharSequence styledResults = Html.fromHtml(resultsText);


11. assets文件夹资源的访问    assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。
   1. 先在Activity里面调用getAssets() 来获取AssetManager引用。
   2. 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStream。
   3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close()

   4.调用AssetManager.close() 关闭AssetManager。

原文地址:http://www.wuphone.com

分享到:
评论

相关推荐

    Android 使用mediaplayer播放res/raw文件夹中的音乐的实例

    Android 使用mediaplayer播放res/raw文件夹中的音乐的实例 (1)在res文件夹中新建一个文件夹重命名为raw,并且将要播放的音乐放到raw文件夹里面 (2)修改layout目录下的xml布局文件,添加3个按钮空间和一个文本...

    Android Assets文件和Raw文件读取

    在Android应用开发中,Assets和Raw文件夹是两个重要的资源存储区域,用于存放非编译的、原始的数据文件。这两个目录都有各自的用途和特点,开发者可以根据需求选择合适的存储位置。 **Android Assets文件** Assets...

    Androidstudio 播放工程res/raw下的视频 自动循环播放 MyPalylocal.zip

    本教程将详细讲解如何在Android Studio中实现一个从`res/raw`目录下读取视频资源并自动循环播放的功能。通过提供的`MyPalylocal.zip`压缩包文件,你可以直接导入到你的Android Studio项目中,快速实现这个功能。 1....

    android应用播放raw文件中的音乐

    在Android中,RAW文件通常被用作内置的音频资源,因为它们可以直接由系统媒体框架处理,无需额外的解码步骤。而MP3是一种广泛使用的有损音频压缩格式,具有较高的压缩比,能在保持相对高质量的同时减小文件大小。 ...

    Android 之 将RAW资源文件写入SD卡工具类

    总结起来,"Android之将RAW资源文件写入SD卡工具类"涉及到Android的权限管理、资源操作、文件I/O以及工具类设计等多个核心知识点,对Android开发者来说是一个实用且基础的技能。通过理解并实践这些内容,可以提高...

    Android开发之资源目录assets与res/raw的区别分析

    在Android开发中,资源目录是组织和管理应用中各种资源的关键部分。本篇文章将深入探讨两个重要的资源目录:`assets`和`res/raw`,以及它们之间的差异。 首先,`assets`目录主要用于存放应用程序需要在运行时动态...

    Android 使用MediaPlayer播放assets或者raw目录的音频文件

    Android 使用MediaPlayer播放assets或者raw目录的音频文件 https://blog.csdn.net/qq_31939617/article/details/80491552

    android读取raw和assets下资源文件demo

    本示例“android读取raw和assets下资源文件demo”旨在教你如何在Android应用中有效地读取并处理存储在`res/raw`和`assets`目录下的资源文件。 一、res/raw目录 `res/raw`目录是Android资源系统的一部分,它允许...

    自定义视频播放器可播放raw下资源

    本教程将深入讲解如何实现一个能够播放raw资源的`VideoView`,并探讨相关知识点。 ### 1. raw资源目录 在Android项目中,raw资源目录(`res/raw/`)用于存放音频、视频等原始数据文件。这些文件不会经过编译,而是...

    Android的资源与国际化设置

    本文详细介绍了Android中的资源管理与国际化配置的相关知识点。资源是Android应用程序中不可或缺的部分,合理地管理和使用资源不仅可以提升应用的性能,还能让应用更加国际化。通过上述内容的学习,开发者可以更好地...

    三个特殊的资源目录 /res/xml /res/raw 和 /assets

    本文将详细介绍三个特殊的资源目录:/res/xml、/res/raw和/assets,以及它们各自的作用和用法。 首先,我们来看看/res/xml目录。这个目录主要用于存储XML格式的资源文件,这些文件通常用于定义应用中的数据结构或...

    android面试知识汇总

    根据提供的文件信息,我们可以归纳出一系列与Android开发相关的知识点,主要涵盖Android应用程序的基本结构、资源管理等内容。下面将对这些知识点进行详细的阐述。 ### 一、Android 应用程序的基本结构 1. **src/...

    raw源码Android

    3. 非UI相关的资源:对于那些不涉及布局或图形设计,但需要在程序中动态读取的资源,raw目录是很好的存放位置。 三、如何访问raw资源 在Java代码中,可以使用以下方式访问raw资源: ```java Resources res = ...

    Android assets 和 res/raw 区别。读取本地网页,读取文本字体样式,读取视频。

    在Android应用开发中,`assets`和`res/raw`目录都是用来存储应用程序资源的重要部分,但它们之间存在一些关键区别。这两个目录都有各自的用途和访问方式,开发者需要根据实际需求来选择合适的存放位置。 首先,我们...

    播放安卓raw文件夹下语音

    首先,`raw`文件夹是Android项目资源目录中的一个子目录,用于存放原始数据文件,如音频、视频或任何非XML格式的数据。这些文件在编译后会被打包到应用的APK中,通过`R`类可以方便地引用它们。 1. **音频资源的放置...

    复制Raw和Assets的文件到Sdcard/Dcim

    android编程实现: 1、在res目录下建立raw...2、在您的手机相册目录下(即:DCIM目录)新建两文本文件,分别命名为a1.txt和a2.txt,并将raw目录下的a1.txt和assets目录下a2.txt文件的文本内容复制到新建的同名文件中。

    Android代码-文件夹的创建将raw中文件放到SD卡中将assets中文件保存到SD卡中压缩包的解压文件的删除功能.rar

    这个压缩包文件"Android代码-文件夹的创建将raw中文件放到SD卡中将assets中文件保存到SD卡中压缩包的解压文件的删除功能.rar"包含了几个关键的Android文件操作知识点。下面我们将详细探讨这些内容。 首先,让我们从...

    USING GNSS RAW MEASUREMENTS ON ANDROID DEVICES

    1.GNSS BASICS NEEDED ...2.HOW TO ACCESS GNSS RAW MEASUREMENTS USING ANDROID APIS 3.OPPORTUNITIES AND PRACTICAL USE OF GNSS RAW MEASUREMENTS 4.THE NEED AND USE CASES FOR HIGHER ACCURACY IN THE MASS MARKET

Global site tag (gtag.js) - Google Analytics