常量数据在java的学习的时候提到过,常量数据的意义是避免,魔术参数,魔术数值,魔术常量,这些称呼都可以,总之就是在方法的代码中,不建议使用直接的数在进行运算。
Java重新学习里面也提到,使用常量的话,使用这些前缀来完成。
Public static final int CONTENT_NUMBER = 1;
Android对于这些情况进行了优化,将所有的常量进行了统一存放,存放在res文件夹里。
在调用的时候,最常见是R.XX.XXXXX
在res文件夹下有很多字文件夹,最常用的是Layout和values。这两个是Eclipse新建默认程序就会用到的,Layout里面放界面布局文件,values存到String常量。
然后根据需求,会有animator、anim、color、drawable、menu、raw、xml
根据我们的使用经验,常用顺序是layout > values > drawable和raw >animator anim menu xml
Layout是android学习日记1和2里面提到的部分。
在布局嵌套,以及多个布局里面。会将一个布局模式,生成一个xml文件,然后在另一个布局里面调用,实现布局嵌套。
多个布局,则是相互并列的。也都放置在res/layout里面。
Layout的后缀有port和land,这两个后缀是区分横屏和竖屏的。
后缀是用来进行差异化适配,或者手机自动适配的一个机制。我们在代码里,调用命名为AAAAA的布局。然后将AAAAA同时写入layout-port和layout-land中。
那么在实际读取AAAAA的时候,会根据当前手机的屏幕状态,决定是读取那个文件夹中的AAAAA。
Values是真正存放常量的地方。基本所有固定参数都放在里面,最常见的三种常量是字符串,尺寸 和 颜色。
字符串res/values/string.xml ,顾名思义就是用来写文字的,第2章的组件里面,基本都会对应上字符串,TextView本身有字符串,EditText的hint,就是输入前,提示这个空格输入什么的,也是字符串,Button上面往往也有字符串。
尺寸res/values/dimens.xml , 存放各种数字的地方。数字本身大部分是变量的,比如计算器,输入的两个数,以及得到的结果始终都在变化。常量数据,基本上都是用来规定布局的。布局摆放的位置,两个组件之间的距离,组件的大小等等对于手机而言,往往都是常量,这一类数据就存放在dimens里面。
颜色res/values/colors.xml ,color是一个特殊的常量,需要是用#RRBBGG 以及#FFRRBBGG来控制。 前者是RBG控制,后者在RBG参数上增加了透明度。RBG是一种颜色的值,是通过红,蓝,绿三个颜色所占比例来控制最终的颜色,是用途最广的两种调色手法之一。Android就是使用这种手法。另外values还可以自己自定义一定的常量表。
Android针对res提供了R.的调用方法,对于自定义的数据,也可以调用。
drawable和raw :drawable是放图标的文件夹,raw是放音频的文件夹。将资源文件统一放置,然后读取也方便,另外,res文件是统一编程APK的,也就是说,如果图片和音频放在res文件夹里面,我们一个APK就搞定。如果放置在外面,则可能需要在手机中创建文件夹来放置。也就是说,文件编程APK+图片资源的形式,这样缺点就大了。如果手机中文件夹丢失,直接导致程序报错,以及控制起来麻烦。这里,我们应该感谢res文件夹给我们提供了一个便利的途径。
animator anim menu xml剩下四类使用相对较少,分别是动画,菜单和自定义xml。
关于后缀,真正能解决问题的res用法。
前文用layout的后缀举了一个例子,后缀的作用就是在手机中以相同的地方,相同的代码,根据手机的设置参数不同,导致显示出不同的结果。
后缀是源于实际的,界面想想同样的界面,组件摆放顺序不变的情况下,在什么时候下,组件的长宽会变化? 横屏和竖屏转化的时候。
下面看values,values是显示的文字,我们在什么情况下文字会发生变化呢?最常见的,比如桌面的图标的名字,比如,微信图标吧,绿色的笑脸下面,写着“微信”两个字,什么时候会变化呢?答案是切换语言的时候,那个时候下面就显示WeiChart了。
所以,我们自己都可以推测出来,values的后缀应该是涉及语言切换的。同一个地方,我读取相同的名字,然后通过当前的语言特征去values对应后缀去寻找对应的翻译。
values的后缀就是是各种文字的代码,例如Values-zh-rCN是指简体中文,真正配置时,我们可以通过网上或者书籍查找,实际上,首先要确保手机具备这个语言的选择,再来配置这个选择,才是有意义的。
接着是drawabe。 图片我们还是想,什么情况下,图片还会发生变化呢。 首先,告诉一个信息,图片发生变化的是大小,也可以叫做分辨率。
实际有两种情况会导致图片发生变化。
1:手机自身切换density的时候,android7.0平台后的设置具备displaysize的选项,这个是需要切换整个手机的分辨率,自然图片的分辨率也随之切换。
2:不同的手机,分辨率自然不同。
那么,图片分辨率会造成什么影响。按理说,我们设置图片在手机里面显示的大小,不受图片本身大小的影响。图片在手机中的大小由imageView的大小决定,而不受图片本身分辨率影响。那为什么还要分配分辨率呢?
这里有两种情况,都要求我们分辨率最好和图片大小进行适配。
想象一下,imageView对应的分别率大,而图标实际分辨率小。同一个程序,如果我们在手机里恰好分辨率合适的图片,在平板里就会有这个现象。那么他的问题是,图片模糊不清,在小屏时,还可以看情况,在大屏就很不舒服了,这样的话,不是一个合格的程序。
那么,我们直接使用高分辨率的图片呢,这样他在什么屏幕下都很清晰了。首先,这是一种浪费,对于小屏手机,他只能显示这么大的分辨率,我们使用了更高的图片实际显示出来,也和小分辨率的一样。但是,占用的内存就不一样了。
图片显示是占用内存的,我们用一个20k的图片他占用20k,我们用一个2M的图片他占用2M,高分辨率图片,很好找在网上,针对电脑的图片,基本都是2000*2000以上的,对应大小也是好几M,这样几张图片,我们的应用就会占用无数多内存。
这样手机真正用我们程序的时候,就会很卡了。实际上,屏幕分辨率高的手机和平板等终端系统,都会配置较高的内存,而分辨率低的手机,内存往往也会第一点。这个一方面和价格以及成本控制有关。另一方面,也是分辨率不同的手机,在读取图片的时候,图片大小不同,应用在运行时,占用内存也不同。
Drawable的后缀是drawable-hdpi、drawable-xxhdpi等等,表征这不同的屏幕密度。
本文介绍了Android中常量数据的存储位置,主要集中在res文件夹下的Layout、values、drawable和raw等目录。Layout用于布局文件,values存放字符串、尺寸和颜色等常量,drawable存储图标,raw管理音频。此外,还探讨了横屏竖屏、语言切换和屏幕密度对资源的影响,以及如何利用后缀适配不同设备。

1104

被折叠的 条评论
为什么被折叠?



