该节主要记录从代码中获取与屏幕适配相关的各个參数:

Java代码例如以下

public class ScreenUtil {

	/**
* Note:
* 仅仅有activity能够使用getWindowManager。否则应该使用
* Context.getResources().getDisplayMetrics()来获取
*/ /**
* 获取DisplayMetric相关參数
* @param context
* @return
*/
public static String getMetricParams(Activity context){
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
return "density:"+dm.density+";densityDpi:"+dm.densityDpi
+";height:"+dm.heightPixels+";width:"+dm.widthPixels
+";scaledDensity:"+dm.scaledDensity+";xdpi:"+dm.xdpi
+";ydpi:"+dm.ydpi;
} /**
* 获取屏幕尺寸,单位为像素
* @param context
* @return
*/
public static String getScreenSizeInInPixels(Activity context){
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
double heightInInPixels = (double)dm.heightPixels;
double widthInInPixels = (double)dm.widthPixels;
return "高:"+heightInInPixels+" 宽:"+widthInInPixels+" 单位(像素)";
} /**
* 获取屏幕尺寸,单位为英寸
* 计算屏幕尺寸应该使用精确密度:xdpi ydpi来计算
* 使用归一化密度:densitydpi是错误的。它是固定值,
* 120 160 240 320 480,依据dp计算像素才使用它
* @param context
* @return
*/
public static String getScreenSizeInInch(Activity context){
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
double heightInInch = (double)dm.heightPixels / (double)dm.ydpi;
double widthInInch = (double)dm.widthPixels / (double)dm.xdpi;
double ScrrenSizeInInch = Math.sqrt(heightInInch*heightInInch
+ widthInInch*widthInInch);
return "高:"+heightInInch+" 宽:"+widthInInch+" 尺寸:"+ScrrenSizeInInch
+" 单位(英寸)";
} /**
* 获取屏幕尺寸,单位为dp
* @param context
* @return
*/
public static String getScreenSizeInInDp(Activity context){
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
float heightInInDp = px2dip((Context)context, (float)dm.heightPixels);
float widthInInDp = px2dip((Context)context, (float)dm.widthPixels);
return "高:"+heightInInDp+" 宽:"+widthInInDp+" 单位(dp)";
} /**
* dp转px
* @param context
* @param dpValue
* @return
*/
public static int dip2px (Context context, float dpValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dpValue*scale+0.5f);
} /**
* px转dp
* @param context
* @param pxValue
* @return
*/
public static int px2dip(Context context, float pxValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale+0.5f);
} }

XML的设置:

<support-screens

android:anyDensity = "true"

android:largeScreens = "true"

android:normalScreens = "true"

android:resizeable = "true"

android:smallScreens = "true

android:xlargeScreens = "true">

android:anyDensity = "true"时。应用程序安装在不同的密度的终端上面,

程序分别会去载入xxhdpi, xhdpi, hdpi, mdpi,ldpi目录中的资源。

Android适配方案小结(二)的更多相关文章

  1. Android适配方案小结(一)

    相关计量单位介绍: px:是屏幕的像素点,不同设备显示的效果一样. in:英寸(1英寸等于2.54cm) mm:毫米 pt:磅, 1/72英寸 dp:device independent pixels ...

  2. 适配方案(二)之PC端适配

    PC端 特点 PC端的屏幕具备以下特点: 屏幕大小一般是大于 13.3英寸 用户会经常拖拉浏览器的大小 原因 正是因为 PC端上的浏览器大小会经常被改变,而且改变的范围还很大,用户会全屏浏览器,用户也 ...

  3. Android 目前最稳定和高效的UI适配方案

    Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解.刚好,近期准备对糗事百科Android客户端设计 ...

  4. 适用于hips ui的iPhoneX及以上适配方案

    版本信息: hips ui: 0.1.43 须知: 随着hips ui的迭代,可能会解决适配问题,所以下面的方案是有时效性的. 如果你项目上很紧急,可以直接看第三部分解决方案,复制粘贴代码即可. 一. ...

  5. android多分辨率多密度下界面适配方案

    前言 Android 设计之初就考虑到了UI在多平台的适配,它本身提供了一套完善的适配机制,随着版本的发展适配也越来越精确,UI适配主要受平台两个因素的影响:屏幕尺寸 (屏幕的像素宽度及像素高度)和屏 ...

  6. android多分辨率多屏幕密度下UI适配方案

    相关概念 分辨率:整个屏幕的像素数目,为了表示方便一般用屏幕的像素宽度(水平像素数目)乘以像素高度表示,形如1280x720,反之分辨率为1280x720的屏幕,像素宽度不一定为1280 屏幕密度:表 ...

  7. 【cocos2d-x 手游研发小技巧(3)Android界面分辨率适配方案】

    先感叹一下吧~~android的各种分辨率各种适配虐我千百遍,每次新项目我依旧待它如初恋···· 每家公司都有自己项目工程适配的方案,这种东西就是没有最好,只有最适合!!! 这次新项目专项针对andr ...

  8. android屏幕适配方案

    曾经看了android的屏幕适配方案,有非常多种.当中自己用到的一种是:先找一款主流的分辨率的android机,如:1080*1920的分辨率做基准,然后在这个基准上.调整好一切布局.图片.适配其它手 ...

  9. Android 屏幕适配方案

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45460089: 本文出自:[张鸿洋的博客] 1.概述 大家在Android开发 ...

随机推荐

  1. Django和SQLAlchemy区别

    译者注:本文首先介绍了什么是ORM,然后从多个方面对Python语言下的两个ORM库Django和SQLAlchemy进行比较,为ORM的选型提供了较为全面的指导建议.以下是译文. ORM是什么? 在 ...

  2. Mac下安装node.js , Ionic

    访问node.js官网(https://nodejs.org/en/download/),下载相应的版本. 下载完,点击安装  [默认目录] Node.js v8.9.3 to /usr/local/ ...

  3. (28)C#委托,匿名函数,lambda表达式,事件

    一.委托 委托是一种用于封装命名和匿名方法的引用类型. 把方法当参数,传给另一个方法(这么说好理解,但实际上方法不能当参数,传入的是委托类型),委托是一种引用类型,委托里包含很多方法的引用 创建的方法 ...

  4. Oracle 查询每天执行慢的SQL

    本文转载自http://blog.itpub.net/28602568/viewspace-1364844/ 前言:  工作中的您是否有 想对每天慢的sql进行查询.汇总或者行优化等情况,如下SQL希 ...

  5. [POI2008]Mirror Trap

    题目大意: 一个$n(n\le10^5)$个顶点的格点多边形,每条边平行于网格线,每个角度数均为$90^\circ$或$270^\circ$,周长小于$3\times10^5$,每个顶点可以安装激光发 ...

  6. php升级版本

    Centos下Yum安装PHP5.5,5.6,7.0 默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | ...

  7. 【转】C++调用Matlab的.m文件

    原文地址     Matlab是一个强大的数学计算/仿真工 具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数.但在很多情况下,我们不得不使用VC编程.那么,如何在VC中利用matla ...

  8. 常用VBA小技巧

    用对话框选取文件路径(单个文件) 删除导入csv等文本文件后留下的 Data connections 增加新的工作表并并命名 Worksheets.Add(After:=Worksheets(Work ...

  9. Quartz配置CronTrigger

    CronTrigger 构造器 String name, //触发器名称 String group, //触发器的组名 String jobName, //job名称 String jobGroup, ...

  10. 深入理解dataset及其用法

    DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合.所谓独立, 就是说,即使断开数据链路,或者关闭数据库,DataSet依然 ...