Android适配方案小结(二)

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

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文件夹中的资源。

时间: 2024-10-12 21:27:24

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

Android适配方案小结(三)

在Android适配方案小结(一).(二)中,我们了解了一些基本概念. 那么在具体开发中,我们应该注意什么呢. 首先,我们必须要知道,其实适配的关键在于两点: (1)不同分辨率设备的适配,这点在单位的使用上用dp.sp以及图片资源存放于不同的drawable文件夹就可以解决问题: (2)不同尺寸的适配,这点主要靠将相关值以及布局文件放置于不同的文件夹中来解决. 2.1 values文件夹 可以在工程下创建不同的values文件夹:values-sw480dp, values-sw600dp, v

Android适配方案小结(一)

相关计量单位介绍: px:是屏幕的像素点,不同设备显示的效果一样. in:英寸(1英寸等于2.54cm) mm:毫米 pt:磅, 1/72英寸 dp:device independent pixels(设备独立像素),不同设备有不同的显示效果,这个和设备 硬件有关.基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px.(160dpi表示1英寸 有160个像素点) dip:等同于dp,因此我们在xml中使用dp和dip效果一样. sp:scaled pixels, 同dp相似,

适配方案(二)之折叠屏适配

参考 华为折叠屏应用开发指导 华为发布折叠屏官方适配方案 华为5G折叠屏幕适配 原文地址:https://www.cnblogs.com/kunmomo/p/11771778.html

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

Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解.刚好,近期准备对糗事百科Android客户端设计一套UI尺寸适配方案,可以和小伙伴们详细的聊一聊这个问题.Android适配最核心的问题有两个,其一,就是适配的效率,即把设计图转化为App界面的过程是否高效,其二如何保证实现UI界面在不同尺寸和分辨率的手机中UI的一致性.这两个问题都很重要,一个是保证我们开发的高效,一个是保证我们适配的成效:今天

适配方案

目前来看,适配从设备来分大致分两种,一种是手机端适配,另一种是PC端适配.本次教程主要讲PC端适配. 一,为什么讲述本次教程? 昨天不是很忙,在闲下来的时候看京东,淘宝,天猫的前端代码,当我改变浏览器的宽度时候,内容自动适配.感觉很好奇,就查看他们的css样式. 结果发现一个比较好的方案.这也是今天我要讲述的适配方案. 二,这次教程需要用到的技术是什么? 首先你要了解css权重,比如 .nav span{ color:#999; } .nav .span{ color:#ccc; } <!DOC

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

版本信息: hips ui: 0.1.43 须知: 随着hips ui的迭代,可能会解决适配问题,所以下面的方案是有时效性的. 如果你项目上很紧急,可以直接看第三部分解决方案,复制粘贴代码即可. 一. 无适配情况 自从iPhone X出了刘海屏后,对于我们前端是适配难度又更上一层楼.不知道你有没有遇到过如下情况 1.头尾嵌入边框 2.在适配了头尾之后,scroll框子没做适配,出现最后的内容别下方小黑条遮住的情况 3.适配了iPhoneX,却没有适配iPhoneXs Max 如果,你遇到过以上几

android屏幕适配方案

曾经看了android的屏幕适配方案,有非常多种.当中自己用到的一种是:先找一款主流的分辨率的android机,如:1080*1920的分辨率做基准,然后在这个基准上.调整好一切布局.图片.适配其它手机分辨率的手机.用百分比来调节.比如:在480*800的主流手机上,写了一个height=520,那么在480*800的手机上,这个控件的高度则为 480height = 520 * 屏幕高度/1920. 这种方案做屏幕适配. 项目遇到一个问题. 在剩余空间里.在1080*1920的手机上适配非常好

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

相关概念 分辨率:整个屏幕的像素数目,为了表示方便一般用屏幕的像素宽度(水平像素数目)乘以像素高度表示,形如1280x720,反之分辨率为1280x720的屏幕,像素宽度不一定为1280 屏幕密度:表示单位面积内的像素个数,通常用dpi为单位,即每英寸多少个像素点 px:长度单位,以具体像素为单位 dp:长度单位,与具体屏幕密度无关,显示的时候根据具体平台屏幕密度的不同最终转换为相应的像素长度,具体转换规则是: 1dp = (目标屏幕密度/标准密度)*px,标准密度为160dpi,例如,1dp长

Cocos2dx-Android屏幕适配方案

本文转载于http://www.cnblogs.com/zisou/p/cocos2d-xJIqiao3.html 先感叹一下吧~~android的各种分辨率各种适配虐我千百遍,每次新项目我依旧待它如初恋···· 每家公司都有自己项目工程适配的方案,这种东西就是没有最好,只有最适合!!! 这次新项目专项针对android,目的性强,适配方案我觉得2套图去兼容android各种分辨率: 我们先了解一下android手机上的屏幕密度: Android主要有以下几种屏: QVGA和WQVGA屏dens