为什么要将资源独立出来

编写良好的代码往往在程序中调用它的资源,而不是直接将其写入代码中,这样做的好处是:

  1. 将应用程序资源存储于某个特定的位置更有利于管理他们,而且使得代码更容易阅读与管理。
  2. 类似字符串这样的外部资源能使得应用程序更容易根据不同的地区和语言来进行本地化处理。
  3. 不同的资源对于不同的设备而言是很必要的。

资源在Android工程资源目录中的存储方式


字符串资源

  • 基本字符串
<string name="header">Android简介</string>
<string name="content">Android是由安迪.鲁宾开发出来的一款移动操作系统,而后由Google公司收购</string>
<string name="footer">由xiaohai.lin编辑</string>

当字符串包含撇号或单引号的时候需要进行转义或者使用双引号括起来,如果包含双引号那么则需使用转义符号来转义。
对于字符串资源,可以为其添加3种具有HTML风格的属性,分别是加粗,斜体和下划线,可以使用

<b>,<i><u>

标记来指定这些风格。

  • 格式化字符串资源
<string name="demo_string3">The match is %1$d : %2$d Jimmy &lt;b&gt;%3$s&lt;/b&gt; the game </string>
tv = (TextView) findViewById(R.id.stringWithFormat);
String matchInfo = getResources().getString(R.string.demo_string3);
String escapeStr = TextUtils.htmlEncode("Won");
String finalStr = String.format(matchInfo, 5,2,escapeStr);
CharSequence result = Html.fromHtml(finalStr);
tv.setText(result);
  • 复数字符串资源
<plurals name = "unicorn">
<item quantity = "one">One item </item>
<item quantity = "other">%d items </item>
</plurals>
String unicon = getResources().getQuantityString(R.plurals.unicorn,unicorn,unicorn);

在XML中使用

@string/content

在java代码中

String strings = getResources().getString(R.string.content)返回的是字符串内容本身,所有的HTML格式均被删除
CharSequence texts = getResources().getText(R.string.content);返回的是带格式的内容

颜色资源

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#ff0000</color>
<color name="green">#00ff00</color>
<color name="blue">#0000ff</color>
注意#aarrggbb中的aa表示透明度0表示完全透明,F表示完全不透明
</resources>

在XML中使用

color/red

在java代码中

getResources().getColor(R.color.color1)

尺寸资源

<resources>
<dimen name="header">20px</dimen>
<dimen name="content">18px</dimen>
<dimen name="footer">10px</dimen>
</resources>

在XML中使用

"@dimen/header“

在java代码中

getResources().getDimension(R.dimen.content)

px: 对应屏幕上的每一个点
In:每英寸等于2.54cm
Pt: 磅 1/72厘米
Dp:一种基于屏幕密度的抽象单位,每英寸160点的显示器,1dp=1px
Sp:主要处理字体大小,可以根据用户字体大小首选项进行缩放
mm: 毫米

数组资源

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="contract">
<item>项目1</item>
<item>项目2</item>
</string-array>
</resources>

在XML中使用

android:entries="@array/contract“

在java代码中

getResources().getStringArray(R.array.contract)

共有三类

<array>普通的数组
<string-array>字符数组
<integer-array>整形数组

图片资源

在Java代码中使用:

ImageView.setImageResources(R.drawable.head);

XML代码中使用

@drawable/head

样式资源

在res目录下的value下的style.xml下建立如下资源

<style name="basic">
<item name="android:textSize">58px</item>
<item name="android:textColor">#f60</item>
</style>
<style name="textStyle" parent="basic">
<item name="android:gravity">center</item>
</style>

使用如下:

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world"
style="@style/textStyle"/>

布局资源

Java代码中:

R.layout.文件名

XML代码中:

@layout/文件名

主题资源

主题资源与样式资源类似,定义主题资源的资源文件也是保存在res/values目录下,其根元素同样是在该标记中也是使用

Contents
  1. 1. 为什么要将资源独立出来
  2. 2. 资源在Android工程资源目录中的存储方式
  3. 3. 字符串资源
  4. 4. 颜色资源
  5. 5. 尺寸资源
  6. 6. 数组资源
  7. 7. 图片资源
  8. 8. 样式资源
  9. 9. 布局资源
  10. 10. 主题资源