您的位置:首页 > 移动开发 > Android开发

Android 屏幕适配方案系列三

2016-10-22 17:06 330 查看
Android多屏幕适配:

https://github.com/8enet/AndroidMultiScreenLayout 【这个也是针对标注的px来设置的】

Fragment适配大屏幕:

https://github.com/ksharpdabu/twoFragment

百分比布局 屏幕适配:https://github.com/wmydz1/AutoFix

比例布局:https://github.com/Modificator/RatioLayout

屏幕生成工具类:https://github.com/BrightYu/DimenFilesBuilder 【使用于标注px的场景】

屏幕适配: 【主要针对图片适配逻辑存在一定得参考价值,使用320px=320dp的分辨率为基准,将屏幕宽度分为320等分。那么, 在320px分辨率的手机下,1单位长度=1px,在640px分辨率下,1单位长度=2px。 先获取用户手机的屏幕宽度,最后算出设置的px在用户手机上真实的px值。】

获取手机屏幕分辨率:https://github.com/JackChen-crg/GetPhoneMetricsOrDensityDpi

作为demo 在上面实验

其实市场上分辨率有很多种,如果把每一种都统计过来,其实并非一件好事,最理想的状态应该是根据当前手机分辨率和物理尺寸大小来生成一套

在mdpi的情况下:1dp=1px,所以我们以320*480为蓝本设计

图片是与分辨率相关也就是dpi-》与屏幕密度Density相关-》关系:密度越大,分辨率越高,与地层硬件相关,与屏幕尺寸大小无关

分辨率是显示能力,分辨率与屏幕大小没有关系,屏幕大小时物理外观,

屏幕大小:所谓屏幕尺寸指的是屏幕对角线的长度,单位是英寸。

【然而不同的屏幕尺寸是可以采用相同的分辨率的,而它们之间的区别在与密度(density)不同。】

布局需要根据物理尺寸的大小来准备

系统会根据DPI值准备至少3套图片资源:drawable-mdpi,drawable-hdpi,drawable-xhdpi

http://blog.sina.com.cn/s/blog_b37dcd970101csln.html

设计师采用













基本策略思想:

屏幕大小与图片拉伸:面对于不同尺寸屏幕的手机,它们的高宽比是不一样的,所以我们的基本思想就是以宽度为基准,放大图片,然后以中心为准裁剪多余的部分。

http://blog.csdn.net/sahadev_/article/details/48475217 一套图片就行

http://blog.csdn.net/name_Uncle_Wang/article/details/46438641 imageView适配

http://blog.csdn.net/coderinchina/article/details/50639076 自定义imageView适配

算法:将要放大的图片的高度=原图的宽度*屏幕的高度/屏幕的宽度;

一般常见的尺寸大小:http://screensiz.es/phone

对于字体适配:根据某基准尺寸,生成所有需要适配分辨率的values文件

参考:http://blog.csdn.net/lmj623565791/article/details/45460089

两个逻辑:

01.分析需要的支持的分辨率:或者先获取手机的屏幕分辨率

02.编写自动生成文件的程序

所以我想要的答案,我之前和你想的一样,觉得只放大分辨率的图片就够了,省空间省力,最后遇到了不少麻烦。:

1.背景图片的东西可以准备多套,毕竟缩放消耗性能

2.小屏幕设备通常配置略差,大尺寸的资源直接使用很容易导致内存不足崩溃

3.9-patch也会按比例缩放,当一个9-patch的patch尺寸(就是那个黑色像素的长度)被缩放后四舍五入到0了,神奇的事情就会发生——崩溃(我记得是在低版本的会)!变形

4.针对特定解析度的屏幕,你可以生成锐利清晰的位图,但是如果缩放,在非针对分辨率下图标就会有点模糊

5.我需要考虑的密度分别是:mdpi/hdpi/xhdpi就行了,拿一点存储空间换运行时速度还是很值的。只需要一套:以xhdpi为基准就行了

6.如果是在google play上架。建议mdpi,hdpi,xhdpi,xxhdpi每一种都放一套(ldpi就算了,基本看不到),因为google play会根据不同的手机density来打不同的apk包(举个栗子,如果是hdpi的机器,下载下来的就只有hdpi的资源)

7.如果是在国内的市场话。建议只放一套xhpdi,因为国内市场是没有上面那种机制的,放多套资源会导致安装包变得很大。

8.Android在没有找到相应dpi的图片时,会用其他density的图片进行缩放处理。因此会损失一些性能和内存(作为缩放的buffer使用)

【图标和背景图片】

具体参考:http://www.zhihu.com/question/28850798?sort=created

官网解析:http://blog.csdn.net/xyz_lmn/article/details/38304427

对于从服务器上下载过来的图片适配的问题

用代码控制,先计算手机屏幕已经分辨率的各种参数,然后依旧分辨率来从服务器中下载一份适配当前分配率的图片,至于等比例缩放需要配合其他手机参数



Values 样式



适配原理:android会根据屏幕本身的尺寸与密度特性,自动载入对应的资源,并把它们从逻辑像素(DIP,用于定义界面布局)转换成屏幕上的物理像素。

系统在得到图片时候,会先到设备对应的dpi的文件夹下去去找资源文件,找到后应该不会做缩放直接返回图片。

如果没有在对应的dpi文件夹中找到,回去其他文件夹中查找,找到后会做相应的缩放。

在高dpi找到的图片会缩放,在低dpi的会拉伸 【拉伸会变形吗?】

源码解析:http://mobile.51cto.com/abased-406977.htm

根据某基准尺寸,生成所有需要适配分辨率的values文件,做到了编写布局文件时,可以参考屏幕的分辨率;在UI给出的设计图,可以快速的按照其标识的px单位进行编写布局。基本解决了适配的问题。张海洋的这个问题实际上针对的是标准的是px 来转化为。

对于从服务器中获取的图片如何适应不同分辨率的图片,如果是自家的服务器,则让服务器提供不同分辨率的图片,客户端把当前用户的手机分辨率作为参数传递过去,返回对应分辨率的图片。可以是高度,或者密度,约定一个值,建立一个hash表,传递不同类型,涉及到缓存和压缩

http://www.17xsj.com/UIsheji/lilunjiqiao/2421.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  屏幕适配