Android小知识——手机屏幕的适配

转载 2016年05月30日 11:45:58

import android.content.Context;publicclassDensityUtil{

/**     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)     */

publicstaticint dip2px(Context context,float dpValue){

finalfloat scale = context.getResources().getDisplayMetrics().density;

return(int)(dpValue * scale +0.5f);}

/**     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp     */

publicstaticint px2dip(Context context,float pxValue){

finalfloat scale = context.getResources().getDisplayMetrics().density;

return(int)(pxValue / scale +0.5f);}}

重点,对density的理解

float scale = getResources().getDisplayMetrics().density;

//这个得到的不应该叫做密度,应该是密度的一个比例。不是真实的屏幕密度,而是相对于某个值的屏幕密度。//也可以说是相对密度/** * The logical density of the display. This is a scaling factor for the * Density Independent Pixel unit, where one DIP is one pixel on an * approximately 160 dpi screen (for example a 240x320, 1.5"x2" screen), * providing the baseline of the system's display. Thus on a 160dpi * screen this density value will be 1; on a 120 dpi screen it would be * .75; etc. * * This value does not exactly follow the real screen size (as given by * xdpi and ydpi, but rather is used to scale the size of the overall UI * in steps based on gross changes in the display dpi. For example, a * 240x320 screen will have a density of 1 even if its width is * 1.8", 1.3", etc. However, if the screen resolution is increased to * 320x480 but the screen size remained 1.5"x2" then the density would * be increased (probably to 1.5). */

/** * 显示器的逻辑密度,这是【独立的像素密度单位(首先明白dip是个单位)】的一个缩放因子, * 在屏幕密度大约为160dpi的屏幕上,一个dip等于一个px,这个提供了系统显示器的一个基线(这句我实在翻译不了)。 * 例如:屏幕为240*320的手机屏幕,其尺寸为 1.5"*2"  也就是1.5英寸乘2英寸的屏幕 * 它的dpi(屏幕像素密度,也就是每英寸的像素数,dpi是dot per inch的缩写)大约就为160dpi, * 所以在这个手机上dp和px的长度(可以说是长度,最起码从你的视觉感官上来说是这样的)是相等的。 * 因此在一个屏幕密度为160dpi的手机屏幕上density的值为1,而在120dpi的手机上为0.75等等 * (这里有一句话没翻译,实在读不通顺,不过通过下面的举例应该能看懂) * 例如:一个240*320的屏幕尽管他的屏幕尺寸为1.8"*1.3",(我算了下这个的dpi大约为180dpi多点) * 但是它的density还是1(也就是说取了近似值) * 然而,如果屏幕分辨率增加到320*480 但是屏幕尺寸仍然保持1.5"*2" 的时候(和最开始的例子比较) * 这个手机的density将会增加(可能会增加到1.5) */

计算公式

DisplayMetrics metric =newDisplayMetrics();      

getWindowManager().getDefaultDisplay().getMetrics(metric);

int width = metric.widthPixels;// 宽度(PX)

int height = metric.heightPixels;// 高度(PX)

float density = metric.density;// 密度(0.75 / 1.0 / 1.5)

int densityDpi = metric.densityDpi;// 密度DPI(120 / 160 / 240)

需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。

   比如说,一部240×320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320×427。

   因此,研究之后发现,若没有设定多分辨率支持的话,

Android系统会将240×320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,

   这样的话就大大影响了程序的编码。

   所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens节点,如下:

android:smallScreens=”true”
android:normalScreens=”true”
android:largeScreens=”true”
android:resizeable=”true”
android:anyDensity=”true” />

这样当前的Android程序就支持了多种分辨率,那么就可以得到正确的物理尺寸了。

density = dpi/160 

px = dip * density

Android知识梳理之屏幕适配全攻略

引言: 我相信Android碎片化问题是让所有的Android开发者都比较头疼的问题.尤其是屏幕适配这一块儿.想要自己的app在不同的设备上面都有一个比较好的显示效果.就必须做好相应的屏幕适配.本文是...
  • unreliable_narrator
  • unreliable_narrator
  • 2016年05月04日 16:34
  • 5198

android屏幕适配知识

android屏幕适配须知: android屏幕适配原理: http://blog.csdn.net/tanqiantot/article/details/11174011 关于...
  • u010659146
  • u010659146
  • 2014年06月30日 11:28
  • 236

Android关于适配的相关知识。

本文出自:http://www.androidlearner.net/android-multi-screen-about.html
  • RockCode_li
  • RockCode_li
  • 2014年07月25日 16:00
  • 671

Android之机型适配

Android中的机型适配 在软件开发的过程中,为了让软件在不同的场景下都可以使用,所以机型适配是不可或缺并且非常重要耗时的一个环节...
  • u012954720
  • u012954720
  • 2016年10月04日 18:52
  • 2153

Android屏幕适配方案(上)

Android开发中,屏幕适配始终是第一个要解决的问题,这一点在实际写的时候其实我们都会注意,然而现在我觉得整理一下屏幕适配方面的知识以便记录,博客写的太少,始终得多记录一下 首先关于屏幕,主流的...
  • YANGDAHUAN
  • YANGDAHUAN
  • 2017年03月03日 20:20
  • 3541

Android 屏幕适配方案

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45460089; 本文出自:【张鸿洋的博客】 1、概述大家在Andr...
  • lmj623565791
  • lmj623565791
  • 2015年05月04日 13:08
  • 314936

Android适配总结

做Android适配的同学们头疼的一件事就是机型的适配了,因为Android系统开源的缘故,市面上有太多太多的手机型号,厂商私自定制rom,不同的屏幕尺寸,不同的屏幕分辨率,不同的系统版本不同的API...
  • foolish0421
  • foolish0421
  • 2017年03月19日 12:45
  • 505

Android屏幕适配全攻略(最权威的官方适配指导)

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而...
  • jdsjlzx
  • jdsjlzx
  • 2015年05月21日 14:33
  • 146150

关于Android的语言适配

1:转载地址      今天我们老总开会时让我们支持英语,和韩语,及日语。因为我们是做旅游的,马上要拓展国外业务故此了解下此方面的知识。 多国语言:在res目录下建立不同名称的values文...
  • LSCcsdn
  • LSCcsdn
  • 2015年06月23日 18:05
  • 1644

Android开发:最全面、最易懂的Android屏幕适配解决方案

前言 Android的屏幕适配一直以来都在折磨着我们Android开发者,本文将结合: Google的官方权威适配文档郭霖: Android官方提供的支持不同屏幕大小的全部方法Stormzhang...
  • wangwangli6
  • wangwangli6
  • 2017年03月18日 16:37
  • 7686
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android小知识——手机屏幕的适配
举报原因:
原因补充:

(最多只允许输入30个字)