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 -- 屏幕适配相关推荐

  1. 鸿洋android屏幕适配四部曲-传送门

    鸿洋android屏幕适配四部曲-传送门 两分钟理解Android中PX.DP.SP的区别 https://blog.csdn.net/donkor_/article/details/77680042 ...

  2. Android 屏幕适配

    一.适配方式之dp 名词解释 分辨率:480*800,1280*720.表示物理屏幕区域内像素点的总和.(切记:跟屏幕适配没有任何关系) 因为我们既可以把1280*720 的分辨率做到4.0 的手机上 ...

  3. android屏幕适配详解

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...

  4. Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  5. Android屏幕适配全攻略(最权威的官方适配指导) (转)

    招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...

  6. android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度

    为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容. 1.重要概念 px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高. 屏幕分辨率:指在纵向 ...

  7. 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)

    来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...

  8. Android 屏幕适配攻略(六)设置通知样图标与启动图标适配

    Android 屏幕适配攻略(六)设置通知样图标与启动图标适配 1 Android中资源文件中的图片加载分析 Android中对屏幕的像素适配处理分类 屏幕密度 对应的标签 对应的像素 120dip ...

  9. Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)

    Android 屏幕适配攻略(五)动态创建控件并设置控件的大小 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 flutter中网络请求dio使用分析 视频 ...

  10. Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小

    Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小 1 动态获取手机屏幕的 屏幕密度与对应像素比例 例如在 320 * 480 尺寸为 3.2 英寸的手机 ,对应的像素密度 ...

最新文章

  1. 矩阵快速幂 - 湘潭大学
  2. 用番茄工作法提升工作效率 (三)工作任务的管理(系列完结篇)
  3. php fprintf,PHP fprintf()函数用法讲解
  4. linux之用户态和内核态
  5. 《系统集成项目管理工程师》必背100个知识点-60干系人管理
  6. 2021年Kaggle所有赛事TOP方案汇总
  7. long类型20位示例_Java Long类lowerOneBit()方法与示例
  8. Scrapy 教程(十)-管道与数据库
  9. leetcode114. 二叉树展开为链表
  10. 推荐系统--矩阵分解(5)
  11. Spring Boot 2.1.4 发布,提醒全体用户升级 2.1
  12. OpenCV读取RTSP视频流
  13. java下高精度定时器库_高精度定时器的使用
  14. 2019年美赛E题翻译与思路详解
  15. windows10安装NVIDIA显卡驱动+cuda10.0教程
  16. NoViableAltException(379@[2389:1: columnNameTypeOrConstraint : ( ( tableConstraint ) | ( columnNameT
  17. JVM中的-Xms -Xmx -XXnewSize -XXMaxnewSize -Xmn -XXPermSize -XXMaxPermSize区别介绍
  18. Firefox如何给页面权限
  19. python之解释性语言
  20. h5 农场游戏开源_下一个开源领域是农场

热门文章

  1. Oracle数据库间的数据复制 - SQLPlus中的COPY命令
  2. Nginx 安装与使用
  3. hbase Java API 介绍及使用示例
  4. 网络函数bind源码分析
  5. 各大EMM厂商功能比较 第一部分 MDM比较
  6. 为链接加上加载等待信息
  7. WCF 第一章 基础 为一个ASMX服务实现一个WCF客户端
  8. .NET Hacks Tips
  9. Windows 下mysqldump备份1045错误解决办法
  10. .NET Core 管道