首页 > 代码库 > android中的资源

android中的资源

一、概括地讲,android中的资源是指非代码部分,比如图片、MP3、字符串、xml文件等。
在一个android工程中,和src源文件夹并列的有两个文件夹,分别叫做res和assets,都是用来保存资源文件的。

不同点:
1.res中的资源可以通过R资源类直接访问。这种方式比较常用。
res中有包含各种子文件夹,对资源进行分类:
anim(xml动画文件)、drawable(图片),layout(布局文件)、menu(菜单)、raw(二进制文件)、values(常量值)、xml(xml文件)。
2.assets中保存的一般是原始的文件,例如mp3文件,android不能直接通过R类直接访问,必须通过AssertManager类以二进制流形式来读取。

二、Android中的资源是在代码中的使用的外部文件。这些文件作为应用程序的一部分,被便衣到应用程序当中。
一般使用资源分为两种方式:
1、在代码中使用context的getResources()方法得到Resource对象,该对象提供了获得各种类型资源的方法。
2、在其他资源中引用资源的一般格式是这样的:
1)、@[包名称:]资源类型/资源名称
2)、R.资源类型.资源名称

A)颜色资源的使用:
1)、首先在values目录下新建color.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="Text_color">#cc0000</color>
<color name="bg_color">#99cc33</color>
<color name="btntext_color">#003399</color>
<color name="btnbg_color">#ffcc00</color>
</resources>

2)、
以按钮为例:
public void test(View view) {
  //颜色
  int i = this.getResources().getColor(R.color.bg_color);//获取颜色值
  Toast.makeText(this, ""+i, 1).show();
  this.getWindow().setBackgroundDrawableResource(R.color.bg_color);

}


B)字符串资源的使用:

以按钮为例:
public void test(View view) {

//字符串
Button btn = (Button) findViewById(R.id.button1);
String str = this.getResources().getString(R.string.welcome);
String str2 = this.getString(R.string.welcome);//等价于上面
btn.setText(str2);


}

在一个android工程中,我们可能会使用到大量的字符串作为提示信息。这些字符串都可以作为字符串资源声明在配置文件中,从而实现程序的可配置性。
在代码中我们使用Context.getString()方法,通过传递资源ID参数来得到该字符串,也可以在其他资源中引用字符串资源,引用格式为“@string/字符串资源名称”。
<resources>
<string name="string_name">string_value</string>
</resources>
--------------------------------------------------------------------------
资源位置 res/values/string.xml
--------------------------------------------------------------------------
获得string方法 Context.getString
--------------------------------------------------------------------------
引用资源方式 java中:R.string.string_name
xml中:@string/string_name
--------------------------------------------------------------------------

C)尺寸(dimens)资源的使用
我们可以使用一些常用的尺寸单位来定义一些文字尺寸、视图组件的宽和高等。尺寸资源是一个数字类型的数据,被定义在res/values/dimens.xml文件中。
--------------------------------------------------------------------------
单位表示 单位名称 说明
--------------------------------------------------------------------------
px 像素 屏幕真实像素
--------------------------------------------------------------------------
in 英寸 基于屏幕的物理英寸
--------------------------------------------------------------------------
dp 和密度无关的像素 相对屏幕物理密度的抽象单位
--------------------------------------------------------------------------
sp 和精度无关的像素 和dp类似
--------------------------------------------------------------------------


--------------------------------------------------------------------------
资源位置 res/values/dimens.xml
--------------------------------------------------------------------------
xml格式 <resources>根元素
<dimen name>value</dimen>
--------------------------------------------------------------------------
获得尺寸资源的方法 getResource().getDimension();
--------------------------------------------------------------------------
引用尺寸资源的格式 java代码中:R.dimen.dimen_name
xml文件中:@dimen/dimen_name
--------------------------------------------------------------------------

以按钮为例:
public void test(View view) {
//尺寸资源
int color1 = getResources().getColor(R.color.btntext_color);
btn.setTextColor(color1);//设置button文本颜色
int color2 = getResources().getColor(R.color.btnbg_color);
btn.setBackgroundColor(color2);//设置button背景颜色

float width = this.getResources().getDimension(R.dimen.button_width);
float height = this.getResources().getDimension(R.dimen.button_height);
btn.setWidth((int)width );
btn.setWidth((int)height );

}

D)使用原始的xml数据
如果项目中使用到了一些原始的xml文件,那么我们可以定义一些xml文件供工程使用。xml文件定义在工程的res/xml目录下。
--------------------------------------------------------------------------
资源位置 res/xml
--------------------------------------------------------------------------
xml文件格式 <resources>根节点<someElement name=value/>
--------------------------------------------------------------------------
获取xml资源的方法 getResources().getXml()
--------------------------------------------------------------------------
引用xml资源的格式 java代码中,R.xml.xml_name
--------------------------------------------------------------------------
以TextView、Button为例:
1)在res目录下新建xml目录,并在xml下建立users.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<user username="ckr" phone="123456"></user>
<user username="whf" phone="456789"></user>
</resources>
2)
public void test(View view) {
//xml资源
String text = "";
XmlResourceParser xrp = this.getResources().getXml(R.xml.users);

while(xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
if(xrp.getEventType() == XmlResourceParser.START_TAG) {
  String tagname = xrp.getName();
  if(tagname.equals("user")) {
  String username = xrp.getAttributeValue(0);
  String phone = xrp.getAttributeValue(1);
  text += "用户姓名:" + username + "; 电话:" + phone + ";\n";
  }

  }
  xrp.next();
}

  TextView tv = (TextView) findViewById(R.id.textview1);
  tv.setText(text);

}


E)使用drawable资源是一些图片资源,主要用来绘制屏幕,通过Resources.getDrawable()方法获得。
drawable资源分为三类:Bitmap File(位图文件),Color Drawable(颜色),Nine-Patch Image(九片图片)。
常用的是位图:android中支持的位图文件有png,jpg和gif。
--------------------------------------------------------------------------
资源位置 res/drawable/filename.jpg
--------------------------------------------------------------------------
获取位图资源的方法 java代码中:R.drawable.filename
xml文件中,@drawable/filename
--------------------------------------------------------------------------

以两个Button为例设置背景图片,首先把图片(图片名不要以数字开头)拷贝到res目录下任意以drawable开头的目录下:
public void test1(View view) {
  Drawable d = this.getResources().getDrawable(R.drawable.a);
  this.getWindow().setBackgroundDrawable(d);
}

public void test2(View view) {
  Drawable d = this.getResources().getDrawable(R.drawable.b);
  this.getWindow().setBackgroundDrawable(d);
}
若是在全局中设置:android:background="@drawable/c

 

android中的资源