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

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. 使用EventHandler传递参数

    1.MouseEventHandler和EventHandler传递参数的局限性分析 开发过程中,特别是使用自定义控件时,常常需要对一个控件的click,mouseDown,mouseUp等事件的处理 ...

  2. React Native解决Android的WebView无法执行injectedJavaScript代码

    需求 在用WebView组件写一个东西,要求功能:打开web后进行js代码注入. 开发 代码很简单,示例: const js = ` alert(1); alert(2); `; <WebVie ...

  3. Codeforces 813E Army Creation(主席树)

    题目链接  Educational Codeforces Round 22 Problem E 题意  给定一个序列,$q$次查询,询问从$l$到$r$中出现过的数字的出现次数和$k$取较小值后的和 ...

  4. Activator常用方法

    1.获取图片 public static Image getImage(String key) {        Image img = getDefault().getImageRegistry() ...

  5. csu1808

    csu1808 题意 n 个点间有 m 条地铁,每条地铁可能属于不同的线路,每条地铁有权值即通过时花费的时间,如果乘坐第 i 条地铁来到地铁站 s,再乘坐第 j 条地铁离开,需要花费额外的时间 \(| ...

  6. 检查点--JMeter也有之二“检查点”

    检查点:简单的来理解一下,上一章讲到,我们对用户名和密码进行了参数化,那么怎样来判断jmeter有没有正确调用test.dat里面的文件呢.当然,我们可以从结果图表中查看.但我还是想在“登录”这个地方 ...

  7. ReactiveCocoa(二)

    前言 通过ReactiveCocoa(一)的学习,相信大家对ReactiveCocoa有了一些基本认识吧.下面就让我们来学习ReactiveCocoa的一些基本使用吧! ReactiveCocoa基本 ...

  8. 【bzoj2160】【啦啦队排练】manacher(马拉车)+差分+快速幂

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=34562780 向大(hei)佬(e)势力学(di ...

  9. .xcodeprok cannot be opened because the project file cannot be parsed

    用svn更新代码后,打开xcode工程文件出现 xxx..xcodeproj cannot be opened because the project file cannot be parsed. 这 ...

  10. 前端JavaScript实现跨域的方式(转)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...