【来源】ExMobi 二次开发手册

手机屏幕根据密度范围分为五种:低、中、高、超高、超超高,为了确保界面元素在不同的屏幕都能合适的展示,在设计界面元素的 UI 时,UI 工程师建议统一采用 dpi (Dots Per Inch) 来定义界面元素。

计算手机dpi,需要知道手机屏幕尺寸和手机分辨率。即

手机分辨率 屏幕尺寸(Inch) 实际 DPI 分屏 DPI 值
480 x 800 4 英寸 233 高分屏 [188,300) 240
480 x 854 3.7 英寸 265 高分屏 [188,300) 240
1024 x 768 9.7 英寸 132 中分屏 [121,188) 160
320 x 480 3.5 英寸 165 中分屏 [121,188) 160
640 x 960 3.5 英寸 330 超高分屏 [300,420) 320
1920 x 1080 5 英寸 440 超超高分屏 [420, ) 480

【示例】

三星 i9000,屏幕尺寸 4 英寸,分辨率 480 * 800。套入公式

计算结果取近似值 233,即三星 i9000 的 dpi 为 233。介于高分屏区间 [188,300],所以取 240.

在实际设计中,UI 度量单位以 640*960 设计图为基准,测量实际尺寸除以 2。现在以 720*1280 设计图为基准。

 /**
* 获得屏幕相对的宽度和高度<br />
* 横屏时候宽度大于高度,竖屏时候高度大于宽度
*
* param windowManager
* return <br />
* point.x:宽度,point.y:高度
*/
@SuppressLint("NewApi")
public static Point getScreenSize(WindowManager windowManager) {
Point point = new Point(0, 0);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
point.x = windowManager.getDefaultDisplay().getWidth();
point.y = windowManager.getDefaultDisplay().getHeight();
} else {
windowManager.getDefaultDisplay().getSize(point);
} return point;
}
获得屏幕的宽度和密度
public static int getScreenWidth(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getWidth(); } public static float getScreeDensity(Context context){
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metric = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(metric); float density = metric.density; // 密度(0.75 / 1.0 / 1.5 / 2.0)
//int densityDpi = metric.densityDpi;
return density;
}

根据屏幕大小调整尺寸

 // 根据屏幕和图片大小调整显示尺寸
int justShowViewHeight = mScreenSize.x * 150 / 640;
LayoutParams justShowParams = mJustShowImg.getLayoutParams();
justShowParams.height = justShowViewHeight;
mJustShowImg.setLayoutParams(justShowParams);
Picasso.with(mActivity).load(R.drawable.fragment_main_justshow).into(mJustShowImg);

DPI 计算及速查表的更多相关文章

  1. python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表

    目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...

  2. Java, C#, Swift语法对比速查表

    原文:Java, C#, Swift语法对比速查表   Java 8 C# 6 Swift 变量 类型 变量名; 类型 变量名; var 变量名 : 类型; 变量(类型推断) N/A var 变量名= ...

  3. Git 命令速查表

    Git 命令速查表 1.常用的Git命令 命令 简要说明 git add 添加至暂存区 git add-interactive 交互式添加 git apply 应用补丁 git am 应用邮件格式补丁 ...

  4. Git 常用命令速查表(图文+表格)

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  5. OpenStack 命令行速查表

    OpenStack 命令行速查表   updated: 2017-07-18 08:53 Contents 认证 (keystone) 镜像(glance) 计算 (nova) 实例的暂停.挂起.停止 ...

  6. 【转】shell速查表

    shell速查表 转自:https://www.jianshu.com/p/a98a334bfb25 1. 变量 #!/bin/bash msg="hello world" ech ...

  7. numpy-帮助文档 & 速查表.md

    目录 转相关资料: 速查表 速查代码 转相关资料: 官方手册 易佰教程 gitbook ZMonster's Blog 速查表 速查代码 # -*- coding: utf-8 -*- "& ...

  8. GNU Emacs命令速查表

    GNU Emacs命令速查表 第一章  Emacs的基本概念 表1-1:Emacs编辑器的主模式 模式 功能 基本模式(fundamental mode) 默认模式,无特殊行为 文本模式(text m ...

  9. vim基本命令速查表

    来源:https://github.com/skywind3000/awesome-cheatsheets/blob/master/editors/vim.txt ################## ...

随机推荐

  1. mybatis动态排序

    如果我们要传入排序字段作为一个参数到mybatis中,用以实现按照指定字段来排序的功能,那么我们需要使用$,而不是像其他参数一样,使用#.如下所示. <if test="sortnam ...

  2. java_23 File类

    1.File类定义: 文件和目录路径的抽象表达形式,java中将路径或者文件封装成File对象. 2.File类的静态成员变量(pathSeparator 分隔符,字符串        separat ...

  3. Tomcat的三种部署方式

    Tomcat是目前web开发中非常流行的Web 服务器,也就是tomcat在部署项目的时候,必须要把应用程序中所用到的jar包放到tomcat的lib目录下,然后再一起部署到服务器上. 那么tomca ...

  4. Scatter 散点图

    散点图 首先,先引入matplotlib.pyplot简写作plt,再引入模块numpy用来产生一些随机数据.生成1024个呈标准正态分布的二维数据组 (平均数是0,方差为1) 作为一个数据集,并图像 ...

  5. 使用手势对UIImageView进行缩放、旋转和移动

    // 添加所有的手势 - (void) addGestureRecognizerToView:(UIView *)view { // 旋转手势 UIRotationGestureRecognizer  ...

  6. 连续子数组和的最大值plus

    package wodeshiyao; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStre ...

  7. Java程序员职业生涯规划完整版:从程序员到CTO( 摘)

    在技巧方面无论我们怎么学习,总感觉需要晋升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样我们清楚的知道我们大概处于那个阶段和水平. Java程序员 高等特性 反射.泛型. ...

  8. J2CACHE 两级缓存框架

    概述 缓存框架我们有ehcache 和 redis 分别是 本地内存缓存和 分布式缓存框架.在实际情况下如果单台机器 使用ehcache 就可以满足需求了,速度快效率高,有些数据如果需要多台机器共享这 ...

  9. 内置函数_range()

    range() range()语法格式为 range([start,] stop [,step])# 有三种用法range(stop)range(start,stop)range(start,stop ...

  10. 背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图

    [源码下载] 背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获取文件夹的属性 ...