Android -- 屏幕适配
Android Drawable
一个Android项目有很多drawable文件夹,分别对应不同的dpi
- drawable-ldpi (dpi=120, density=0.75)
- drawable-mdpi (dpi=160, density=1)
- drawable-hdpi (dpi=240, density=1.5)
- drawable-xhdpi (dpi=320, density=2)
- drawable-xxhdpi (dpi=480, density=3)
Android SDK会自动屏幕尺寸选择对应的资源文件进行渲染,如SDK检测到你手机dpi是160的话会优先到drawable-mdpi文件夹下找对应的图片资源,注意只是优先,假设你手机dpi是160,但是你只在xhpdi文件夹下有对应的图片资源文件,程序一样可以正常运行。所以理论上来说只需要提供一种规格的图片资源就ok了,如果只提供ldpi规格的图片,对于大分辨率的手机如果把图片放大就会不清晰,所以需要提供一套你需要支持的最大dpi的图片,这样即使用户的手机分辨率很小,这样图片缩小依然很清晰。
xhdpi
目前市面上最普遍的高端机的分辨率还多集中在720X1080范围,也就是多集中在xhdpi,所以目前来看xhpdi规格的图片成为了首选。
利用IOS设计资源
iPhone5的屏幕分辨率为640X1164, 屏幕尺寸为4英寸,根据勾股定理(a^2 + b^2 = c^2)640^2+1164^2=1764496, 然后再对其开根号可求出屏幕对角线的分辨率为:1328,除以4可得出iphone5的dpi:1328/4≈332 可以看出iPhone5的屏幕的dpi约等于320, 刚好属于xhdpi, 直接把iPhone5的那一套切好的图片资源放入drawable-xhdpi文件夹里就ok了。
wrap_content VS dp
全是xhdpi的资源的话,那么你用wrap_content完全没有问题,Android会自动为其他规格的dpi屏幕适配,比如你在xhdpi放了一张120X120px大小的图片,那么在在hdpi屏幕上显示的就只有120/2*1.5=90px大小,但是如果你不小心同样把这张图片也放入了mdpi了,这个时候用wrap_content显示就会有问题。
例如假设你只在drawable_xhdpi文件夹下放了test图片,xhdpi的设备会去xhdpi文件夹下找到test图片并直接显示,而mdpi的设备优先会去mdpi文件夹里查找test图片,但是没找到,最后在xhdpi文件夹下找到,然后会自动根据density计算并缩放显示出来,实际显示出来的大小是120/2=60px, 所以整体的显示比例才会看起来比较正常
- mdpi
- xhdpi
但是如果你在mdpi文件夹里也放入了同样的图片,那么mdpi的设备会直接去mdpi文件夹里寻找到test图片,并直接显示,而这时候显示不会缩放,实际显示大小就是120X120,在mdpi的屏幕上看起来就会比较大,如图:
最小宽度限定词
当你的设备的最小宽度等于600dp或者更大时,系统选择layout-sw600dp/main.xml(two_panes)的布局,而小一点的屏幕则会选择layout/main.xml(single_panes)的布局。
避免出现重复的布局文件
layout-sw600dp和layout-xlarge同时存在,建立不同的values文件夹的layout.xml
比如有一个布局要兼容大小屏幕,在Activity中引入的布局名字为activity_my_schedule:
在 res文件夹下创建不同的 values文件夹,来指向同一布局文件
res/values/layout.xml
<resources><item name="activity_my_schedule" type="layout">@layout/activity_my_schedule_wide</item>
</resources>
res/values-sw600dp\layout.xml
<resources><item name="activity_my_schedule" type="layout">@layout/activity_my_schedule_wide</item>
</resources>
你可以只使用一个layout布局文件,在 res文件夹下创建不同的 values文件夹,来指向不同的局文件。
我们来看Google开源项目Iosched中的实际应用,在layout下面有两个布局文件,分别用于适配大小屏幕:
res/layout/activity_my_schedule_wide
res/layout/activity_my_schedule_narrow
创建不同的values文件夹的layout,layout用于小屏幕,values-sw600dp-land用于横屏的情况:
res/values/layout.xml
<resources><item name="activity_my_schedule" type="layout">@layout/activity_my_schedule_narrow</item>
</resources>
res/values-sw600dp-land\layout.xml
<resources><item name="activity_my_schedule" type="layout">@layout/activity_my_schedule_wide</item>
</resources>
更复杂的需求,不同的情况选择不同的布局,只需要在res下面建立不同的values的layout,引用指定的布局名称即可,常见的values类型有:
- res/values/layouts.xml
- res/values-sw600dp-land/layouts.xml
- res/values-sw600dp-port/layouts.xml
- res/values-xlarge-land/layouts.xml
- res/values-xlarge-port/layouts.xml
使用点9图片
如果你在使用组件时可以改变图像的大小,你很快就会发现这是一个不明确的选择,因为运行的时候,图片会被拉伸或者压缩(这样容易造成图像失真)。
避免这种情况的解决方案就是使用点9图片,这是一种能够指定哪些区域能够或者不能够拉伸的特殊png文件。
我是天王盖地虎的分割线
Android -- 屏幕适配相关推荐
- 鸿洋android屏幕适配四部曲-传送门
鸿洋android屏幕适配四部曲-传送门 两分钟理解Android中PX.DP.SP的区别 https://blog.csdn.net/donkor_/article/details/77680042 ...
- Android 屏幕适配
一.适配方式之dp 名词解释 分辨率:480*800,1280*720.表示物理屏幕区域内像素点的总和.(切记:跟屏幕适配没有任何关系) 因为我们既可以把1280*720 的分辨率做到4.0 的手机上 ...
- android屏幕适配详解
android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...
- Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
- Android屏幕适配全攻略(最权威的官方适配指导) (转)
招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...
- android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度
为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容. 1.重要概念 px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高. 屏幕分辨率:指在纵向 ...
- 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)
来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...
- Android 屏幕适配攻略(六)设置通知样图标与启动图标适配
Android 屏幕适配攻略(六)设置通知样图标与启动图标适配 1 Android中资源文件中的图片加载分析 Android中对屏幕的像素适配处理分类 屏幕密度 对应的标签 对应的像素 120dip ...
- Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)
Android 屏幕适配攻略(五)动态创建控件并设置控件的大小 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 flutter中网络请求dio使用分析 视频 ...
- Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小
Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小 1 动态获取手机屏幕的 屏幕密度与对应像素比例 例如在 320 * 480 尺寸为 3.2 英寸的手机 ,对应的像素密度 ...
最新文章
- 矩阵快速幂 - 湘潭大学
- 用番茄工作法提升工作效率 (三)工作任务的管理(系列完结篇)
- php fprintf,PHP fprintf()函数用法讲解
- linux之用户态和内核态
- 《系统集成项目管理工程师》必背100个知识点-60干系人管理
- 2021年Kaggle所有赛事TOP方案汇总
- long类型20位示例_Java Long类lowerOneBit()方法与示例
- Scrapy 教程(十)-管道与数据库
- leetcode114. 二叉树展开为链表
- 推荐系统--矩阵分解(5)
- Spring Boot 2.1.4 发布,提醒全体用户升级 2.1
- OpenCV读取RTSP视频流
- java下高精度定时器库_高精度定时器的使用
- 2019年美赛E题翻译与思路详解
- windows10安装NVIDIA显卡驱动+cuda10.0教程
- NoViableAltException(379@[2389:1: columnNameTypeOrConstraint : ( ( tableConstraint ) | ( columnNameT
- JVM中的-Xms -Xmx -XXnewSize -XXMaxnewSize -Xmn -XXPermSize -XXMaxPermSize区别介绍
- Firefox如何给页面权限
- python之解释性语言
- h5 农场游戏开源_下一个开源领域是农场