要明白上提出的问题,并写好屏幕适配,我们需要明白了解以下几个问题. ①Android 的资源目录到底有什么,除了我们Android给我们自动建立的:drawable,layout,values.还有什么目录? ②关于这些目录的命名规则到底是什么,是 drawable-400*800,还是drawable-400x800,还是drawable-v3.还是什么? ③Anroid查找资源文件的规则(优先级)是什么?
其实这些问题都可以通过我们的SDK中找到.英文比较好的同学可以直接看SDk目录下的 /docs/guide/topics/resources/providing-resources.html 这个说明文档提供了比较详细的说明和介绍.想要了解更多的东西都可以通过这个文档.
下面一一看上面提到的几个问题. 第一个问题:Android 的资源目录到底有什么,除了我们Android给我们自动建立的:drawable,layout,values.还有什么目录? 在sdk文档说明中,可以识别的目录一共有以下几种: animator :该目录存放的是property animations xml文件..关于property animations的介绍,具体可以参考文档里的链接.
anim 动画xml文件.property animatons的xml也可以存放在anim这里.但是animator的目录下的xml有较高的优先权.
color 颜色xml文件. (注意如colors的区别,colors.xml是一个文件,存放在values目录下,是存放一些具体的颜色值.而这个color存放是的一些selector drawable 图片 包含以下几种:
Bitmap files (.png
, .9.png
, .jpg
, .gif
) or XML files that are compiled into the following drawable resource subtypes:
- Bitmap files .png格式图片
- Nine-Patches (re-sizable bitmaps ) .9.png格式图片
- State lists 状态列表的xml
- Shapes shape的xml
- Animation drawables 动画xml
- Other drawables 其他图片
menu 菜单.(在ActionBar的使用中尤其有用) raw 资源.(在这里存放的资源会提供id,在assets的不会提供id)
values/
- arrays.xml for resource arrays (typed arrays). 数组
- colors.xml for color values 颜色值
- dimens.xml for dimension values. dp.sp
- strings.xml for string values. 字符串
- styles.xml for styles. 风格
第二个问题:关于这些目录的命名规则到底是什么,是 drawable-400*800,还是drawable-400x800,还是drawable-v3.还是什么? 首先 * 号是不允许的. 400x800也是无法识别的. res下的资源目录的命名规则不允许使用*号.必须使用x.而且400x800必须写成800x400.也就是说前一个分辨率必须大于后一个分辨率 在android自己生成的目录中,我们可以看到以下几个目录
这些目录的的含义可以参考sdk文档的第二张表.分别有:
▪MCC and MNC(大概意思是说通信方式.例如移动和联通的通信方式,3G,4G使用的技术也是不一样的)
▪Language and region(地区和语言)
en
fr
en-rUS
fr-rFR
fr-rCA
The language is defined by a two-letter ISO 639-1 language code, optionally followed by a two letter ISO 3166-1-alpha-2 region code (preceded by lowercase "
r
")其中r的意思就是说使用的是另外一套语言标准.
▪Layout Direction(Layout方向,是从左到右,还是从右到左)看介绍说阿拉伯使用的是从从右到左的...
res/
layout/
main.xml (Default layout)
layout-ar/
main.xml (Specific layout for Arabic)
layout-ldrtl/
main.xml (Any "right-to-left" language, except
for Arabic, because the "ar" language qualifier
has a higher precedence.)
▪smallestWidth(最小屏幕宽度)
sw320dp
sw600dp
sw720dp
屏幕方向的改变不会影响它的最小宽度.
▪Available width(可用宽度,宽度和高度可能会因为屏幕的旋转而变化,这里值的是当前屏幕的宽度)
w720dp
w1024dp
▪Available height(可用高度,同上)
h720dp
h1024dp
▪Screen size(屏幕尺寸)分为以下几种:
-
small
: Screens that are of similar size to a low-density QVGA screen. The minimum layout size for a small screen is approximately 320x426 dp units. Examples are QVGA low-density and VGA high density. (意思就是说320x426的属于small,类型属于QVGA 屏幕,下面的类似.) -
normal
: Screens that are of similar size to a medium-density HVGA screen. The minimum layout size for a normal screen is approximately 320x470 dp units. Examples of such screens a WQVGA low-density, HVGA medium-density, WVGA high-density. -
large
: Screens that are of similar size to a medium-density VGA screen. The minimum layout size for a large screen is approximately 480x640 dp units. Examples are VGA and WVGA medium-density screens. -
xlarge
: Screens that are considerably larger than the traditional medium-density HVGA screen. The minimum layout size for an xlarge screen is approximately 720x960 dp units. In most cases, devices with extra-large screens would be too large to carry in a pocket and would most likely be tablet-style devices. Added in API level 9.
-
long
: Long screens, such as WQVGA, WVGA, FWVGA -
notlong
: Not long screens, such as QVGA, HVGA, and VGA
car
desk
television
appliance
watch
▪Night mode (夜晚模式)分白天一个布局,晚上一个布局
-
night
: Night time -
notnight
: Day time
ldpi 120dpi
mdpi 160dpi
hdpi 240dpi
xhdpi 320dpi API8
xxhdpi 480dpi API16
xxxhdpi 640dpi API18
nodpi 存放你不想放大的图片
tvdpi 介于mdpi与hdpi之间.例如tv之类的设备
▪Touchscreen type (屏幕触摸类型)
-
notouch
: Device does not have a touchscreen. 没有触摸屏 -
finger
: Device has a touchscreen that is intended to be used through direction interaction of the user's finger.有触摸屏
keysexposed 有键盘
keyshidden 有可隐藏的硬件键盘
keyssoft 没有键盘
▪Primary text input method 主要的输入方法
-
nokeys
: Device has no hardware keys for text input. 没有物理键盘 -
qwerty
: Device has a hardware qwerty keyboard, whether it's visible to the user or not. 有一个物理键盘,无论对于用户来说是否可见. -
12key
: Device has a hardware 12-key keyboard, whether it's visible to the user or not. 有一个12个键的键盘,无论对于用户来说是否可见.
▪Navigation key availability 系统导航栏是否可用
-
navexposed
: Navigation keys are available to the user. 用户可以使用系统导航栏 -
navhidden
: Navigation keys are not available (such as behind a closed lid). 不可以使用
▪Primary non-touch navigation method 好像是说系统导航栏方法是否可用.
-
nonav
: Device has no navigation facility other than using the touchscreen. -
dpad
: Device has a directional-pad (d-pad) for navigation. -
trackball
: Device has a trackball for navigation. -
wheel
: Device has a directional wheel(s) for navigation (uncommon).
Platform Version (API level) 平台版本,不能的API版本使用不同的布局.例如5.0以上的系统可以使用卡片等主题.
v3
v4
v7
第三个问题:第二个问题所提供的目录,优先级是怎么划分的? 例如有这么两个目录 values-en values-hdpi Anroid设备都符合这两个特性.那到底是引用了en目录下的资源.还是hdpi目录下的呢? 根据文档的后面例子介绍.有这么一个图:
其中第二个步骤说:MCC first,then MNC,then language,and so on. 意思是MCC是第一的,然后接着是MNC,然后是language.意思就是说优先级是按照上面的表格提供的表格其实就是目录的优先级.