`
寻梦者
  • 浏览: 637502 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

屏幕分辨率

阅读更多

基本单位:
  px:像素,是屏幕上显示数据的最基本的点。
  dp(dip):一种基于屏幕密度的抽象单位(与密度无关的像素)。
  dpi(dots per inch):每英寸所显示的点数(像素),也可称为像素密度。
  pt(磅):是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用。
  sp(与刻度无关的像素):scaled pixels(放大像素). 主要用于字体显示best for textsize,TextView 的字号可使用 sp 做单位。

屏幕尺寸Screen size
即显示屏幕的实际大小,按照屏幕的对角线进行测量。
为简单起见,Android把所有的屏幕大小分为四种尺寸:小,普通,大,超大(分别对应:small, normal, large, and extra large).
应用程序可以为这四种尺寸分别提供不同的自定义屏幕布局-平台将根据屏幕实际尺寸选择对应布局进行渲染,这种选择对于程序侧是透明的。


密度Density
根据像素分辨率,在屏幕指定物理宽高范围内能显示的像素数量。
在同样的宽高区域,低密度的显示屏能显示的像素较少,而高密度的显示屏则能显示更多的像素。
屏幕密度非常重要,因为其它条件不变的情况下,一共宽高固定的UI组件(比如一个按钮)在在低密度的显示屏上显得很大, 而在高密度显示屏上看起来就很小。
为简单起见,Android把所有的屏幕分辨率也分为四种尺寸:小,普通,大,超大(分别对应:small, normal, large, and extra large).
应用程序可以为这四种尺寸分别提供不同的资源-平台将透明的对资源进行缩放以适配指定的屏幕分辨率。

屏幕大小,分辨率与屏幕精度:

(原)Screen - 屏幕 - tonmyWu - tonmyWu
 
(原)Screen - 屏幕 - tonmyWu - tonmyWu
 
 注:分辨率与屏幕大小没有关系,屏幕大小是物理外观,而分辨率则是显示能力。


获取屏幕的分辨率
Android  提供 DisplayMetircs类可以很方便的获取分辨率,它提供了一种关于显示的通用信息,如显示大小,分辨率和字体。 
为了获取DisplayMetrics  成员,首先初始化一个对象如下: 

DisplayMetrics metrics  = new DisplayMetrics();  
WindowManager WM = (WindowManager)mcontext.getSystemService(Context.WINDOW_SERVICE);
WM.getDefaultDisplay().getMetrics(metrics);

//屏幕的分辨率
int width = dm.widthPixels() ; 
int height = dm.heightPixels();

注:构造函数DisplayMetrics  不需要传递任何参数;获得WindowManager 之后, getDefaultDisplay()  方法将取得的默认的显示信息,返回的是一个Display 对象,此对象的getMetrics(Metrics metrics)方法把分辨率信息传到 DisplayMetrics  对象中。

通过  DisplayMetrics.toString()方法可以获取到  DisplayMetrics的大部分信息,以下是模拟器上不同分辨率所有对应的信息: 

QVGA : {density=0.75, width=240, height=320, scaledDensity=0.75, xdpi=120.0, ydpi=120.0}
HVGA :  {density=1.0, width=320, height=480, scaledDensity=1.0, xdpi=160.0, ydpi=160.0}
WVGA : {density=1.5, width=480, height=800, scaledDensity=1.5, xdpi=240.0, ydpi=240.0}

其中,density为显示的逻辑分辨率;width及height就为屏幕分辨率(为绝对宽度与高度),与fields中的widthPixels及 heightPixels一致;scaleDensity与density一致;xdpi及ydpi为x方向与y方向的像素密度


如何计算密度(dpi)
1.标准是240*320画在1.5*2平方inch上。那么像每平方英寸有240*320/(1.5*2)=25600点,也就是一平方英寸的像素点为25600,所以dpi取为它的平方根160;如果你的dpi是120,那么它的密度就是0.75.
2.密度不只是与width有关,还与height有关,所以不管width是1.8还是1.3,它的密度都有可能是1;比如width是1.8,只要它的height是3/1.8的话,如果pixel为240*320的话,它的密度仍旧是1;同样如果width为1.3,只要它的 height为3/1.3的话,像素点为240*320,则密度也是1.
3.320*480/(1.5*2)得到单位平方英寸的点为51200,所以单位平方英寸是240*320画在1.5*2屏幕的2倍。但是这是平方英寸啊,算密度的时候要开平方的啊,所以应该是2开平方,是1.414吧,大致密度为1.5。


px与dip的关系:
Android中,在160dpi (mdpi)中, 1 dip= 1 px;
以此类推,在120dpi(ldpi)中, 1 dip = 0.75px;
                  在240dpi (hdpi)中,  1 dip = 1.5px;
                  在320dpi(xhdpi)中, 1dip = 2px;


如何做到与密度无关:
  如果屏幕密度为160,这时dp和sp和px是一样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2 寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。官方文档总结的计算公式为:pixels = dps * (density /160).
使用dip作为View的单位,这样就可以同时兼容各种不同的分辨率,不会造成UI的不可兼容。


使用dip作为控件的大小单位:
     1.布局文件:
        如果使用布局文件的形式定义控件,可直接在 android:layout_width 和 android:layout_height 中使用dip作为单位,来定义View的大  小,如下:
        <TextView android:layout_width="50dip" android:layout_height="50dip"></TextView>

    2.代码形式:
       如果是自定义的View控件,那么可能使用的是代码的形式来布局,比如:
        MyTextView myTextView = new MyTextView(this);
        可以调用myTextView.setWidth() 和 setHeight()来设置View宽度和高度,但是这两个方法接收的是以像素单位的值,也就说,如果要用代码的形式来以dip为单位设置View大小,则需要先将dip转换为px。
        这里可以使用如下方法,如下:
/**
 * 根据手机的分辨率从 px(像素) 的单位 转成为 dip(dp)
 */
 public static int px2dip(Context context, float pxValue) {
  final float scale = context.getResources().getDisplayMetrics().density ;
return (int) (pxValue / scale + 0.5f) ;
}
/** 
* 根据手机的分辨率从 dip(dp) 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density ;
return (int) (dpValue * scale + 0.5f) ;
 }
 将dip数值转换为px后,在调用setWidth() 和setHeight()来设置View宽度和高度。


默认的控件大小:

当在屏幕为160dpi,也就是density为1的情况下,所得到的控件的宽度和高度为android控件的默认的dip大小。
比如:Button 的 默认高度为 48dip。
状态栏的默认高度为25dip。



总结:对于UI布局,要使用dip或者dp作为单位,对应字体要是有sp作为单位,要尽量少使用px作为单位。

分享到:
评论

相关推荐

    易语言简单取和设置屏幕分辨率

    在IT领域,屏幕分辨率是计算机显示设备上的一个重要参数,它定义了屏幕上像素的数量。易语言是一种中文编程语言,旨在让编程变得更加简单、直观。在这个场景中,"易语言简单取和设置屏幕分辨率"是一个关于使用易语言...

    Qt获取屏幕分辨率

    在Qt编程中,获取屏幕分辨率是一项常见的需求,特别是在开发图形用户界面时,了解用户的显示器设置对布局和设计至关重要。本文将详细讲解如何使用Qt库来获取屏幕分辨率,并提供相关的实践示例。 Qt提供了QScreen类...

    使vb窗体可以自适应屏幕分辨率的大小

    "VB 窗体自适应屏幕分辨率大小" VB 窗体自适应屏幕分辨率大小是指在 VB 中使窗体可以根据屏幕分辨率的变化而自适应调整大小,以确保窗体在不同屏幕分辨率下的正确显示。本文将详细介绍如何实现 VB 窗体的自适应屏幕...

    设置分辨率_windows修改屏幕分辨率_

    在Windows操作系统中,屏幕分辨率是决定屏幕上图像显示大小和清晰度的重要设置。它是指屏幕上像素的密度,通常以水平像素数乘以垂直像素数来表示,例如1920x1080。屏幕分辨率越高,屏幕上显示的内容就越细腻,但同时...

    C# 设置屏幕分辨率

    在IT领域,特别是软件开发行业中,使用C#编程语言来设置屏幕分辨率是一个常见的需求,尤其是在游戏开发、系统级应用或需要特定显示配置的应用程序中。本文将深入探讨如何使用C#来实现屏幕分辨率的更改,并解析相关的...

    labview 自适应屏幕分辨率程序

    在“labview 自适应屏幕分辨率程序”这个主题中,我们主要关注的是如何使LabVIEW应用程序在不同分辨率的屏幕上正常显示并保持良好的用户体验。 1. **屏幕分辨率理解**: - 屏幕分辨率是指屏幕上像素点的数量,通常...

    Delphi获得屏幕及设置屏幕分辨率

    在Delphi编程环境中,改变或获取屏幕分辨率是一项实用的功能,特别是在开发系统级或者桌面管理类的应用程序时。本文将深入探讨如何使用Delphi来实现这一目标。 首先,我们需要理解屏幕分辨率的基本概念。屏幕分辨率...

    可以一键修改屏幕分辨率的小软件

    标题中的“可以一键修改屏幕分辨率的小软件”指的是一个简化了屏幕分辨率设置过程的应用程序,它让用户无需通过操作系统复杂的设置菜单就能快速调整显示器的分辨率。在Windows操作系统中,通常需要通过控制面板或者...

    易语言源码易语言屏幕分辨率监控源码.rar

    在“易语言屏幕分辨率监控源码”这个项目中,我们可以深入学习到如何使用易语言来获取并监控计算机的屏幕分辨率信息。 屏幕分辨率是描述显示器显示能力的重要参数,包括屏幕的宽度和高度,通常以像素为单位。在编程...

    VFP设置屏幕分辨率

    ### VFP中设置屏幕分辨率的方法解析 在Visual FoxPro(VFP)的程序开发中,适配不同屏幕分辨率是一项关键的技术。特别是在用户界面设计时,确保应用能够在各种显示器上正常显示,是提升用户体验的重要环节。本文将...

    系统屏幕分辨率修改

    在计算机领域,系统屏幕分辨率是决定屏幕上像素数量和图像清晰度的重要设置。分辨率越高,屏幕上显示的像素越多,图像就越细腻。"系统屏幕分辨率修改"这个主题涉及到的是如何调整计算机显示器的显示设置,以适应不同...

    易语言设置屏幕分辨率

    在IT领域,尤其是在编程实践中,有时我们需要对计算机的硬件特性进行调整,其中之一就是改变屏幕分辨率。易语言,作为一款中国本土开发的、面向初学者的编程语言,提供了方便的接口来实现这一功能。本篇文章将深入...

    js获取屏幕分辨率的方法

    ### JS 获取屏幕分辨率的方法 在Web开发中,获取用户的屏幕分辨率是实现响应式设计和优化用户体验的重要步骤之一。本文将详细介绍如何使用JavaScript来获取屏幕分辨率,并探讨这些信息如何帮助我们实现div元素的...

    labview自适应屏幕分辨率

    在现代多显示器和不同分辨率的环境中,让LabVIEW程序自适应屏幕分辨率是提升用户体验的关键。本篇文章将深入探讨如何在LabVIEW中实现窗口的自适应功能,确保程序在各种屏幕尺寸下都能良好地显示。 首先,我们需要...

    查看安卓手机屏幕分辨率

    在安卓操作系统中,屏幕分辨率是衡量手机显示屏清晰度的一个关键指标,它决定了屏幕上像素的数量以及图像的细腻程度。本文将详细介绍如何查看安卓手机的屏幕分辨率,并提供一个名为“查看屏幕分辨率工具”的应用来...

    获取屏幕分辨率的VB源码

    在VB(Visual Basic)编程中,获取屏幕分辨率是一项常见的任务,尤其在开发桌面应用程序时,了解用户显示器的尺寸有助于提供良好的界面布局。本篇将详细解释如何使用VB代码来获取屏幕分辨率,并涉及到WIM(Windows ...

    authorware改变屏幕分辨率

    在Authorware中,改变屏幕分辨率是实现全屏显示的关键步骤,这有助于提高用户体验,特别是进行教学或演示时,可以让内容更加突出,减少外界干扰。下面我们将详细探讨如何在Authorware中操作这一过程。 首先,我们...

    LabVIEWlabview论坛-自适应屏幕分辨率.rar

    这个“LabVIEWlabview论坛-自适应屏幕分辨率.rar”压缩包文件很可能包含了关于如何在LabVIEW中实现程序界面自适应不同屏幕分辨率的讨论和资源。在现代多设备、多分辨率的环境下,创建能够自动调整大小和布局的用户...

    易语言屏幕分辨率设置源码

    "屏幕分辨率设置源码"是指使用易语言编写的程序,能够改变计算机显示器的显示分辨率。在编程领域,屏幕分辨率的设置涉及到操作系统接口的调用,以及图形用户界面(GUI)的设计。以下是对易语言屏幕分辨率设置源码的...

    anrdroid测试屏幕分辨率

    本文将详细讨论如何使用特定的工具,特别是针对"anrdroid测试屏幕分辨率"这一主题,来有效地测试和优化应用程序在不同分辨率屏幕上的表现。 首先,我们需要理解Android设备的屏幕分辨率。屏幕分辨率是指屏幕水平和...

Global site tag (gtag.js) - Google Analytics