android各种资源详解

1、字符数组

字符串数组资源由<string-array>标签定义,在<string-array>标签中包含的若干<item>标签表示数组元素。

例如

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

<resources>

<string-array  name="planets_array">

<item>Mercury</item>

<item>Values</item>

<item>Earth</item>

<item>Mars</item>

</string-array>

</resources>

在代码中引用字符串数组的代码如下:

String[] plans=getResources().getStringArray(R.array.planets_array);

注意:不能用字符串数据资源设置接收字符串的属性,例如,android:text,因为这样系统会直接将字符串数组资源的ID值

当做文本传给该属性,应该用字符串资源设置那些可以接收字符串数组资源的属性。

2、复数字符串

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

<resources>

<plurals

name="plural_name">

<item_plurals

quantity=["zero" | "one" | "two" | "few" | "many" | "other"]

>text_string</item>

</plurals>

</resources>

zero           语言需要对数字0进行特殊处理。(比如阿拉伯语)

one      语言需要对类似1的数字进行特殊处理。(比如英语和其它大多数语言里的1;在俄语里,任何以1结尾但不以11结尾的数也属于此类型。)

two           语言需要对类似2的数字进行特殊处理。(比如威尔士语)

few            语言需要对较小数字进行特殊处理(比如捷克语里的2、3、4;或者波兰语里以2、3、4结尾但不是12、13、14的数。)

many      语言需要对较大数字进行特殊处理(比如马耳他语里以11-99结尾的数)

other          语言不需要对数字进行特殊处理。

使用复数字符串资源可以使用getQuantityString方法,该方法有两个重载形式,它们的原型如下:

public String getQuantityString(int id, int quantity) throws NotFoundException;

public String getQuantityString(int id, int quantity, Object... formatArgs)throws NotFoundException;

其中id参数表示复数字符串资源的ID,quantity参数表示具体的数字,例如,1对应quantity属性值的"one",2对应quantity属性值的"two"。formatArgs参数表示复数字符串资源的参数。

//  引用数字为1的复数字符串资源  setTitle(getResources().getQuantityString(

R.plurals.numberOfSongsAvailable, 1));

//  引用数字为other的复数字符串资源,调用时向other资源传递一个参数值(20)

setTitle(getResources().getQuantityString(

R.plurals.numberOfSongsAvailable, 20, 20));

3、在字符串中使用引号

字符串中的值虽然可以任意指定,但遇到特殊符号时,如双引号、单引号,就需要采取特殊的方法进行处理

如果是(‘),可以使用转义符(\)或使用双引号(")将整个字符串括起来。如果是双引号,可以在双引号前使用转义符(\)。例如:

<!-- 输出This‘ll work -->

<string name="str1">"This‘ll work"</string>

<!--输出This ‘ll also work  -->

<string name="str2">This \‘ll also work</string>

<!-- 输出"apple" -->

<string name="str3">\"apple\"</string>

4、用占位符格式化字符串

String.format(String,Object..)方法可以格式化带占位符的字符串。因此,只要在字符串资源中插入占位符就可以

是用String.format方法格式化字符串资源。format方法要求占位符用%1、%2、。。。%n表示。其中第n个占位符于format

方法的n+1个参数值对应。

带占位符的字符串资源

<!-- $s 表示该占位符要求传入字符串, $d 表示该占位符要求传入整数  %后面的整数表示第几个占位符-->

<string name="welcome">hello, %1$s! youhanv %2$d/%3$d new messages</string>

格式化字符串资源的java代码

String textString=String.format(getResources().getString(R.string.welcome), "hello",18,20);

5、用HTML标签格式化字符串资源

字符串资源支持一些HTML标签,因此,可以直接在字符串资源中使用这些HTML标签格式化字符串。

用HTMl标签格式化的字符串资源

<string name="welcome">Welcome to <b>Android<b/></string>

字符串资源支持如下的HTML标签

<b>:粗体字

<i>:斜体字

<u>:带下划线的文字

有时需要同时使用HTML标签和占位符格式化字符串,但使用String.format方法格式字符串,会忽略字符串中所有的HTML标签。为了是

format方法可以格式化带HTMl标签的字符,需要使用Html.fromHTML方法先处理一下字符串。例如

<string name="welcome">hello, %1$s! You have $lt; <b> %2d new messages$lt;</b></string>

注意:由于需要使用Html.formatHTML方法处理字符串,因此,HTMl标签中的"<"需要使用"&lt;" 表示(">"可以直接使用)

使用字符串资源的Java代码

String textString=String.format(getResources().getString(R.string.welcome), "hello",18,20);

CharSequence styledText=Html.fromHtml(text);

如果format 的某个参数值包含HTML的特殊字符串,如"<","&",可以使用下面的代码先格式化这个参数值,在使用format方法格式化字符串

//username中包含HTML的特殊字符

String escapedUsername=TextUtil.htmlEncode()username;

String textString=String.format(getResources().getString(R.string.welcome),escapedUsername,malCount);

CharSequence styledText=Html.fromHtml(text);

6、值资源

所有放到res/values目录中的资源都属于值资源(可以存放在任意的XML文件中)。

1、整数资源

整数资源使用<integer>标签设置,代码如下:

<integer name="height">75</integer>

<integer name="width">75</integer>

在资源文件中使用的代码

<TextView

android:id="@+id/text"

android:layout_width="@integer/height"

android:layout_height="@integer/width"

android:layout_alignParentBottom="true"

android:text="@string/str3"

/>

下面是引用整数资源的java代码

int width=getResources.getInteger(R.integer.width);

2、尺寸资源

尺寸资源是由一系列的浮点数组成的资源,这些资源需要在res/values目录的资源文件中定义,<dimen>标签用来定义尺寸资源。

<dimen name="size_px">50px</dimen>

<dimen name="size_in">1.5in</dimen>

<dimen name="size_sp">10sp</dimen>

使用java代码获取尺寸资源,这些方法会根据相应的尺寸单位返回与其对应的像素值

float size1=getResources().getDimension(R.dimen.size_in);

如果想直接获取尺寸大小(不转化成像素),可以使用下面的代码

TypedValue outValue=new TypedValue();

//getValue方法的第3个参数如果为true,表示即使资源值引用了另外的资源,系统会通过递归的方法获取最终的资源

getResources().getValue(R.dimen.size_px, outValue, true);

//由于getValue方法并没有直接返回尺寸资源的值,所以需要使用complexToFloat方法进行转换

float value=TypedValue.complexToFloat(outValue.data);

3、颜色资源

颜色资源用于指定颜色值,使用<color>标签设置,代码如下

<color name="red">#f00</color>

java代码获取代码

int color=getResources().getColor(R.color.red);

4、ID资源

ID资源实际上就是android:id属性的值,使用<item>标签设置,代码如下:

<item type="id" name="button_ok"></item>

<item type="id" name="dialog_exit"></item>

资源文件中引用ID资源的代码如下:

<Button android:id="@id/button_ok"/>

通常在设置android:id属性时都会在“@”和“id”之间加一个“+”,代码如下:

<Button android:id="@+id/button_ok"/>

这个“+”的含义是如果ID资源不存在,系统会自动创建一个ID资源,如果ID资源存在,系统会忽略“+”。

通过这种策略避免在设置android:id属性值时都要定义ID资源的繁琐方式。

注意:尽管所有可接受ID资源的属性都可以使用“+”,但建议只在android:id属性值使用“+".这是因为其他的属性需要使用已经存在的ID

资源对应的控件,如果使用”+“,当指定的ID资源不存在是系统会自动创建一个ID资源,这样尽管ID资源存在了,但并未对应任何的控件,可能

会使程序抛出异常,也不会是程序达到预先设定的效果。例如,<RelativeLayout>标签的android:layout_marginLeft属性就必须设置一个

已经与某个控件绑定的ID资源。

5、整数数组资源

整数数组资源用于存储一组整数,用<integer-array>标签设置,代码如下:

<integer-array name="bits">

<item>4</item>

<item>5</item>

<item>6</item>

<item>7</item>

</integer-array>

引用整数数组资源的java代码如下:

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

6、类型数组资源

类型数组资源可以将其中资源作为数组存储,因此也可以称为资源数组资源。

<array name="icons">

<item>@drawable/home</item>

</array>

<array name="colos">

<item>#ffff0000</item>

</array>

引用类型数组资源的java代码如下:

TypeArray drawable=getResources().obtainTypedArray(R.array.icons);

Drawable drawable=icons.getDrawable(0);

TypeArray color=getResources().obtainTypedArray(R.array.colos);

int color=color.getColor(0,0)

时间: 2024-08-08 14:07:49

android各种资源详解的相关文章

Android关键资源详解

Android层次结构中,资源扮演着重要的角色,资源是绑定到可执行程序的文件(例如音乐文件)或值(例如对话框标题).常用的资源实例包括字符串.颜色.布局文件等.例如不需要将字符串硬编码到应用程序中,可以使用它们的ID,这种间接性使你无需要改变源代码就能够更改字符串资源的文本. Android中主要通过两种文件类型来支持资源:XML文件和原始文件(包括图像.音频和视频).甚至在XML文件内部有时也能看到资源被定义为XML文件内部的值(如字符串),有时XML文件整体就是一个资源(如布局资源). XM

Android 动画资源详解

属性动画: 使对象的属性值在一定时间间隔内变化到某一个值. http://developer.android.com/guide/topics/resources/animation-resource.html#Property 资源目录:rec\animator <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially" >

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啰嗦的意思,平时