作为一名Android应用开发程序猿,最痛苦的事莫过于在屏幕适配了,这与历史原因有关,具体就不深究了。

直到最近才搞明白dpi是怎么换算的,在开发的过程中,一个应用运行的屏幕标准应该是分辨率为320x480密度为160dpi的屏幕上,所以所有放在drawable、drawable-mdpi、values、layout、layout-normal的资源文件大小的单位就是px,1dp = 1px。比如有一张宽30px高45px的图片放置在drawable-mdpi目录下,那对应的dp单位就是30dp x 45dp。那么放在drawable-hdpi目录下的这张图片的宽应该是30*1.5px,高45*1.5px,240/160=1.5。放置在drawable-xhdpi的自然就是30*20px和45*2px,320/160=2。

但是,很多公司开发应用不会只开发Android版本的,通常是和IOS一起开发,那美工所做的图片如果给Android做四套图(ldpi、mdpi、hdpi、xhdpi)的会很大工作量,通过的做法是把IOS中的640x960分辨率下的图片拿过用,这样实际只要一套图就能够适配标准的Android手机屏幕,所谓的标准就是密度为160dpi、分辨率为320x480,密度为240dpi、分辨率为480x800等的屏幕,当然不包括平板,这类平板通常是指国内的平板,那屏幕大啊,而分辨率却小,这类不包括在内。

那么该如何得用IOS中的640x960的图片来适配呢,640x960分辨率的在Android系统中对应的应该是320dpi密度的,所以把这类图片放置在drawable-xhdpi目录下,然后在使用的时候,通常布局文件都放置在layout目录,该目录是160dpi使用的,所以我们需要把xhdpi中的图片作一个处理,就是宽高分别除以2,320/160=2。

例如一张登录按钮图片,IOS中对应的是640x960分辨率的,大小为72x64,在Android中使用时把图片放到xhdpi目录,使用的时候这样定义宽高

<ImageView
android:layout_width="36dp"
android:layout_height="32dp"
android:src="@drawable/image"
/>

这样做的目标是使图片在Android自动转换的时候不会出现失真的问题,把一张图片从大往小转是不会失真的,效果保持了。36dp是通过72/2得到的,为什么除以2,是转为图片是为320dpi的屏幕设计的,但是布局文件是在layout目录的,也就是说这个布局是为160dpi的屏幕而设计的,因此需要转换成160dpi标准的密度。

当应用在240dpi密度的屏幕上运行的话,图片会被自动从160dpi转换成240dpi,也就是36*1.5dp、32*1.5dp。实际是72*0.75dp、64*0.75,图片只是作缩放,因为不存在失真的问题。

这种做法能够使图片在120、160、240、320这四种标准密度上自适应,是一种按比例自动缩放的过程。同时图片不存在失真的问题。只是如果内容过于多的情况在120密度的屏幕上看非常难看的,道理就是把一张图片从72x64缩小到了27x24。

转载:http://blog.linguofeng.com/archive/2013/05/02/Android-Multiple-Screens.html

Android Multiple Screens Android 屏幕适配的一些总结的更多相关文章

  1. android 中webview的屏幕适配问题

    两行代码解决WebView的屏幕适配问题 一个简单的方法,让网页快速适应手机屏幕,代码如下 1 2 WebSettings webSettings= webView.getSettings(); we ...

  2. Android 开发中的屏幕适配技术详解

    本文主要介绍Android开发中比较头疼繁琐的一个问题-屏幕适配问题.主要从适配原因.基本核心概念.适配方法等方面介详细 介绍从而是的深入或者进一步对Android屏幕适配技术的掌握和理解. 真题园网 ...

  3. 【原】android【手机】屏幕适配解决方案,完美适配适配hdpi,xhdpi,xxhdpi的做法。

    1.先说要怎么做,后面在慢慢讲解: 2.现在来讲解为什么要放这三套: 这三套其实按内容来说就两种,为什么这两种可以适配hdpi,xhdpi,xxhdpi呢? 那么两种类型的dimens就可以了,为什么 ...

  4. android studio 怎么做屏幕适配?

    一.关于布局适配建议1.不要使用绝对布局2.尽量使用match_parent 而不是fill_parent .3.能够使用权重的地方尽量使用权重(android:layout_weight)4.如果是 ...

  5. Android:设计之屏幕适配

    据统计目前市场Android手机的分辨率有是10余种,分辨率如此广泛使得我们在处理分辨率适应方便遇到不少难题,本文就此难点记录设计与实际布局中的解决技巧. 以320x480为蓝本设计布局 因为Andr ...

  6. Android 一种非常好用的Android屏幕适配

    前言 网上关于屏幕适配的文章已经铺天盖地了,为什么我还要讲?因为网上现在基本都是使用px适配,即每种屏幕分辨率的设备需要定义一套dimens.xml文件.再加上有些手机还有虚拟按键(例如华为),这样就 ...

  7. 好用的Android屏幕适配

    前言 网上关于屏幕适配的文章已经铺天盖地了,为什么还要讲?因为网上现在基本都是使用px适配,即每种屏幕分辨率的设备需要定义一套dimens.xml文件.再加上有些手机还有虚拟按键(例如华为),这样就还 ...

  8. Android应用如何支持屏幕多尺寸多分辨率问题

    作为Android应用程序开发者都知道android是一个“碎片化”的世界.多种系统版本.多种尺寸.多种分辨率.多种机型,还有不同的厂商定制的不同ROM,你开发的应用会在不可预期的手机上报错.这给开发 ...

  9. Android 中4种屏幕尺寸

    具体信息,请参考 Android 官方文档 Supporting Multiple Screens small(屏幕尺寸小于3英寸左右的布局),  normal(屏幕尺寸小于4.5英寸左右), lar ...

随机推荐

  1. maven工程引用外部jar包

    maven工程经常回遇到引用外部jar包,需要先安装在jar包,然后再在工程中pom.xml文件中添加依赖. 示例: 命令行中运行: mvn install:install-file -Dfile=E ...

  2. 第二章-如何使用github建立一个HelloWorld项目,git的add/commit/push/pull/fetch/clone等基本命令用法。--答题人:杨宇杰

    1.配置Git 首先在本地创建ssh 秘钥:在git bash输入: $ ssh-keygen -t rsa -C "your_email@youremail.com" eg:$ ...

  3. 斯坦福第七课:正则化(Regularization)

    7.1  过拟合的问题 7.2  代价函数 7.3  正则化线性回归 7.4  正则化的逻辑回归模型 7.1  过拟合的问题 如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集( ...

  4. Zabbix3.0 自动微信报障

    本来研究了一段时间短信报障的,但是短信报障需要手机运营商的设备支持,就没有继续下去. 正好发现微信公众号可以报障,完全可以代替短信报警的功能. 首先你需要一个微信公众号,实名认不认证没关系. http ...

  5. 分享一下SQLSERVER技术交流QQ群里的群共享资源

    分享一下SQLSERVER技术交流QQ群里的群共享资源 SQLSERVER技术交流QQ群已经开了一段时间了,人数已经有了100多号人, 而群里面很多SQLSERVER爱好者上传了他们宝贵的SQLSER ...

  6. 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

    谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...

  7. [stm32][ucos][ucgui] 2、LED闪烁、串口、滑块、文本编辑框简单例程

    上一篇:[stm32][ucos] 1.基于ucos操作系统的LED闪烁.串口通信简单例程 * 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了7个任务            任务名   ...

  8. tomcat安全配置

    1. 注释或删除 tomcat-users.xml 所有用户权限,看上去如下: <tomcat-users></tomcat-users> 2.  隐藏tomcat版本信息 1 ...

  9. [BTS]The join order has been enforced because a local join hint is used.;Duplicate key was ignored.".

    在一个客户的BizTalk Server 2013 R2环境中会报如下的ERROR,查找相关资料后,先试试停掉所有Trace. Log Name:      ApplicationSource:    ...

  10. centos基本操作

    yum install nodejs npm install -g shadowsocks nohup ssserver & 后台运行 vi /usr/lib/node_modules/sha ...