`
wenzongliang
  • 浏览: 452074 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

android values 资源说明

 
阅读更多

在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译。

asset/(相当于用户目录例如放txt文件)

res/

anim(动画)

drawable(selector,sharp)

layout

menu(菜单)

xml(普通xml)

values

 

 

 

 

 

 

value 类型

string

integer

bool

array

---

color

drawable

attr

ids(定义一个id在R文件中生成一个对应id,可以直接引用)

plurals

-----------------

dimen

style

 

string 说明

string资源可以带有输入,可以带有html格式



 

 

复数Plurals。这对中文而言没有什么意义,但是在英文中,有There is one egg. 和There are 5 eggs. 的区别。需要在信息表达方面进行区分对待,plurals就是针对此进行处理。

 



 

 

处理任意的XML文件

自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象。下面是xml文件的例子:

<rootname="tom"><--也可以是<root>,本次采用带参数的方式作为实验--> 
   <leaf>Hello from an elementtest.</leaf>
   <leaf>Hello World!</leaf>
   <cornersradius="13dp"/>
</root>

通过javacode对xml文件进行逐层解析,代码如下:

try{  //防止在解析过程中,因xml文件书写或解析分析不匹配等原因造成的异常
   XmlPullParser xpp =getResources().getXml(R.xml.rt_test);
 //获取XML资源的对象
            
   int eventType = xpp.next();  //相当于xpp.next(); int eventType =xpp.getEventType(),而next()直接返回类型
   while(eventType != XmlPullParser.END_DOCUMENT){ //根据类型不同进行相应处理
       switch(eventType){ 
       caseXmlPullParser.START_DOCUMENT
           Log.d("xml","***************start****************"); 
           break; 
       caseXmlPullParser.START_TAG
           int count = xpp.getAttributeCount(); 
           Log.d("xml","starttap: " + xpp.getName() + "attribute number " +count); 
           for(int i = 0 ; i < count ; i ++){ //此处处理<xxxx yy=zz….>中yy=zz的参数部分,要注意xml是允许这样编写,除非确定自定义的XML的schema中不纯正此方式
               Log.d("xml","    Attribute " + i + " : " + xpp.getAttributeName(i) +" = " +xpp.getAttributeValue(i)); 
           } 
           break; 
       caseXmlPullParser.END_TAG
           Log.d("xml","endtap: " + xpp.getName()); 
           break; 
       case XmlPullParser.TEXT
           Log.d("xml"," text: " + xpp.getText()); 
           break; 
       default: 
           Log.d("xml","eventType= " + eventType); 
           break; 
       } 
      eventType = xpp.next(); 
   } 
   Log.d("xml","***************end****************"); 
}catch(Throwable t){ 
   Log.e("xml","testXMLget exception t : " +t.getMessage()); 
}

更详细的代码说明可以阅读Android学习笔记(三八):资源resource(上)、XML解析(XmlPullParser)。运行结果如下:

处理Raw资源

raw资源位于res/raw目录下,和其他的资源不同,不经过编译就打包到应用的apk中。raw文件可以为音频、视频等任何格式的文件。读取是和java的文件读取一直,不同的是通过R.raw.filename来获取。

protected void testRaw(){ 
   try{ //io读取,对异常的获取
       InputStream is =getResources().openRawResource(R.raw.rt_test); //获取raw资源
       readTextFile(is);
       is.close();
   }catch(Throwable t){
       Log.e("raw","testRaw error : " + t.getMessage());
    }
}

private void readTextFile(InputStream is) throwsIOException{
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int ch =is.read();
    while(ch !=-1){
       baos.write(ch);
       ch =is.read();           
    }
   Log.d("raw",baos.toString());
   //Log.d("raw",newString(baos.toByteArray(),"GB2312"));
}

处理Asset资源

asset资源是位于/assets目录下,该目录于/res目录平衡,即不在/res下面,所以不在R.java中形成相关的ID,不能通过ID来获取asset资源。/assets是应用的用户目录,类似linux用户中的~/目录。我们在改目录下放置文本文件tv_test.txt。下面是读取的代码。

protected void testAssets(){ 
    try{
       AssetManager am = getAssets(); //通过AssetManager来获取/assets目录下的文件
       InputStream is =am.open("vt_test.txt");//不使用ID,直接通过文件名来获取,又如”subbir/vt_test2.txt”
       readTextFile(is);
       is.close();
   }catch(Throwable t){
       Log.e("asset","testAsset Resource error : " + t.getMessage());
    }
}

注意,getResource()和getAsset()都是activity下的方法,如activity.getResource()。

资源和配置的变更

资源有助于本地化,包括适配语言,横/竖屏、屏尺寸等等。在res中出了之前介绍的default文件夹,还可以有基于条件适配的文件夹,存放相同名字的XML文件,这些文件夹在R.java中具有相同的ID。Android根据实际情况,选择合适文件夹中的XML描述。例如:

\res\layout\main_layout.xml
\res\layout-port\main_layout.xml
\res\layout-land\main_layout.xml

当设备为竖屏时,则优先选择layout-port,其次为layout。带有条件的文件夹成为alternate resources,所带的条件,如上例子中的-port成为configuration qualifiers。这种带适配条件文件夹的格式为:缺省资源文件夹名-条件1[-条件2[-条件N...]]。具体的configuration qualifiers可以在:http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources中查找,下面列举部分:

mccAAA: AAA is the mobile country code.
mncAAA: AAA is the carrier/network code.
en-rUS: Language and region.
sw<N>dp, w<N>dp, h<N>dp: Smallest width, available width, available height (since API 13).
small, normal, large, xlarge: Screen size.
long, notlong: Screen type.
port, land: Portrait or landscape.
car, desk: Type of docking.
night, notnight: Night or day.
ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi: Screen density.
notouch, stylus, finger: Kind of screen.
keysexposed, keyssoft, keyshidden: Kind of keyboard.
nokeys, qwerty, 12key: Number of keys.
navexposed, navhidden: Navigation keys hidden or exposed.
nonav, dpad, trackball, wheel: Type of navigation device.
v3, v4, v7: API level.

这些条件是有优先级别的,在缺省资源文件夹名-条件1[-条件2[-条件N...]]中条件1的优先级别必须高于条件2的优先级别,同理条件2的优先级别必须高于条件3的优先级别。条件级别的高低是Android预先设定的,上面列举的各条件的优先级别就是从高到低。例如有以下的几个文件夹:/res/values,/res/values-en,/res/values-en-rUS,/res/values-port,/res/values-en-port。对于语言为美国英语(en-rUS)的竖屏情况下,Android通过ID查找资源的顺序为/res/values-en-rUS,/res/values-en-port,/res/values-en,/res/values-port,/res/values。

  • 大小: 12.5 KB
  • 大小: 24.7 KB
分享到:
评论

相关推荐

    AndroidAPP开发入门教程.pdf

    知识点二: Android 项目结构和文件说明 * res/layout/main.xml:App 主窗体布局文件,定义应用程序的界面布局 * res/values/strings.xml:字符串资源文件,存放应用程序调用的各种字符串 * src/...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    android studio实现安卓移动开发课程设计通讯录管理系统源代码.zip

    使用说明: 使用android studio 导入项目,修改文件定制自己想要的布局风格以及功能 如果导入项目后报错,哪么自己先创建好项目,将下载好的项目的代码进行复制 Phone、Datebase、ListAdapter、为单独的类,不是...

    Android插件框架Android-Plugin-Framework.zip

    具体public.xml如何编写,可参考PluginMain/res/values/public.xml 以及 PluginTest/res/values/public.xml俩个文件,它们是分别用来固定宿主程序和插件程序资源id的范围的。 4、插件apk的Context 构造一个...

    appcompat V7 V4 可导入工程 可编译包

    却将values-v23 复制到appcompat\res,那么会提示部分资源不存在,除非你选用v23的编译工具。 导入工程的方法见: http://blog.csdn.net/judyge/article/details/49228579 ======================================...

    Android-CU:CU是清除未使用的缩写,本项目主要用于清理Android工程中无用的代码文件和资源文件

    Android-CU使用说明 简介 CU是清除未使用的缩写,本项目主要用于清理Android工程中无用的代码文件和资源文件。 CURes.java清理资源文件,内置ADT SDK自带的Lint工具,相对路径为\ sdk \ tools \ lint.bat。 CUSrc....

    MapView的使用

    在论坛里看到一篇 "MapView和其它控件一起显示 " 的帖子, 那是很老的一篇帖子了, 很多朋友都说无法在android SDK 1.0上...= 0)用来处理用户输入为空的情况,为空时数据不会传递到另外一个activity中去,节省资源。 ...

    APKTool批处理版l

    就在res目录里面建立对应的语言资源文件夹(简体中文资源的目录名是values-zh-rCN,繁体中文是values-zh-rTW),将英文资源values里面的arrays.xml和strings.xml复制到新目录里面进行汉化,让Android系统自己识别...

    android_oauth2_webview

    更新xml资源在res/values/feedly_strings.xml ,有一些必须重写的变量: feedly_client_id , feedly_client_secret , feedly_redirect_uri :当您注册供稿开发帐户feedly_api_url时提供给您:这是在指定的api url...

    【05-面向对象(下)】

    说明 对应的Lambda表达式 引用类方法 类名::类方法 函数式接口中被实现方法的全部参数传给该类方法作为参数。 (a,b,...) -&gt; 类名.类方法(a,b, ...) 引用特定对象的实例方法 特定对象::实例方法 函数式接口中...

Global site tag (gtag.js) - Google Analytics