转载地址:http://blog.csdn.net/Scotfield_msn/article/details/52455022?locationNum=8
一、android工程文件夹内容介绍
在eclipse下,一个完整的工程具有至少以下的目录结构,并且还可以根据需求人工增加文件夹,比如有时候我的工程师JNI,则会用到.so文件,如果是多媒体app,则有media文件夹,下面会增加截图讲解。
    
    共有三种类型:①文件夹;    ②build 文件夹(逻辑)
    下面的资源讲解将按照显示的实体文件夹来进行展开。
1.gen
    此目录为ADT插件自动生成的代码文件保存路径,生成的都是.java类文件,并且在完整的包名下呈现。
    注意,本目录下的任何文件不可人工修改任何一行一字,包括注释,否则提示报错!!
        特别地,若本工程引用了第三方项目(Android dependencyies,非referenced libraries或者android private libraries),此项目的生成包也会加进来。截图如下:
        
    
        本项目包下,有BuildConfig以及R文件,其中里面的R.java将保存所有的资源ID。
    BuildConfig.java里面是ADT自动生成的工程Build信息,简单如上图。
    R.java里面有所有可索引的XML资源的16进制的整数int(32位)的索引,类里面是自动生成的各类型的内部类(小写),全部完整的内部类有:attr、dimen、bool、color、integer、drawable、id、layout、menu、string、style、styleable。上面截图中打了框框的是几个常用的资源的内部字段,分析可知,所有的命名都是小写以及下划线(以及数字),不可大写,否则R.java文件无法自动生成。
2.bin
        此目录下存放的是工程自动生成的二进制文件资源打包文件、第三方jar包以及dalvik虚拟机的可执行文件等等。   
  
        其中dexedLibs是存放第三方引用包,这些包都是已经经过选择有用的class被编译好了集合,如果系统没有自动生成某个库的编译后的包,那么程序在运行时会报出ClassNotFoundException错误,所以要保证所有的三方包都被正确编译出来。
    res包下的cruch下有系统处理过的各种针对不同屏幕分辨率、屏幕横竖屏、多语言而产生的drawable文件夹,其中的资源将会在对应的真机环境下使用。若某种目录下缺少某些文件,则会造成运行时找不到文件的错误。另外,工程应该根据实际需求去分别在不同环境下放置、设计不同的资源以达到最佳适配。
    AndroidManifest.xml是根据项目直接保留下的系统配置文件(清单文件)。
    apk文件便是工程被编译后生成的包。说明一下,ADT通过Android adb 来调试程序在模拟机或者真机的情况,获得代码在机子上的运行情况。
3.libs
    此文件夹是用来存放第三方包,注意,引用第三方包与引用第三方工程是不同的概念!这将在我的另外一篇文章讲解。
    
4.src
    此文件夹是工程用来存放java文件,存放的是源码,不需多言。其中,包的命名以及包的个数由开发者根据需求自己设计。
    
5.assets
    此目录下可以存放项目中的一些较大的资源文件,例如:图片、音乐、字体、视频、数据等,并且此目录下是可以自定义字目录结构的。
6.res
    此目录是Android的相对最重要的的文件夹之一,类型有:drawable.layout.menu.anim.raw.xml.values。注意,文件夹除了values,其他的文件夹如drawable、layout、menu、values、raw、xml必须是指定文件目录名。因为,values目录下是按照name值检索的,而其他目录是按照文件名检索的。
        下面分类详解。
① drawable
    存放一切可以绘制出来的资源,包括图片(.png、.9.png、.jpg、.gif)资源、xml资源。
        在java中,可以使用Resources.getDrawable(id)可以获得drawable资源。
    此类目录应该按照不同的实际APP真机环境,结合不同的屏幕分辨率放置不同的图片大小资源,这将在下一章讲解。
    注意:放在这里的图像资源可能会被aapt工具自动地进行无损压缩优化。比如,一个真彩色但并不需要256色的PNG可能会被转换为一个带调色板的8位PNG。这使得同等质量的图片占用更少的资源。所以我们得意识到这些放在该目录下的二进制图像在生成时可能会发生变化。如果你想读取一个图像位流并转换成一个位图(bitmap),请把图像文件放在res/raw/目录下,这样可以避免被自动优化。
    
② layout
    此目录放置所有布局文件,文件内可以是以容器为起标签的布局,也可是只有单个控件的布局。既可以是Android自带的view、viewgroup,也可以是自己定义的view、viewgroup。下截图是4.4.2的自带布局标签。
    注意此目录也应该按照不同的横竖屏来分别放置不同布局文件(针对横竖屏以及分辨率),下章详解。
    注意:layout不像其他的res/文件夹,它可以保存任意数量的文件,这些文件保存了要创建资源的描述,而不是资源本身。XML元素类型控制这些资源应该放在R类的什么地方。
③ values
    此目录下讲存放按名(name值)存取的资源,并且分类众多。里面所有的资源都是resource标签下的子标签内容。
    类型有:dimen.style.string.color.bool.item.integer.array.integer-array.string-array.attr.declare-styleable 。并且每一种类型的标签应该放置在不同的文件下(虽然不是按文件名索取),但以便于人工读取。
    此目录下的不同值资源应该按照不同的屏幕分辨率(针对dimens标签)以及不同的语言(针对string标签)以及不同的API版本(针对style标签)来分别放置不同的文件,下章详解。
④ menu
        存放定义了应用程序菜单资源的XML文件。正确创建文件的方法:new Folder,名字menu,new Other——Android——XML,选择menu类型,填写名称,确定即可。菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用<menu>标签作为根节点。除了<menu>标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是<item>和<group>。
⑤ anim
        用于定义动画对象。存放定义了补间动画(tweened animation)或逐帧动画(frame by frame animation)的XML文件。(该目录下也可以存放定义property animations的XML文件,但是最好还是分开存放).
⑥ raw
    自定义的一些原生文件所在目录,像音乐、视频等文件格式,任意文件。存放直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID 也可以用,即R.raw.somefilename,Resources.getRawResource()方法可以获得这些资源。
   *res/raw和assets的相同点:
        1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
      *res/raw和assets的不同点:
        1.res/raw中的文件会被映射到R.Java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
        2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
⑦ xml
    用户自定义的XML文件,任意的XML文件,所有的文件在程序运行时编译到应用程序之中,在程序运行时可以使用Resources.getXML()方法获取。
⑧ animator
    存放定义了属性动画property animations(android 3.0新定义的动画框架)的XML文件
7.build(可选)
进行JNI编程时,系统将会用到C、C++文件,这时候要用到.so文件,则可将其放到本目录下。
8.media(可选)
    完全自定义的文件夹,放置我的资源。
二、res目录文件夹子文件夹命名规范
在上一章的res目录讲解时,涉及到针对不同的实际APP真机环境以及使用语言,结合不同的屏幕分辨率放置不同的图片大小资源,这将会涉及到一个文件夹的命名规范。
涉及到的res子文件夹有三个:drawable、layout、values.
1. 屏幕分辨率的影响
影响范围:drawable、layout 、values(dimen).
①分辨率与屏幕大小等概念:
屏幕分辨率:屏幕分辨率就是手机屏幕的像素点数,指屏幕横竖各有多少个像素,一般描述成屏幕的“宽×高”。安卓手机屏幕常见的分辨率有480×800、720×1280、1080×1920等,例如720×1280表示此屏幕在宽度方向有720个像素,在高度方向有1280个像素。
屏幕大小:屏幕大小是手机对角线的物理尺寸,以英寸(inch)为单位。比如某某手机为“5寸大屏手机”,就是指对角线的尺寸为5英寸,5寸×2.54厘米/寸=12.7厘米。屏幕尺寸分为:small,normal,large,xlarge分别表示小,中,大,超大屏。Google将设备分为small(2~3英寸)、normal(4英寸左 右)、large(5~7英寸)、xlarge(7英寸以上)。
        
        
屏幕密度:屏幕密度就是每英寸的像素点数,数值越高当然显示越细腻。对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚。手机可以有相同的分辨率,但屏幕尺寸可以不相同。屏幕密度分为:ldpi,mdpi,hdpi,xhdpi,它们的标准值分别是:120dpi,160dpi,240dpi,320dpi。下面有详细的尺寸与密度的对照表。
px :是屏幕的像素点,长度单位,以具体像素为单位。
    in :英寸
    mm :毫米
    pt :磅,1/72 英寸
    sp :scaled pixels,主要用于字体显示。同dp相似,但还会根据用户的字体大小偏好来缩放。
    dp(=dip):一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px。长度单位,与具体屏幕密度无关,显示的时候根据具体平台屏幕密度的不同最终转换为相应的像素长度
                   dp与px换算公式:
                        pixs =dips * (densityDpi/160).
                        dips=(pixs*160)/densityDpi
②Android手机屏幕代号以及手机常见分辨率以及对应的(屏幕密度)dpi以及密度值以及drawable文件夹名
QVGA(Quarter VGA):240 x 320;                     ldpi    120dpi         drawable-ldpi    放低解析度的图片
HVGA:320 x 480;                                    mdpi    160dpi        drawable-mdpi   放中等解析度的图片
VGA: 480 x 640                                                       
WVGA:800x480                                        hdpi    240dpi        drawable-hdpi   放高解析度的图片
FWVGA:854x480                                                      
QHD:960x540                                                          
720P:1280x720(标清,standard definition,SD)小米2    xhdpi    320dpi      drawable-xdpi 
:1080 x 1920                      谷歌 Nexus 4   xxhdpi    480dpi      drawable-xxhdpi 
1080P:1920x1080(高清,high definition,HD)         xxxhdpi    640dpi      drawable-xxxhdpi (只用到drawable-xxhdpi即可)
③drawable文件名
屏幕受尺寸以及分辨率的限制,所以drawable必须对尺寸和分辨率都加以判断才能最佳适配。
通过上面的屏幕分辨率的讲解,现对文件名加上限定为资源指定特定的适用平台:
这种限定方式比较适用于对外发布应用,不知道终端具体参数的情况,但是不能做到精确适配,对于屏幕尺寸和密度相差不大的两种平台不能很好的区分。为了解决上述问题,自Android3.2开始,引入了精确适配,理论上可以适配任意像素宽度,高度,屏幕密度的平台,需用以下方式添加限定符:
其中w1280dp表示屏幕宽度为1280dp,h752dp表示屏幕高度为752dp,160dpi表示屏幕密度。其中必须以dp为单位,可通过公式:1dp = (目标屏幕密度/标准密度)*px 转换成dp单位。
④ values命名
在不同的分辨率下,Android字体大小怎么自适应分辨率的变化?可以在不同的values文件夹下放置不同的字体size(用dp),
如<dimen name="btnTextSize">14dip</dimen>  。通过这种方法,可以方便设置在不同分辨率下,字体的大小了。当然,不仅仅字体大小,宽和高等其他的一些属性,也可以通过类似的方式来设置
⑤layout
layout中设置图片自适应大小,并且设置最大宽高,当图片的宽高大于设置的最大值时,宽高值为设置的最大值。
其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.Java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。
layout最好是最好用match_parent、wrap_content属性,让系统自动适配。
2. 横竖屏的影响
    影响范围:layout
①layout
可以在res目录下建立layout-port-800x600和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,这样在手机屏幕方向变化的时候系统会自动调用相应的布局文件,避免一种布局文件无法满足两种屏幕显示的问题。
(注:android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!要让程序界面保持一个方向,不随手机方向转动而变化的处理办法:在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation="landscape"。)
3. 多语言的影响
    影响范围:values(string).
①values命名
在res目录下建立不同名称的values文件来调用不同的语言包:
中文(中国):values-zh-rCN
中文(台湾):values-zh-rTW
中文(香港):values-zh-rHK
英语(美国):values-en-rUS
英语(英国):values-en-rGB
英文(澳大利亚):values-en-rAU
英文(加拿大):values-en-rCA
英文(爱尔兰):values-en-rIE
英文(印度):values-en-rIN
英文(新西兰):values-en-rNZ
英文(新加坡):values-en-rSG
英文(南非):values-en-rZA
阿拉伯文(埃及):values-ar-rEG
阿拉伯文(以色列):values-ar-rIL
保加利亚文:  values-bg-rBG
加泰罗尼亚文:values-ca-rES
捷克文:values-cs-rCZ
丹麦文:values-da-rDK
德文(奥地利):values-de-rAT
德文(瑞士):values-de-rCH
德文(德国):values-de-rDE
德文(列支敦士登):values-de-rLI
希腊文:values-el-rGR
西班牙文(西班牙):values-es-rES
西班牙文(美国):values-es-rUS
芬兰文(芬兰):values-fi-rFI
法文(比利时):values-fr-rBE
法文(加拿大):values-fr-rCA
法文(瑞士):values-fr-rCH
法文(法国):values-fr-rFR
希伯来文:values-iw-rIL
印地文:values-hi-rIN
克罗里亚文:values-hr-rHR
匈牙利文:values-hu-rHU
印度尼西亚文:values-in-rID
意大利文(瑞士):values-it-rCH
意大利文(意大利):values-it-rIT
日文:values-ja-rJP
韩文:values-ko-rKR
立陶宛文:valueslt-rLT
拉脱维亚文:values-lv-rLV
挪威博克马尔文:values-nb-rNO
荷兰文(比利时):values-nl-BE
荷兰文(荷兰):values-nl-rNL
波兰文:values-pl-rPL
葡萄牙文(巴西):values-pt-rBR
葡萄牙文(葡萄牙):values-pt-rPT
罗马尼亚文:values-ro-rRO
俄文:values-ru-rRU
斯洛伐克文:values-sk-rSK
斯洛文尼亚文:values-sl-rSI
塞尔维亚文:values-sr-rRS
瑞典文:values-sv-rSE
泰文:values-th-rTH
塔加洛语:values-tl-rPH
土耳其文:values--r-rTR
乌克兰文:values-uk-rUA
越南文:values-vi-rVN 


4.不同API版本的影响
    影响范围:values(style).
①values命名
    比较新的Android版本中附带了一些应用程序可以利用的主题,并在这些平台上运行时,可能要使用这些主题,同时依然要兼容旧的版本。基于不同的平台版本,通过选择定制主题所使用的资源在不同的父主题之间的切换来达到兼容的目的。
values-v11代表在API 11+的设备上,用该目录下的styles.xml代替res/values/styles.xml.
其中API 11+代表android 3.0 +
values-v14代表在API 14+的设备上,用该目录下的styles.xml代替res/values/styles.xml
其中API 14+代表android 4.0 +
5.综合命名规则
① drawable、layout、values 可用后缀类型(3种通用):
屏幕密度dpi值   -(hdpi) 
屏幕分辨率  -(640x360)
横竖屏   -(port/land)
屏幕尺寸大小  -(small/normal/large/xlarge)
屏幕指定高宽dp值  -(w1280dp/h720dp)
②命名要求
1) 命名不区分大小写;
2) 命名形式:
资源名-属性1-属性2-属性3-属性4-属性5.....
    资源名就是资源类型名,包括:drawable, values, layout, anim, raw, menu, color, animator, xml;
属性1-属性2-属性3-属性4-属性5.....
    就是上述的属性集内的属性,如:-en-port-hdpi;
注意:各属性的位置顺序必须遵守优先级从高到低排列!否则编译不过
3) 实例说明:把全部属性都用上的例子(各属性是按优先级先后排列出来的):
values-mcc310-en-sw320dp-w720dp-h720dp-large-long-port-car-night-ldpi-notouch-keysexposed-nokeys-navexposed-nonav-v7
4) 上述例子属性的中文说明:
values-mcc310(sim卡运营商)-en(语言)-sw320dp(屏幕最小宽度)-w720dp(屏幕最佳宽度)-h720dp(屏幕最佳高度)-large(屏幕尺寸)-long(屏幕长短边模式)-port(当前屏幕横竖屏显示模式)-car(dock模式)-night(白天或夜晚)-ldpi(屏幕最佳dpi)-notouch(触摸屏模类型)-keysexposed(键盘类型)-nokey(硬按键类型)-navexposed(方向键是否可用)-nonav(方向键类型)-v7(android版本)

5)注意:对于指定分辨率的属性(例如:values-hdpi-1024x600,values-hdpi-960x540,values-mdpi-1024x600),指定分辨率属性并没出现在官网的匹配属性集里,也没找到对于分辨率属性的详细说明,经测试,这个分辨率属性匹配并不准确,例如Galaxy Nexus(1280x720 ),却可以匹配到values-hdpi-1024x600,因此希望最好不使用分辨率属性。

一、android XML资源文件详解 —— 从物理上分析相关推荐

  1. Android build.gradle文件详解(转述自《Android第一行代码》第二版)

    Android build.gradle文件详解 1. 最外层目录下的build.gradle文件 1.1 repostories 1.2 dependencies 2. app目录下的build.g ...

  2. XML格式文件详解及Java解析XML文件内容方法

    XML格式文件详解 1.概述 XML,即可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者. ...

  3. Android 中rc文件详解

    rc文件详解 转载https://www.cnblogs.com/zhougong/p/8889040.html

  4. Android build.gradle文件详解

    Android build.gradle详解 什么是gradle? gradle是一个项目构建工具,java开发中有两个大名鼎鼎的项目构建Maven,Ant,其中maven简单易控深受开发者喜爱. 项 ...

  5. android xml文件格式,android xml 资源文件中几个格式(@ ? @* @+)的含义

    一.@代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@andr ...

  6. Android xml资源文件中@、@android:type、@*、?、@+含义和区别

    一.@代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@andr ...

  7. 解密android日志xlog,XLog 详解及源码分析

    一.前言 这里的 XLog 不是微信 Mars 里面的 xLog,而是elvishew的xLog.感兴趣的同学可以看看作者 elvishwe 的官文史上最强的 Android 日志库 XLog.这里先 ...

  8. 004:STM32启动文件详解及SystemInit函数分析(转)

    1 ;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000 2 ;然后在RAM中分配变量使用的堆 3 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x080 ...

  9. STM32启动文件详解及SystemInit函数分析

    1 ;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000 2 ;然后在RAM中分配变量使用的堆 3 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x080 ...

最新文章

  1. nsis帮助文档_使用NSIS打包程序
  2. 她穿着自己用 17 封拒信做成的裙子,参加了博士论文答辩...
  3. ITK:Levenberg-Marquardt优化
  4. c++ template(4)基本技巧
  5. StarUML 逆向工程插件加载失败问题解决
  6. javafx打包路径问题_关于JavaFX的最常见问题
  7. 如何设置背景图(前端开发)
  8. linux 权限提示信息,命令行快速提示:权限进阶 | Linux 中国
  9. linux cpu load 详解,理解linux cpu load - 什么时候应该担心了
  10. 两款高大尚广告GO跳转页PHP源码
  11. gini系数 决策树_案例7:机器学习--使用决策树实现泰坦尼克号乘客生存率预测...
  12. Jquery_异步上传文件多种方式归纳
  13. L2-001 紧急救援(最短路)
  14. 剑指offer最新版_剑指offer第二版速查表
  15. 设置div中的背景颜色及div中的字体颜色
  16. 电大本科计算机科学与技术,中央电大开放本科计算机科学与技术专业微计算机技术试题_0701...
  17. 物联网变身黑暗森林:僵尸网络、守护者、毁灭者层出不穷
  18. 无线网络攻防实战 WEP密钥如何被攻破的 图
  19. 阿里新突破!自主创新的下一代匹配推荐技术:任意深度学习+树状全库检索
  20. Java训练work3.Exer5---供应商问题

热门文章

  1. idea解决activiti(*.bpmn)文件乱码问题。
  2. HTML中光移动边框,CSS 边框各边
  3. java线程知识体系
  4. redis 3.0的集群部署
  5. App-V轻量级应用程序虚拟化之三客户端测试
  6. 白宫任命退伍将军担任首位联邦首席信息安全官
  7. 在MAC下怎样用SSH连接远程LINUXserver
  8. 对Session、Cookie的完全理解
  9. 1. JavaScript学习笔记——JS基础
  10. iOS音乐后台播放及锁屏信息显示