作为一名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. [Leetcode][JAVA] Pascal's Triangle I, II

    Pascal's Triangle: Given numRows, generate the first numRows of Pascal's triangle. For example, give ...

  2. C/C++中static关键字详解

    静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值. 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见.用法1:函数内部声明 ...

  3. JQuery学习(选择器-简单-animated)

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  4. weblogic10.3.6 自动启动服务后停止的解决方案

    windows部署weblogic后,需要手动开启weblogic管理员服务器,即Start Admin Server for Weblogic Server Domain,不过这样的话每次重启或者不 ...

  5. 使用jsPlumb制作流程图设计器

    jsPlumb是一个比较强大的绘图组件,它提供了一种方法,主要用于连接网页上的元素.在现代浏览器中,它使用SVG或者Canvas技术,而对于IE8以下(含IE8)的古董浏览器,则使用VML技术. 项目 ...

  6. perl在命令行中打印单引号

    perl -e 'print "\'";'   这样写是不行的,这里直接执行会当作这命令未结束.反斜杠对符号做了转义,这样的命令解释成: perl -e 'print ';' (双 ...

  7. Linux:常用shell快捷键

    按键 作用 Ctrl+d 键盘输入结束或退出终端 Ctrl+s 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg Ctrl+a 将光标移至输入行头,相 ...

  8. SQL关于日期的查询

    SQL查询某天的记录: datediff(day,[Datetime],'2012-08-03')=0 把Datetime换为你的相应字段: SQL查询今天的记录: datediff(day,[Dat ...

  9. Gradle中使用idea插件的一些实践

    如果你的项目使用了Gradle作为构建工具,那么你一定要使用Gradle来自动生成IDE的项目文件,无需再手动的将源代码导入到你的IDE中去了. 如果你使用的是eclipse,可以在build.gra ...

  10. atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较

    atitit.提升开发效率---使用服务器控件生命周期  asp.net 11个阶段  java jsf 的6个阶段比较 如下列举了服务器控件生命周期所要经历的11个阶段. (1)初始化-- --在此 ...