Android适配你需要学习哪些东西?
一、前言:
把一些数据给弄得适当,适合以便于在View上显示。可以看作是界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表,数据库,集合等。 适配器就像显示器,把复杂的东西按人可以接受的方式来展现。
二、数据处理:
那么适配器是怎么处理得到的数据,并把它显示出来的呢。其实很简单,说白了适配器它也是一个类,在类里面它实现了父类的这几个方法:
-
publicint getCount() //得到数据的行数
-
public Object getItem(int position)//根据position得到某一行的记录
-
public long getItemId(int position)//的到某一条记录的ID
下面这个方法是最重要的相比于其它几个方法,它显式的定义了,适配器将要 以什么样的方式去显示我们所填充的数据,在自定义的适配器里面我们通常会给它写个布局文件 publicView getView(int position, View convertView, ViewGroup parent) 我们常用的适配器一共有三个:
-
ArrayAdapter
-
SimpleAdapter
-
SimpleCursorAdapter
这三个,他们都是继承于BaseAdapter 。
三、分辨率适配:
1.基础知识
屏幕尺寸
英寸,1英寸=2.54厘米。比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等
屏幕分辨率(px)
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素x横向像素,如1960x1080。
屏幕像素密度(dpi)
屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数
密度无关像素(dip/dp)
密度无关像素(Density Independent Pixels)是由屏幕像素密度和屏幕分辨率决定,以160dpi作为基准,1dp(1dip)=1px,320dpi时,1dp=2px。
字体大小(sp)
Sp是专门为字体准备的单位,其求解方式与密度无关像素(dp)相同。
mdpi、hdpi、xdpi、xxdpi、xxxdpi
根据google官方规定,其代表的像素密度如下:

一般图片大小要求如下:

注:只需要适配800x480、854x480、960x540、1184x720、1280x720、1920x1080这六种分辨率。
2.标注、切图
1.只需要提供一套标注即可。
原则上需要为不同分辨单独进行标注,但由于开发成本等各种考虑。
选取320dpi下(分辨率为:720*1280)进行设计,此分辨率下1dp=2px。
另外视觉可以直接从高分辨率进行设计、标注、切图,这样可以方便适配低分辨率。
2.只需要提供一套切图即可。
原则上设计师需要为不同分辨率单独标注切图,同样根据开发成本等要求。
1.一般采用7201280的来设计。切图可以直接适配1201280分辨率的机型。
2.720*1280下的切图资源基本可以适配其他机型,有些特殊的切图需要单独适配的,比如icon等。
3.适配480*800的机型,只需要把切图/1.5即可。
4.适配10801920机型,只需要把切图1.5即可。
5.适配10801920的时候,不要单独硬生生的将图标放大1.5倍。这就要求在7201280下画图的时候,尽量采用矢量图形来画 图。比如在7201280下图图标是48px48px的时候,适配10801920时候,48px1.5=72px。把矢量图形调整为72px即可。把 切图资源给开发,开发会把切图单独放到xxhdpi的文件目录下,就会自动适配1080*1920的了。
同样要是适配480*800的,48px/1.5=32px,把切图给开发,开发会把切图资源单独放到hdpi的目录下,就会自动适配的。
720*1280下的切图资源,开发是放到xhdpi的目录下的。
6.使用相对单位进行标注。
设计师要建立相对单位概念,可以直接使用dp标注尺寸、sp标注文字大小
采用自适应布局。
7.由于Andriod设备尺寸较多,设计师设计时要考虑好固定和自适应部分。
8.标注尽量采用相对关系。
Andriod设备尺寸很多,不可能采用绝对定位方式来标注,因为绝对定位无法实现界面元素自适应,标注时说明和兄弟元素、父子元素之间的关系即可。
四、语言适配
1.创建对应文件夹
在res目录下创建对应的valus文件夹,例如:
-
values //默认
-
values-zh-rCN //中文简体
-
values-zh-rTW //中文繁体123
然后在对应的values里面新建对应的string.xml文件就可以了
2.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-ar-rEG
-
保加利亚文: values-bg-rBG
-
加泰罗尼亚文:values-ca-rES
-
捷克文:values-cs-rCZ
-
丹麦文:values-da-rDK
-
德文(德国):values-de-rDE
-
希腊文:values-el-rGR
-
西班牙文(西班牙):values-es-rES
五、低版本适配
1.什么是低版本?
1.1软件需要能够在低版本android系统上运行;基于此条件方法:
-
代码中,使用到高版本的一些方法时,需要添加版本高低判断,在低版本上不调用高版本才有的方法。
-
资源上面,针对不同的版本使用不同的资源文件夹,提供针对不同版本的资源文件。只使用当前版本拥有的资源属性和类型。
1.2软件需要能够在低版本上达到高版本的一些功能效果;基于此条件方法:
-
针对低版本上隐藏的api,可以使用反射的方式进行调用
-
针对低版本上没有的功能或者资源属性和类型,使用适配包,appcompat
2.使用适配包步骤:
-
Application使用的主题需要是AppCompat主题
-
baseactivity需要集成CompatActivity
-
自定义的基础组件类型需要继承自CompatEditText。。。
-
使用AppCompat支持的一些属性,一般是高版本中的属性将android:前缀去掉。
六、注意事项:
1.不要混淆解决问题1和2使用的一些方法。
-
比如AppCompat中的属性是不需要区别不同的版本的。只有当你需要在低版本中去掉对高版本的一些属性的使用的时候才需要建立不同版本的资源文件夹,使得只在高版本中才使用这些属性,为了防止低版本中出现崩溃。
-
再比如你明确需要高低版本需要达到同样的效果,那么就不需要针对不同版本建立不同文件夹,需要做的是使用Compat包中的对应的高版本的属性。
2.针对Compat包中无法实现的一些效果。
-
一般的需要要求高版本按系统提供的来,低版本需要一些特殊的技巧实现类似的效果。
-
这时候你需要做的就是建立高版本的资源文件夹,使用提供的属性。代码中针对高版本使用高版本提供的api,来实现需求效果。
-
针对低版本的,(结合Compat提供的有限的新功能)+自己的想象力和创造力去实现类似的效果。
尾述:
全文讲到的就是Android适配的屏幕分辨率、语言、低版本的适配方法。