已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
详见:/franksunny/article/details/6873936运用Android SDK进行UI开发时,虽然也可以使用纯代码来完成,但是那种方法对我这种刚学习Android对API还不懂的人来说,能进行类似VB、MFC一样图形化开发自然是最合适不过的。幸好Android也提供了这种方式,在Android工程文件中专门有个res目录用于存放资源,该目录下的资源可以进行可视化的编辑,编写好的资源通过AAPT(Android AssetPackaging Tool)工具自动生成gen目录下的R.java资源索引文件,之后在Java代码和XML资源文件中就可以利用索引来调用资源了。Android提供了如此便利的资源架构,要想使用它,还是要对他有深入的了解才可以,以下就这阵子对Android资源的学习进行小结来回顾和整理几个问题Android资源目录结构问题?Android资源支持哪些类型资源,他们具体的语法和使用规则?Android资源目录结构Android资源除了assets目录是与res同级外,其它资源均被放在res/目录下面,该目录下面的资源文件夹并不是随意命名的,需要遵循严格的规范,否则编译生成R.java过程中会报类似“invalidresource directory name *”的错误提示,并且导致R.java自动生成失败。常用的缺省目录和对应资源类型在SDK帮助中有表格列出,简单摘抄如下:资源文件夹内文件夹命名规则上面说过res文件夹下的文件夹命名是有规矩的,否则会报类似“invalidresource directory name *”的错误提示,除了上表提供的缺省文件夹,一般可以用缺省文件夹名加短横线加配置相关的限定符构成需要的资源文件夹,用于区别不同屏幕分辨率、不同机型特点(是否带键盘等)以及不同的本地化资源等用处,详细参考API说明文档。具体案例如下图所示其中的values-zh-rCN就是中文简体资源包,用于本地化,至于其它就对照API说明文档来分析。一般项目缺省的资源文件夹名称就够了。资源文件夹内的资源文件存放规则由上面资源表可知,每个文件夹中存放的文件类型不仅有规定,而且对文件内容也是有严格要求的,曾经将一个定义布局的spinner.xml文件放置在res/values,结果就报“Invalid start tag *Layout spinner.xml”错误,并导致R.java没有生成;将该布局文件放置在res/color下面,虽然没有报错,但是原本的布局文件,不再是正确生成为形如“R.layout.spinner”的布局资源,而是生成为了“R.color.spinner”的颜色资源索引,具体如下所示:布局文件放置正确的R.java中代码 public static final class layout public static final int autocomplete=0x7f030000; public static final int spinner=0x7f03000d; 布局文件放置错误的R.java中代码 public static final class color public static final int solid_blue=0x7f050001; public static final int spinner=0x7f050004; 另外当一种资源定义XML文件放在不对应的res文件夹下,在可视化环境下,也就不能正确显示和编辑。通过上述一些特性,我们可以猜测出android的aapt工具的工作原理,先是根据文件夹名来进行对资源文件和XML文件进行不同的解析和编译规则进行解析和编译,ADT工具也是根据具体文件夹名称调用不同的规则来可视化编辑和呈现。使用eclipse IDE提供的框架来创建资源由于Android资源文件和文件夹有那么多的规矩,所以新手还是建议用eclipseIDE提供的创建XML文件的框架来创建资源文件和资源文件夹即在你需要创建资源文件时,通过“File”“New”“Android XML file”就可以弹出如下的New Android XML File对话框,选好工程,填好资源文件名,在“What type of resourcewould you like to create”中勾选需要创建的资源类型,假如是非缺省目录资源就在“what type of resource configuration would you like?”添加需要的配置类型,就可以在“Folder”中自动生成资源xml所在的文件夹,这个不用修改它。其它就根据需要来选择,然后点击“Finish”,就可以创建出符合规则的资源文件了。在这里需要注意的是资源文件名不能使用大写字母。是不是很省事,又能做出正确的事情啊,呵呵!Android资源类型及其简单使用上面对Android的资源目录的分析中,已经大致展现了Android资源类型的大致脉络,下面从简单资源先入手详细罗列下具体的资源类型和使用。一般而言,没有明说资源不能在XML资源文件中调用,那么该资源都是既可以在其它XML资源文件中调用又可以在Java代码中调用的。字符串常量资源(string)字符串资源位于/res/values目录下,一般定义为/res/values/strings.xml文件中(文件名随意,但是目录是固定的),主要定义的是应用程序需要用到的字串资源,这和Symbian的字串资源规划类似,不过更加进步了些。当然,你非要在代码中使用字串也可以,但那种方式并不是推荐的。字串资源有String、String Array和Quantity Strings (Plurals)三类,其各自语法和用例稍微有些区别String语法 text_string上面的string_name字符串资源,可以通过如下两种方法调用XML资源定义中:package:string/string_nameJava代码中:R.string.string_nameString用例:假设有个资源文件为res/values/strings.xml,其内容如下: Hello!那么这个hello字串资源在其它XML资源文件中的调用如下所示在java代码中的调用如下String string = getString(R.string.hello);String Array的语法 text_string 上面的string_array_name字符串资源,可以通过如下两种方法调用XML资源定义中package:array/string_array_nameJava代码中R.array.string_array_nameString Array用例:假设有个String Array资源在/res/values/stringArray.xml中,内容如下 Mercury Venus Earth Mars 那么在其它资源XML文件中,假设有个下拉列表需要用到上面的字符串数组资源,则可以如下调用在Java代码中的调用示例如下Resources res = getResources();String planets = res.getStringArray(R.array.planets_array);Quantity Strings语法 text_string 帮助文档中没有给出XML资源文件中对其的使用方法,也没有明确说不能通过XML调用,我也没有搞明白这个资源,所以暂时只给出Java代码中对上述plural_name资源的调用情况R.plurals.plural_name其中关于zero、one、two、few和many在帮助文档中有详细的释义,这里就不单独罗列。Quantity Strings用例假设有个Quantity Strings资源定义在/res/values/stringQuantity.xml中,内容如下 One song found. %d songs found. 由于这个资源,我还不太会用,所以只好照抄帮助文档的使用,至于XML文档中如何使用还不会,在Java代码中使用如下所示int count = getNumberOfsongsAvailable();Resources res = getResources();String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);整数常量资源(Integers)整数常量在C/C+通常是放在代码里面,android将整型常量、Bool常量和数组常量等等都可以放到XML资源文件中,后面具体介绍这些资源时就不再做展开了。一般整数常量被放置在/res/values/integers.xml中,同样文件名可以随意,但是目录必须固定在/res/values/下。Integer语法 integer上面的integer_name整数常量,可以通过如下两种方法调用XML资源定义中package:integer/integer_nameJava代码中R.eger_nameInteger用例假设整数常量放置在/res/values/integers.xml中,内容如下 75 5我们在代码中使用的时候,通过以下方式进行调用Resources res = getResources();int maxSpeed = res.getInteger(R.integer.max_speed);Integer Array语法 integer 上面定义的integer_array_name可以用如下两种方法调用XML资源定义中package:eger_array_nameJava代码中R.eger_array_nameInteger Array用例假设整数数组放置在/res/values/intergers.xml中,内容如下所示 4 8 16 32 该资源在java代码中的调用为Resources res = getResources();int bits =res.getIntArray(R.array.bits);Typed Array常量资源Typed Array资源有点类似于Symbian中瘦模板类的,用于存放多种不同类型资源数组的资源,本来想将这个资源放后面讲解,但是前面提供了一系列数组案例,就一并将这个数组也提前罗列下吧。该资源一般放置于/res/values/arrays.xml中Typed Array语法 resource 上面的typed_array_name资源,可以通过如下两种方法调用XML资源定义中package:array/typed_array_nameJava代码中R.array.array_nameTyped Array用例假设有两个Typed Array资源定义在/res/values/arrays.xml中,具体如下 drawable/home drawable/settings drawable/logout #FFFF0000 #FF00FF00 #FF0000FF 该资源通过以下方法在java代码中调用Resources res = getResources();TypedArray icons = res.obtainTypedArray(R.array.icons);Drawable drawable = icons.getDrawable(0);TypedArray colors = res.obtainTypedArray(R.array.icons);int color = colors.getColor(0,0);由于每一种类型都是通过不同的API来获取数组中的元素,比如上面用例里面color用int getColor(int index, intdefValue)函数,Drawable用Drawable getDrawable(int index)函数,至于其它相关的类型该调用什么函数来获取具体可以参看android.content.res.TypedArray的源码文件frameworksbasecorejavaandroidcontentresTypedArray.java来获得更多的详情。布尔常量资源(bool)该资源一般定义在/res/values/bools.xml中。bool语法 true| false上面的bool_name布尔常量资源,可以通过如下两种方法调用XML资源定义中package:bool/bool_nameJava代码中R.bool.bool_namebool资源用例假设有bool常量资源定义在res/values/bools.xml中,内容如下 true true那么在xml资源中的调用可以如下在Java代码中的调用如下Resources res = getResources();boolean screenIsSmall = res.getBoolean(R.bool.screen_small);Dimension常量资源该资源定义跟屏幕显示相关的一些尺寸常量,一般保存在/res/values/dimen.xml文件中具体的度量单位有:px(象素): 屏幕实际的象素,常说的分辨率1024*768pixels,就是横向1024px, 纵向768px,不同设备显示效果相同。in(英寸): 屏幕的物理尺寸, 每英寸等于2.54厘米。mm(毫米): 屏幕的物理尺寸。pt(点): 屏幕的物理尺寸。1/72英寸。dp/dip: 与密度无关的象素,一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp =1px。但dp和px的比例会随着屏幕密度的变化而改变,不同设备有不同的显示效果。sp: 与刻度无关的象素,主要用于字体显示best for textsize,作为和文字相关大小单位。dimension资源定义语法 dimensiondimension资源用例假设定义了一个dimen资源在res/values/dimens.xml文件中 25dp 150dp 30dp 16sp我们可以在XML资源中进行如下调用在Java代码中进行如下调用Resources res = getResources();float fontSize = res.getDimension(R.dimen.font_size);颜色常量资源(color)颜色常量通常被定义在/res/values/colors.xml文件内,同时颜色资源作为一种可绘制的资源,也可以被定义在/res/drawable/文件夹下,调用方式也完全不同,在这里只介绍作为常量的颜色资源。虽然两种定义和调用方式不同,但是颜色的数值表现形式却是一样的,都是形如下面的十六进制格式(后面涉及颜色数值就不再赘述了)#RGB#ARGB#RRGGBB#AARRGGBB比如#f00表示不透明的12位红色,而#80ff0000表示透明的32位真彩红色颜色常量语法 hex_color上面的color_name颜色常量可以通过如下两种方法调用XML资源定义中package:color/color_namJava代码中R.color.color_name颜色常量用例假设有颜色常量被定义在res/values/colors.xml中 #f00 #80ff0000在XML要使用该常量资源,可以通过如下方法在Java代码中如果想使用该资源,则如下调用Resources res = getResources();int color = res.getColor(R.color.opaque_red);至此我们将res/values下面定义的资源类型除了风格(Style)和主题(Theme)资源外,全部都介绍过了,由于风格和主题案例需要设计布局(layout)和View等,所以最后再涉及这两类资源的介绍。状态颜色列表资源(color state list)该资源被放置于/res/color/目录下面,用来定义一个类似Button控件在不同状态下需要呈现不同的颜色。因此这种XML资源文件描述的是跟控件状态相挂钩的颜色状态,具体见下面语法状态颜色列表资源语法假如有个状态颜色列表资源文件res/color/colorstatefile.xml 该菜单资源可以通过如下渠道访问XML资源定义中package:color/ colorstatefileJava代码中R.color. colorstatefile状态颜色列表资源用例有一个定义了button状态颜色列表的资源res/color/button_text.xml 则在布局文件中一个Button控件需要使用该状态颜色,就可以通过如下调用布局资源(Layout)布局资源是放置于/res/layout/下面的用于定义UI界面的XML文件,该资源被用于Activity或者其他UI组件。由于我在学习android之前,没有过Java GUI开发的经验,所以不清楚Java里面的UI设计思想,只知道Android UI类都是基于View和ViewGroup两个类,View类的子类就是“widg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厂房代理销售合同范本
- 企业招商外包合同范本
- 农牧机械出售合同范本
- 关于仓储搬迁合同范本
- 合同部分条款解除协议
- 别墅全案设计合同范本
- 共同产权购房合同范本
- 公司多人合股合同范本
- 深航笔试测试试题及答案
- 公司长期订购合同范本
- 第14课 点亮一盖灯说课稿-2025-2026学年小学信息技术(信息科技)六年级上册青岛版(六三制)
- 2025年人性本恶辩论赛辩论稿
- 2025年水利安全考试试题及答案
- 2024年中级注册安全工程师煤矿安全实务真题及答案解析
- GB/T 222-2025钢及合金成品化学成分允许偏差
- 中国联通商洛市2025秋招笔试性格测评专练及答案
- 人字扒杆安装注意事项
- 《铁路机车运用管理规程》
- DB11-T1448-2017城市轨道交通工程资料管理规程
- 费森尤斯卡比中国临床营养业务研究报告
- 全息易象针灸手针穴位系统54页PPT课件
评论
0/150
提交评论