Android资源使用详解(一)

一、Android资源简介

Android应用资源可分为两大类:(1)无法通过R清单类访问的原生资源,保存在assets目录下;(2)可通过R资源清单类访问的资源,保存在res目录下。其中,res目录下应用资源介绍如下:


目录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文件。


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。

注:res目录下的资源主要通过引用R.jaava的变量实现,R类是自动生成的,不能被手动修改。当资源发生变动时,它会自动修改。为了在Java代码中通过资源清单项目来获取实际资源,可以借助于Android提供的Resource类。Resouces类,即Android资源访问总管家,提供了大量的方法来根据资源清单ID获取实际资源。Resources主要提供了如下两类方法:

>getXxx(int id):根据资源清单ID来获取实际资源,如getDrawable(R.drawable.image01)、getXml(R.xml.data);

>getAssets():获取访问 /assets/目录下资源的AssetManager对象;

注:Resources对象需要由Context调用getResources()方法获取。

二、Android资源使用方法

1.使用颜色资源(res/values/colors.xml )

(1)语法

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

其中#color_value有以下格式(A代表Alpha透明度):

#RGB:只支持0~f这16级颜色来代表颜色

#ARGB

#RRGGBB:只支持00~ff这256级颜色来代表颜色

#AARRGGBB

(2)引用方法

>xml引用:android:textColor="@color/color_name"

>Java引用: int color = Resources.getColor(R.color.color_name)

(3)xml示例

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

2.使用尺寸资源(res/values/dimens.xml)

(1)语法

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

度量单位:

px(象素): 屏幕实际的象素,常说的分辨率1024*768pixels,就是横向1024px, 纵向768px,不同设备显示效果相同。

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

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

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

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

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

(2)引用方法

>XML引用: android:textSize="@dimen/some_name"

>Java引用: float dimen = Resources.getDimen(R.dimen.some_name)

(3)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> 

3.使用字符串资源(res/values/strings.xml)

(1)语法

<string name="string_name">字符串值</string >

(2)引用方法

>xml引用:android:text="@string/app_name"

>Java引用: String string= Resources.getString(R.string.string_name)

(3)xml示例

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="btnName">登录</string >
    <string name="appName">驾校培训一点通</string >
</resources> 

4.使用布尔(bool)资源(res/values/bools.xml)

(1)语法

<bool name="flag">0/1</bool >

(2)引用方法

>xml引用:android:text="@bool /flag"

>Java引用: String string= Resources.getString(R.bool .flag)

(3)xml示例

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool  name="flag1">0</bool >
    <bool name="btnStatus">1</bool >
</resources>

注:类似的还有Integer资源等


5.使用数组(Array)资源(res/values/arrays.xml)

由于Android中并不推荐在Java代码中定义数组,我们可以通过资源文件来定义数组资源。Android采用位于/res/values/目录下的arrays.xml文件来定义数组,定义数组时XML资源文件的根元素也是<resource.../>元素,该元素内可包含如下三种子元素:

◆<array../>子元素:定义普通类型的数组,例如Drawable数组(R.drawable.image01);

◆<string-array.../>子元素:定义字符串数组;

◆<integer-array.../>子元素:定义整数数组;

(1)引用方法

>xml引用:android:entries =  "@array/array_name"

>Java引用:R.array.array_name

另外为了能在Java程序中访问到实际的数组,Resources类提供了如下方法:

◇String[] getStringArray(int id);根据资源文件中字符串数组资源的名称来获取实际的字符串数组

◇int[] getIntArray(int id);根据资源文件中整型数组资源的名称来获取实际的整型数组

◇TypedArray obtainTypedArray(int id);根据资源文件中的普通数组资源的名称来获取实际的普通数组

注:TypedArray代表一个通用类型的数组,该类提供了getXxx(int index)方法来获取指定索引处的数组元素。

(2)xml示例

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--定义一个Drawable数组-->
    <array name="plain_arr">
            <item>@color/c1</item>
            <item>@color/c2</item>
    </array>

    <!--定义一个String数组-->
    <string-array name="string_arr">
            <item>@string/s1</item>
            <item>林俊杰</item>
    </string-array>

    <!--定义一个整数数组-->
    <integer-array name="integer_arr">
            <item>@dimen /d1</item>
            <item>12</item>
    </integer-array>
</resources>

使用方法:

String[] strings=getResources().getStringArray(R.array.string_arr);

int[] numbers=getResources().getIntArray(R.array.integer_arr);

TypedArray icons = getResources().obtainTypedArray(R.array.plain_arr);

然后使用icons.getDrawable(position)获得资源即可。


6.使用菜单(menu)资源

在Android项目开发中,Android推荐使用XML资源文件来定义菜单。Android菜单资源文件存放在/res/menu目录下,根元素为<menu.../>元素且无需指定任何属性,该根元素包含<item.../>子元素。

(1)引用方法

>xml引用:android:entries =  "@menu/menu_name"

>Java引用:R.menu.menu_name

(2)xml示例

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <item
  4. android:id="@+id/close"
  5. android:icon="@drawable/ic_launcher"
  6. android:orderInCategory="3"
  7. android:title="Close"/>
  8. <item
  9. android:id="@+id/no_icon"
  10. android:orderInCategory="2"
  11. android:title="Sans Icon"/>
  12. <item
  13. android:id="@+id/disabled"
  14. android:enabled="true"
  15. android:orderInCategory="4"
  16. android:title="Disabled"/>
  17. <!-- orderInCategory表示的是item的排序-->
  18. <group
  19. android:id="@+id/other_stuff"
  20. android:menuCategory="secondary"
  21. android:visible="true" >
  22. <item
  23. android:id="@+id/later"
  24. android:orderInCategory="0"
  25. android:title="2nd-To-Last"/>
  26. <item
  27. android:id="@+id/last"
  28. android:orderInCategory="1"
  29. android:title="Last"/>
  30. </group>
  31. <!--表示的是二级菜单-->
  32. <item
  33. android:id="@+id/submenu"
  34. android:orderInCategory="3"
  35. android:title="A Submenu">
  36. <menu>
  37. <item
  38. android:id="@+id/non_ghost"
  39. android:alphabeticShortcut="n"
  40. android:title="Non-Ghost"
  41. android:visible="true"/>
  42. <item
  43. android:id="@+id/ghost"
  44. android:alphabeticShortcut="g"
  45. android:title="A Ghost"
  46. android:visible="true"/>
  47. </menu>
  48. </item>
  49. </menu>

7.样式(Style)与主题(Theme)资源

(1)样式(Style)资源使用

Android的样式资源文件放在/res/values目录下,样式资源文件的根元素是<resources.../>元素,该元素内可包含多个<style.../>子元素,每个<style.../>元素定义一个样式。<style.../>元素指定如下两个属性:

>name:指定样式的名称;

>parent:指定该样式所继承的父样式。当继承某个负样式时,该样式将会获得父样式中定义的全部格式。

注:<style.../>元素内可包含多个<item.../>子元素,每个<item.../>子元素定义一个格式项。

XML示例如下:

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

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<!-- 定义一个样式,指定字体大小、字体颜色 -->

<style name="style1">

<item name="android:textSize">20sp</item>

<item name="android:padding">8dp</item>

</style>

<!-- 定义一个样式,继承前一个颜色样式 -->

<style name="style2" parent="@style/style1">

<item name="android:background">#000</item>

<item name="android:padding">8dp</item>

</style>

</resources>

然后,再在布局文件中通过@style/style_name使用自定义样式即可。

(2)主题(Theme)资源使用

主题资源的定义方式与样式类似,XML文件也包括<resource../>、<style../>、<item../>等元素。主题与样式的区别主要在于:

>主题不能作用于单个的View组件,而是对整个应用中的所有Activity起作用或者对指定的Activity起作用;

>主题定义的格式应该是改变窗口外观的格式,例如窗口标题、窗口边框等;

实例:给所有窗口添加边框、背景

◆/res/values/my_themeStyle.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="theme1">
        <item name="android:windowNoTitle">true</item>    //不显示窗口标题
        <item name="android:windowFullscreen">true</item> //窗口全屏
        <item name="android:windowFrame">@drawable/window_border<item>//窗口边框样式
        <item name="android:windowBackground">#000</item> //窗口背景
    </style>
</resources>  

其中,窗口边框样式/res/drawable/window_border.xml

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

<shape xmlns:android="http://schemas.android.com/apk/res/android"

android:shape="rectangle">

<!-- 设置四周的内边距 -->

<padding

android:left="7dp"

android:top="7dp"

android:right="7dp"

android:bottom="7dp"/>

<!-- 设置填充颜色 -->

<solid

android:color="#0fff"/>

<!-- 设置边框 -->

<stroke

android:width="10dp"

android:color="#f00"  />

</shape>

◆为应用或指定Activity指定主题样式

应用:setTheme(R.style.theme1)或者AndroidManifest.xml中的<application android:theme="@style/theme1"...>

指定Activity:<Activity android:android:theme="@style/theme1".....>

参考:http://www.cnblogs.com/luxiaofeng54/archive/2011/03/15/1984617.html

时间: 2024-11-07 03:50:49

Android资源使用详解(一)的相关文章

Android资源使用详解(二)

Drawable资源通常保存在/res/drawable目录,可分为图片资源(*.png.*.jpg.*.gif等格式).XML资源等,Android SDK会在编译应用中自动加载该图片资源,并在R资源清单类中生成该资源的索引.使用方法如下: Java代码中:[<package_name>.]R.drawable.<file_name> xml代码中:[<package_name>.]@drawable/<file_name> 为了在程序中获得实际的Draw

Android本地化资源目录详解

我们可以设想,有两个不同分辨率的手机(320*480和480*800)要使用一些图像资源,为了使图像不失真,就需要为不同分辨率的手机指定不同的图像,为此就需要建立不同的资源目录. 在res目录中建立了3个图像资源目录:drawable.drawable-hdpi和drawable-mdpi.其中drawable为默认图像的图像资源目录,drawable-hdpi保存了在高屏幕密度(指480*800或相似的分辨率)情况系使用的图像资源,drawable-mdpi保存了中屏幕密度(值320*480或

android屏幕适配详解

android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要使用绝对布局 2.尽量使用match_parent 而不是fill_parent . 3.能够使用权重的地方尽量使用权重(android:layout_weight) 4.如果是纯色背景,尽量使用android的shape 自定义. 5.如果需要在特定分辨率下适配,可以在res目录上新建layout

Android 四大组件 详解

[置顶] Android四大组件详解 分类: Android四大组件2013-02-09 16:23 19411人阅读 评论(13) 收藏 举报 Android开发 注:本文主要来自网易的一个博主的文章,经过阅读,总结,故留下文章在此 Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity : 应用程序中,一个

Android SlidingMenu 使用详解

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/36677279 很多APP都有侧滑菜单的功能,部分APP左右都是侧滑菜单~SlidingMenu 这个开源项目可以很好帮助我们实现侧滑功能,如果对SlidingMenu 还不是很了解的童鞋,可以参考下本篇博客.将侧滑菜单引入项目的方式很多中,本博客先通过例子介绍各种引入方式,然后给大家展示个实例:主布局ViewPager,左右各一个侧滑菜单的用法,差不多已经能满足大部分应用的需求

Android相机开发详解(一)

Android相机开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) Android相机开发能够实现打开相机,前后摄像头切换,摄像预览,保存图片,浏览已拍照图片等相机功能. Android相机开发详解(一)主要实现打开相机,摄像预览,前后置摄像头切换,保存图片等四个功能. Android相机开发详解(二)主要实现翻页浏览相片,触控缩放浏览图片,删除图片,发送图片等四个功能. Andro

Android AIDL使用详解

1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口 icp:interprocess communication :内部进程通信 2.既然aidl可以定义并实现进程通信,那么我们怎么使用它呢?文档/android-sdk/docs/guide/developing/tools/aidl.html中对步骤作了详细描述: --1.Create

Android平台调用WebService详解

上篇文章已经对Web Service及其相关知识进行了介绍(Android开发之WebService介绍 ),相信有的朋友已经忍耐不住想试试在Android应用中调用Web Service.本文将通过一个简单的示例讲解和演示Android平台的Web Service开发. Ksoap2-android简介       在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包,主要用于资源受限制的Java环境如Applet

android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助. android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR. 1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时