Android 多屏幕适配 dp和px的关系 最好用dp
Android 多屏幕适配 dp和px的关系
一直以来别人经常问我,android的多屏幕适配到底是怎么弄,我也不知道如何讲解清楚,或许自己也是挺迷糊。
以下得出的结论主要是结合官方文档进行分析的https://developer.android.com/guide/practices/screens_support.html
android由于碎片化太严重,而导致市面上出现非常多的种类尺寸手机设备,当然也包括非常奇葩的分辨率手机。所以我们在布局的时候使用px作为单位显然不能很好的做到多屏幕的适配。其实在官方文档中有介绍一种解决多屏幕适配的问题的尺寸单位dp/dip(Density-independent pixel )
文档中也给出了px和dp之间的关系表达式:px = dp * (dpi / 160) 其中dpi表示的是设备屏幕密度,不同的设备dpi可能不一致。
例如在一个dpi为240的设备屏幕中,1个dp等价于2个px,也就是一个dp长度下包含2个px,如果dp与px的倍数越大,屏幕看起来也就越清晰。
谷歌已经针对dpi进行了分类:
- A set of six generalized densities:
- ldpi (low) ~120dpi
- mdpi (medium) ~160dpi
- hdpi (high) ~240dpi
- xhdpi (extra-high) ~320dpi
- xxhdpi (extra-extra-high) ~480dpi
- xxxhdpi (extra-extra-extra-high) ~640dpi
上述表述可以看出他是一个区间的,并不是一个固定的值。
基于px和dp的关系式。假如在屏幕像素为800*1280,dpi为240的设备上,dp的总长度只有600dp
在屏幕像素为800*1280 ,dpi为320的设备上,dp的总长度只有400dp
以下是测试代码,来验证dp的实际长度

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#f00"
android:src="@drawable/ic_launcher" /> <ImageView
android:layout_width="100dip"
android:layout_height="40dip"
android:src="#0f0" /> <ImageView
android:layout_width="200dip"
android:layout_height="40dip"
android:src="#0fa" /> <ImageView
android:layout_width="300dip"
android:layout_height="40dip"
android:src="#0ff" /> <ImageView
android:layout_width="400dip"
android:layout_height="40dip"
android:src="#09f" /> </LinearLayout>

720*1280 320dpi 480*800 160dpi 480*800 240dpi
dp总长度为360dp dp的总长度为480dp dp的总长度为320dp

总结一
一般情况下如果屏幕分辨率和屏幕密度成一定比例的关系,那么不管分辨率多大,得出的dp总长度将会在一定的范围内。那么使用dp作为单位将能很好的解决多分辨率适配的问题。
然而由于设备屏幕分辨率和屏幕密度并不是成一个固定的比例,所以全部用dp的写,似乎不是很好。建议使用warp_content 和match_parent来配合使用。对于布局的高宽没有明确限制的,尽量结合相对布局和权重来表示,这样不管在什么分辨率下,界面的样式不会错乱。
Android 多屏幕适配 dp和px的关系 最好用dp的更多相关文章
- Android开发——Android手机屏幕适配方案总结
)密度无关像素,单位为dp,是Android特有的单位 Android开发时通常使用dp而不是px单位设置图片大小,因为它可以保证在不同屏幕像素密度的设备上显示相同的效果. /** * dp与px的转 ...
- Android实习生 —— 屏幕适配及布局优化
为什么要进行屏幕适配.对哪些设备进行适配?在近几年的发展当中,安卓设备数量逐渐增长,由于安卓设备的开放性,导致安卓设备的屏幕尺寸大小碎片化极为严重.从[友盟+]2016年手机生态发展报告H1中看截止1 ...
- Android 多屏幕适配 dp和px的关系
一直以来别人经常问我,android的多屏幕适配到底是怎么弄,我也不知道如何讲解清楚,或许自己也是挺迷糊. 以下得出的结论主要是结合官方文档进行分析的https://developer.android ...
- Android各种屏幕适配原理
dip(dp): device independent pixels(设备独立像素) dip,就是把屏幕的高分成480分,宽分成320分.比如你做一条160dip的横线,无论你在320还480的模拟器 ...
- android 多屏幕适配 : 第一部分
1.在xml布局文件中,控件的宽度和高度用 dp ; 字体大小用 sp 2.根据屏幕的宽高来动态的适配 , 获取屏幕的宽高的两种方法: 第一种方法: /** * 屏幕的宽度 * 屏幕的高度 * ...
- Android 多屏幕适配
问题: 测试时,发现应用在不同的显示器上显示效果不同(部分文本不能显示完全),自然想到屏幕适配的问题. 按照思路整理如下: (一) 几个概念 1, Screen size 屏幕的尺寸,即对角线长度(单 ...
- Android多屏幕适配
转载:http://mikewang.blog.51cto.com/3826268/865304 问题: 测试时,发现应用在不同的显示器上显示效果不同(部分文本不能显示完全),自然想到屏幕适配的问题. ...
- [转]android – 多屏幕适配相关
1.基本概念 屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸).android把屏幕分为以下4种:small,normal,large,extr ...
- 最清晰的Android多屏幕适配方案
问题的引入 当您的Android应用即将发布的时候,如果你想让更多的用户去使用你的应用,摆在工程师面前的一个重要问题就是如何让你的应用能在各种各样的终端上运行,这里的各种各样首当其冲的就是不同的屏幕分 ...
随机推荐
- ACM1003:Max Sum
Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...
- 剑指offer题目系列三(链表相关题目)
本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...
- Fibonacci递归以及数组实现
说起Fibonacci数列,首先想到的就是递归算法了,这也是帮助理解递归算法比较经典的题目实现如下: public static int Fibonacci(int n){ if (n == 0 ...
- 分布式专题(二)——Zookeeper的ZAB协议介绍
- 笔记-sql语句
笔记-sql语句 1. sql语句基础 虽然经常使用sql语句,但没有一个整体式的文档,整理了一下. 1.1. select foundation: select <colnum ...
- PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证
权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...
- 杭州优步uber司机第三组奖励政策
-8月9日更新- 优步杭州第三组: 定义为激活时间在2015/8/3之后(含)的车主(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Ub ...
- 长沙Uber优步司机奖励政策(1月4日~1月10日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Python Map 并行
Map是一个酷酷的小东西,也是在Python代码轻松引入并行的关键.对此不熟悉的人会认为map是从函数式语言(如Lisp)借鉴来的东西.map是一个函数 - 将另一个函数映射到一个序列上.例如: ur ...
- WeTest功能优化第2期:云真机智能投屏,调试告别鼠标
第2期功能优化目录 [云真机视频映射]云真机画面本地映射[兼容性测试报告]新增问题机型聚类功能[新增Android9.0]同步上线最新安卓系统 本期介绍的云测产品功能优化,既有重磅级技术突破,也有报告 ...