怎样获取android 获取屏幕密度手机屏幕的大小

Android平台如何获得屏幕尺寸?
卢旭| 14:59|次浏览|
系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术,本文为大家讲解在Android平台上如何获得屏幕尺寸。
我创建了一些自定义元素,想通过编程将它们放到右上角(距上部边缘n像素,右部边缘m像素),因此我需要知道屏幕具体的宽度和高度,然后确定具体的位置:
int px = screenWidth -
int py = screenWidth -
请问,在Activity如何获取屏幕的宽度和高度呢?
(最佳答案)
如果你想获得屏幕的像素大小,可以使用getSize:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
如果不在Activity中,你可以通过WINDOW_SERVICE获取Display的默认值:
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
如果没有getSize,你可以按如下方法使用getWidth和getHeight工具:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
// deprecated
int height = display.getHeight();
// deprecated
我觉得可以这样解决:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
如果不起作用,你可以试试如下代码:前两行是关于DisplayMetrics的代码,其中包括宽度像素和高度像素的内容:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
metrics.heightP
metrics.widthP
我所说的可能不是你需要的答案,但是我认为了解一下还是很有用的。如果你需要View的尺寸,但是还没有设定好layout,就执行了相关代码,你可以用View.getViewTreeObserver().addOnGlobalLayoutListener()创建一个ViewTreeObserver.OnGlobalLayoutListener,然后输入有关View的尺寸的代码,这样就可以及时纠正layout的相关参数。
用XML完成动态缩放,可以使用属性android:layout_weight。下面的例子是synic在上回答的改良版,表达的内容是:button占据屏幕的75%(weight =
.25),text view占25%(weight = .75)。
&LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"&
&Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight=".25"
android:text="somebutton"&
&TextView android:layout_width="fill_parent"
android:layout_height="Wrap_content"
android:layout_weight=".75"&
&/LinearLayout&
文章选自社区,鉴于其内容对于开发者有所帮助,现将文章翻译于此,供大家参考及学习。9Tech将每日持续更新,读者可点击,查看全部译文内容。同时,我们也招募志同道合的技术朋友共同翻译,造福大家!报名请发邮件至zhangqi_wj@。
来自:9TechResolution and Screen Sizes
Phone 8支持WVGA、WXGA、720p三种分辨率,这与只支持一种WVGA分辨率的Windows Phone 7.1有很大不同,在Windows Phone 8 Update 3中,还加入了对1080p分辨率的支持,下面介绍了如何对不同分辨率进行适配,以及与其他平台的对比。
WVGA:分辨率480*800,纵横比:15:9,与Windows Phone 7.1唯一支持的分辨率相同。
WXGA:分辨率768*1280,纵横比15:9,对480*800按照1.6x倍率缩放。
720p:分辨率720*1280,纵横比16:9,对480*853按照1.5倍缩放(对480*800按照1.5倍缩放后在高度上再增加80个像素)
1080p:分辨率,纵横比16:9,对480*853按照2.25倍缩放(注意:在系统内部,对于1080p分辨率的屏幕,ScaleFactor属性返回的值仍然与720p相同,是1.5,而不是其实际缩放倍率2.25,系统内部实际上是将各种针对于720p的图片资源应用于1080p分辨率,而不是为1080p分辨率单独准备一套资源)。
下图展示了对于不同分辨率的显示效果。
iPhone与Windows Phone情况类似,支持的分辨率较少,目前主流只有普通屏幕的320*480,Retina屏幕的640*960和,适配起来也相对容易。但是Android平台由于其特有的开放性,屏幕尺寸和其所支持的分辨率也多种多样,主流分辨率有480*800、480*854、540*960、720*80等,同时,对于Android 4.0以上的系统,有些厂家使用了系统自带的虚拟键盘,这样会占用一定的屏幕高度,这样,对于应用开发者来说,要做很多工作来确保显示给用户的界面不会出现偏差与失真。
DPI即Dots&per&inch,表示每英寸的点数,也称像素密度。只知道分辨率和屏幕尺寸还不能很好的描述出屏幕的特性,例如,对于同样分辨率、大小分别为4英寸和14英寸的屏幕,他们的DPI显然不同,4英寸屏幕清晰度要远好于14英寸的屏幕。
各开发平台都提供了获取屏幕DPI的接口,Android中利用DisplayMetrics获取DPI,IOS利用UIScreen获取DPI,与这些接口相对应,在windows phone和windows应用商店应用开发中您可是使用DisplayProperties或DisplayInformation,以下详细介绍windows phone和windows平台上获取屏幕DPI的方法。
您可以使用DisplayProperties类的LogicalDpi&属性获取屏幕DPI,该属性为只读属性。该类位于&Windows.Graphics.Display命名空间,只要引入该命名空间,您可以在程序的任何地方获取屏幕DPI。但是DisplayProperties在windows 8.1之后将不再被支持,相代替微软为您提供了DisplayInformation,DisplayInformation不仅提供了获取屏幕DPI LogicalDpi&属性,还提供了RawDpiX和RawDpiY属性以获取沿X轴和Y轴每英寸的点数。所以您最好使用DisplayInformation,以便您的程序能在windows 8.1及更高版本中能够很好的被支持。
更多信息请参见DisplayInformation.、DisplayProperties、获取DPI示例
由于所有的Windows Phone 7.1手机只支持一种分辨率,所以只要你的布局在一台Windows Phone 7.1上展示良好,其在所有的Windows Phone
7.1手机上都会显示良好,你无需考虑每个控件如何伸展和流动。
在Windows Phone 8中,你就需要不得不调整你的控件和UI元素的布局,使其在每个分辨率的宽高比下都会正常显示。由于Windows Phone
8 Update 3支持两种不同的屏幕宽高比:15:9和16:9,对于一种宽高比显示正常的控件可能会在另一种宽高比下出现预料之外的情况。
为了使页面在WVGA、WXGA、720p、1080p的分辨率下正确显示,不要在代码中将控件的高度、宽度和间距写成固定的。在你从工具箱中将空间拖出来后,请将自动添加的间距删除或者仔细进行测试。
你可以使用像Grid control这样的容器来创建自适应的布局,将控件放到grid中,并使用*和Auto来设置行和列的高度和宽度,而不是将控件的高度和宽度固定的写在代码中。这样,应用程序就会拉伸或者收缩来自动适应当前用户手机的高度和宽度。如果你将宽度和高度固定地写在代码中,则布局就不会根据分辨率来自动适配了。
注意:一定要确保你的应用在每一种宽高比(15:9和16:9)下进行测试,对每一种分辨率进行测试并不是严格要求的,除非你为每一种分辨率使用了不同的图片资源。
下面的XAML展示了使用Grid control来实现这些布局的代码。
这个应用对于WVGA、WXGA、720p、1080p具有自适应的动态布局,由于将输出框的Height属性设置成了Auto,它在WVGA和WXGA的手机上具有相同的尺寸,按钮会缩放以适应剩余的空间。在720p和1080p分辨率下,按钮会稍稍高于WVGA和WXGA分辨率上的尺寸。
你可以设置MinHeight和MaxHeight属性来设置最小高度和最大高度,一定要记住,在屏幕上任何方向小于8mm的元素都会无法使用户可靠地按下,你可以使用MinHeight和MinWidth来确保交互控件不会过度缩小。你可以结合使用这些属性来使布局对于WVGA分辨率缩小,但是对于更高的分辨率不会伸展。
在iPhone上的情况
基于IOS SDK 4.0及以后版本的应用程序需要在不同分辨率设备下运行,iPhone以一种简单的方式来支持多分辨率屏幕的情况,大部分处理不同类型屏幕的工作已经由系统框架处理。但应用程序本身也需要做些工作来修正位图图片,如果应用本身要利用像素,也需要做额外的工作。但是由于iPhone设备的规格比较统一,屏幕尺寸和分辨率种类较Windows Phone还要少,且屏幕的宽度完全一致,只是在高度上略有差异,适配起来也更加简单。
iPhone的3.5寸屏幕有普通屏幕320*480和Retina屏幕640*960,这两种分辨率恰好长宽均为2倍,iPhone中规定,对于普通屏幕,一个像素对应一个“点”,对于Retina屏幕,两个像素对应一个“点”,所以这两种屏幕都是320*480个点,另外还有iPhone5系列的640*1136,转换成点就是320*568,所以只需考虑在高度上的适配即可。一般情况下,只需要在设置控件位置之前,判断一下当前的self.view的高度,即可按需安排控件的位置。
在Android上的情况
Android程序的分辨率种类和像素密度多种多样,对于应用程序,Android系统对于各种设备提供了一致的开发环境并完成了大部分适配用户界面的工作,同时,系统也提供了一些API来让你针对特定分辨率和像素密度来控制应用程序的用户界面。在安排Android应用程序的布局之前,首先要了解以下的概念:
屏幕尺寸:屏幕的物理尺寸,通过屏幕的对角线来衡量,为了简单起见,Android将屏幕尺寸分成了四个广义的尺寸:小、正常、大、特大。
屏幕密度:屏幕物理区域内的像素量,通常指的是DPI(每英寸点数),例如,一个低密度屏幕与正常密度或者高密度的屏幕相比,在给定区域内具有较少的点数。为了简单起见,Android将屏幕密度分成了四个广义密度:低、中、高和超高。
方向:从用户的视角看到的屏幕的方向:横向或者纵向。也就是说屏幕的宽高比是宽的或者是高的。
分辨率:屏幕上的物理像素总数,当添加对多屏幕的支持时,应用程序并不直接与分辨率打交道,而是应该关心屏幕尺寸和像素密度。
密度独立的像素(dp):当你定义UI布局的时候应该使用的虚拟像素单元,以一种密度无关的方式来表达布局。
从Android1.6开始,就已经提供了对多种屏幕尺寸和密度的支持,你可以利用系统的这种特性来优化你的应用程序,使其不仅能正确显示,还能够为使用者在每一种屏幕上提供最佳的用户体验。在为不同的屏幕设计UI时,设定一个基准,比如以480*800、密度为1.5定为hdpi base,以720*1280、密度为2.0定为xhdpi base。如此设置,其他相同密度值的分辨率,都会比这些基准略大,屏幕变大之后的布局调整要比变小的调整要容易的多,在需要调整的地方进行判断,并调整空间的LayoutParams即可。
图像、视频、音频和图标这样的资源占据了一个应用的很大部分,将对应所有分辨率的资源都包含在你的应用中会消耗应用中的许多空间,对于大多数应用,我们建议只包含WXGA的资源,WXGA的资源质量很高,并且对其他分辨率自适应尺寸也比较好。
由于WXGA/WVGA和720p/1080p分辨率有着不同的宽高比,在一些情况下可能需要在应用中包含针对不同分辨率的独特图像。当你想要为你的应用程序添加针对所有分辨率的支持时,可以使用下边的步骤检测设备的分辨率然后在运行时载入相关图片。
在运行时载入与分辨率相关的图片
在你的工程中,添加针对WVGA、WXGA、720p分辨率的图片,本例中,我们将其命名为MyImage.screen-wvga.png、MyImage.screen-wxga.png和MyImage.screen-720p.png。
将图片的Copy to Output Directory属性设置为copy always。
在你的工程中添加一个名为ResolutionHelper.cs的类,并将下属代码复制并粘贴到其中。
public enum Resolutions { WVGA, WXGA, HD };
public static class ResolutionHelper
private static bool IsWvga
return App.Current.Host.Content.ScaleFactor == 100;
private static bool IsWxga
return App.Current.Host.Content.ScaleFactor == 160;
private static bool IsHD
return App.Current.Host.Content.ScaleFactor == 150;
public static Resolutions CurrentResolution
if (IsWvga) return Resolutions.WVGA;
else if (IsWxga) return Resolutions.WXGA;
else if (IsHD) return Resolutions.HD;
else throw new InvalidOperationException("Unknown resolution");
上面的类中使用ScaleFactor属性来确定设备的分辨率。
添加一个名为MultiResImageChooser.cs的类,并在其中包含下属代码。这个类使用前面创建的ResolutionHelper.cs类来确定设备的分辨率,并针对检测到的分辨率,根据相关的图片URI创建一个新的BitmapImage并返回。
using System.Windows.Media.I
public class MultiResImageChooserUri
public Uri BestImage
switch (ResolutionHelper.CurrentResolution)
case Resolutions.HD:
return new Uri("MyImage.screen-720p.jpg", UriKind.Relative);
case Resolutions.WXGA:
return new Uri("MyImage.screen-wxga.jpg", UriKind.Relative);
case Resolutions.WVGA:
return new Uri("MyImage.screen-wvga.jpg", UriKind.Relative);
throw new InvalidOperationException("Unknown resolution type");
在MainPage.xaml中,添加一个Image元素并将它的Source属性绑定到MultiResImageChooser.cs类的返回值上。
在App.xaml中,在元素中添加下属xmlns命名空间映射。
xmlns:h="clr-namespace:MultiResSnippet"
在App.xaml中,添加下述应用程序资源。
完成上述步骤之后,系统会自动适配对应分辨率的图像资源,对于720p和1080p的分辨率,系统仍然使用的是同一套资源,自动按比例进行缩放。
在iPhone上的情况
在iPhone上为不同分辨率提供特定图片资源可以有如下几种方式:在应用程序中为每一种分辨率提供单独的图片、提供高分辨率图片供其缩放、提供矢量内容等。如果不对资源进行自动适配,对于3.5寸普通屏幕和Retina屏幕,由于其宽高比例一致,自动缩放之后不会造成比例失真,对于4寸屏幕,则会有两种选择:1、 拉伸以铺满屏幕(这样会造成比例失真),2、保持比例(两端各留出44个点的高度的黑边)。所以,为了能够完美支持4寸Retina屏幕,最好为其提供对应特定分辨率的图片资源。
在Android上的情况
在Android上面也一样,对于多分辨率,在res目录下,创建drawable-ldpi、drawable-mdpi、drawable-hdpi三个目录,分别存放低分辨率、中分辨率、高分辨率的图片,系统会根据机器的分辨率分别在这几个文件夹中寻找对应的图片。如果不想提供多套图片,则可以只提供最大分辨率的图片,让系统自动执行图片缩放。同时,对于Android系统,有一种创新的格式叫做“9.png”,这是一种可以拉伸却不失真不变形的图片格式,充分利用这种图片,也可以达到很好的效果。
为了针对所有分辨率显示启动画面,使用名称为SplashScreenImage.jpg分辨率为768*1280的单个文件,手机会自动将其缩放到正确的尺寸。
如果想要对所有分辨率提供像素完善的启动画面,你可以以下面的名称来添加图片。
SplashScreenImage.Screen-WVGA.jpg
SplashScreenImage.Screen-WXGA.jpg
SplashScreenImage.Screen-720p.jpg
Phone 8 Update 3将会默认在1080p的手机上使用720p的启动画面。
所有的启动画面图片文件必须在应用程序工程的根目录下。
更多信息,可以查看如何为Windows
Phone创建启动画面。
在iPhone上的情况
对iPhone设置启动画面,如果普通分辨率的资源名称为:Default.png,则其Retina屏幕对应图片应该是Default@2x.png,4英寸屏幕对应的图片应该是Default-568h@2x.png。
在Android上的情况
在Android上,启动画面是作为一层布局写入到程序中的,载入启动画面的方法与载入背景图片的方法一致,可以只提供一张图片供系统自动缩放,也可以提供多套资源供不同的分辨率使用,这里同样推荐使用“9.png”图片格式,以达到只提供一张图片,且缩放情况下也不会发生失真的目的。
对于磁贴和应用程序图标,你必须只添加针对WXGA分辨率的图片,手机会针对WVGA、720p和1080p的屏幕自动将图片缩放到正确的尺寸。更多关于磁贴以及其尺寸的信息,请参见Windows Phone的磁贴。
在iPhone上的情况
在iPhone中,默认情况下可以只提供一张57*57的图片Icon.png作为应用程序图标,同时提供一张29*29的图片Icon-settings.png作为设置区域通用的图标。以上图标在Retina屏幕上会自动缩放适应,为了提供高分辨率的屏幕,可以提供114*114的图片Icon@2x.png和Icon-settings@2x.png的图片。
在Android上的情况
在Android设备上,由于分辨率众多,应用程序的图标也要针对每种分辨率进行设计,通常情况下,需要有36*36的LDPI图标、48*48的MDPI图标、72*72的HDPI图标、96*96的XHDPI图标,这些图标分别放在drawable-ldpi、drawable-mdpi、drawable-hdpi和drawable-xhdpi文件夹中,这样即可适应不同分辨率的手机。
在Android中,主要以密度独立像素(dp)来进行描述,以dp来描述的启动图标为48*48dp,通知栏上的图标大小为24*24dp。
Windows Phone 的布局
Windows Phone 的屏幕方向
Windows Phone 的布局和面板
Windows Phone 的磁贴
Windows Phone 的磁贴设计准则
其它微软站点    遇到一个问题,我的地图浮标图片在WVGA手机上正好,在QVGA上就显的太大,所以我要根据屏幕的不同调整浮标的大小使其在QVGA大小合适。有的同事提出了依据分辨率来区分不同的屏幕,但是单WVGA就支持好几种不同的分辨率,QVGA又支持好几种。。。而且更神奇的时候,有时候,通过代码获取屏幕分辨率竟然得到了&320 x 427&,Android文档是不支持这种分辨率的,所以依据分辨率来区分不同的屏幕是行不通的。
    还好通过仔细研读文档,&各种VGA的density是不同的,(hdpi: 240 , ldpi: 120 , mdpi: 160 , xhdpi: 320)&,所以只要求出不同屏幕的density,就可以知道该手机属于的屏幕类型。
首先是几个基本概念:
1.屏幕尺寸Screen size
即显示屏幕的实际大小,按照屏幕的对角线进行测量。
为简单起见,Android把所有的屏幕大小分为四种尺寸:小,普通,大,超大(分别对应:small, normal, large, and extra large).
应用程序可以为这四种尺寸分别提供不同的自定义屏幕布局-平台将根据屏幕实际尺寸选择对应布局进行渲染,这种选择对于程序侧是透明的。
2.屏幕长宽比Aspect ratio
长宽比是屏幕的物理宽度与物理高度的比例关系。应用程序可以通过使用限定的资源来为指定的长宽比提供屏幕布局资源。
3.屏幕分辨率Resolution
在屏幕上显示的物理像素总和。需要注意的是:尽管分辨率通常用宽x高表示,但分辨率并不意味着具体的屏幕长宽比。
在Andorid系统中,应用程序不直接使用分辨率。
4.密度Density
根据像素分辨率,在屏幕指定物理宽高范围内能显示的像素数量。
在同样的宽高区域,低密度的显示屏能显示的像素较少,而高密度的显示屏则能显示更多的像素。
屏幕密度非常重要,因为其它条件不变的情况下,一共宽高固定的UI组件(比如一个按钮)在在低密度的显示屏上显得很大, 而在高密度显示屏上看起来就很小。
为简单起见,Android把所有的屏幕分辨率也分为四种尺寸:小,普通,大,超大(分别对应:small, normal, large, and extra large).
应用程序可以为这四种尺寸分别提供不同的资源-平台将透明的对资源进行缩放以适配指定的屏幕分辨率。
密度无关的像素( DIP )
指一个抽象意义上的像素,程序用它来定义界面元素。它作为一个与实际密度无关的单位,帮助程序员构建一个布局方案(界面元素的宽度,高度,位置)。
一个与密度无关的像素,在逻辑尺寸上,与一个位于像素密度为 160DPI的屏幕上的像素是一致的,这也是Android平台所假定的默认显示设备。在运行的时候,平台会以目标屏幕的密度作为基准,&透明地&处理所 有需要的DIP缩放操作。要把密度无关像素转换为屏幕像素,可以用这样一个简单的公式: pixels
= dips * (density / 160)。举个例子,在 DPI为 240的屏幕上, 1个 DIP等于 1.5个物理像素。我们强烈推荐你用 DIP来定义你程序的界面布局,因为这样可以保证你的 UI在各种分辨率的屏幕上都可以正常显示
&&在一个Activity的onCreate方法中,写入如下代码:
&&&&&&&&DisplayMetrics metric = new DisplayMetrics();&&&&&&&&getWindowManager().getDefaultDisplay().getMetrics(metric);&&&&&&&&int width = metric.widthP&&// 屏幕宽度(像素)&&&&&&&&int height = metric.heightP&&// 屏幕高度(像素)&&&&&&&&float density&= metric.&&// 屏幕密度(0.75 / 1.0 / 1.5)&&&&&&&&int densityDpi = metric.densityD&&// 屏幕密度DPI(120 / 160 / 240)
&&&&但是,需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。比如说,一部240x320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320x427。因此,研究之后发现,若没有设定多分辨率支持的话,Android系统会将240x320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,这样的话就大大影响了程序的编码。所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens节点,具体的内容如下:&&&&&&&&&supports-screens&&&&&&&&&&&&android:smallScreens="true"&&&&&&&&&&&&android:normalScreens="true"&&&&&&&&&&&&android:largeScreens="true"&&&&&&&&&&&&android:resizeable="true"&&&&&&&&&&&&android:anyDensity="true"/&
&&&&这样的话,当前的Android程序就支持了多种分辨率,那么就可以得到正确的物理尺寸了。
int&screenWidth&&=&getWindowManager().getDefaultDisplay().getWidth();&&&&&&&&&
int&screenHeight&=&getWindowManager().getDefaultDisplay().getHeight();&&&&&&&&
Log.e(TAG&+&"&&getDefaultDisplay",&"screenWidth="&+&screenWidth&+&";&screenHeight="&+&screenHeight);&&
DisplayMetrics&dm&=&new&DisplayMetrics();&&
dm&=&getResources().getDisplayMetrics();&&
float&density&&=&dm.&&&&&&&&&&
int&densityDPI&=&dm.densityD&&&&&&&
float&xdpi&=&dm.&&&&&&&&&&&&&
float&ydpi&=&dm.&&
Log.e(TAG&+&"&&DisplayMetrics",&"xdpi="&+&xdpi&+&";&ydpi="&+&ydpi);&&
Log.e(TAG&+&"&&DisplayMetrics",&"density="&+&density&+&";&densityDPI="&+&densityDPI);&&
screenWidth&&=&dm.widthP&&&&&&&&
screenHeight&=&dm.heightP&&&&&&&
Log.e(TAG&+&"&&DisplayMetrics(111)",&"screenWidth="&+&screenWidth&+&";&screenHeight="&+&screenHeight);&&
dm&=&new&DisplayMetrics();&&
getWindowManager().getDefaultDisplay().getMetrics(dm);&&
density&&=&dm.&&&&&&&&
densityDPI&=&dm.densityD&&&&&&&
xdpi&=&dm.&&&&&&&&&&&
ydpi&=&dm.&&
Log.e(TAG&+&"&&DisplayMetrics",&"xdpi="&+&xdpi&+&";&ydpi="&+&ydpi);&&
Log.e(TAG&+&"&&DisplayMetrics",&"density="&+&density&+&";&densityDPI="&+&densityDPI);&&
int&screenWidthDip&=&dm.widthP&&&&&&&&&&
int&screenHeightDip&=&dm.heightP&&&&&&&&
Log.e(TAG&+&"&&DisplayMetrics(222)",&"screenWidthDip="&+&screenWidthDip&+&";&screenHeightDip="&+&screenHeightDip);&&
screenWidth&&=&(int)(dm.widthPixels&*&density&+&0.5f);&&&&&&&&
screenHeight&=&(int)(dm.heightPixels&*&density&+&0.5f);&&&&&&&
Log.e(TAG&+&"&&DisplayMetrics(222)",&"screenWidth="&+&screenWidth&+&";&screenHeight="&+&screenHeight); &
重中之重:
density值表示每英寸有多少个显示点,与分辨率是两个不同的概念:
Android主要有以下几种屏:
QVGA和WQVGA屏density=120;
HVGA屏density=160;
WVGA屏density=240;
下面以480dip*800dip的WVGA(density=240)为例,详细列出不同density下屏幕分辨率信息:
当density=120时 屏幕实际分辨率为240px*400px (两个点对应一个分辨率)状态栏和标题栏高各19px或者25dip横屏是屏幕宽度400px 或者800dip,工作区域高度211px或者480dip竖屏时屏幕宽度240px或者480dip,工作区域高度381px或者775dip
density=160时 屏幕实际分辨率为320px*533px (3个点对应两个分辨率)状态栏和标题栏高个25px或者25dip横屏是屏幕宽度533px 或者800dip,工作区域高度295px或者480dip竖屏时屏幕宽度320px或者480dip,工作区域高度508px或者775dip
density=240时 屏幕实际分辨率为480px*800px (一个点对于一个分辨率)状态栏和标题栏高个38px或者25dip横屏是屏幕宽度800px 或者800dip,工作区域高度442px或者480dip竖屏时屏幕宽度480px或者480dip,工作区域高度762px或者775dip
apk的资源包中,当屏幕density=240时使用hdpi标签的资源当屏幕density=160时,使用mdpi标签的资源当屏幕density=120时,使用ldpi标签的资源。不加任何标签的资源是各种分辨率情况下共用的。建议:布局时尽量使用单位dip,少使用px。
device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
阅读(...) 评论()人气:1238842
访问用户量:454
笔记经验:5904
总积分:117
级别:普通会员
搜索本笔记
ta的交流分类
ta的全部笔记
浏览(2105)|(0)
&&交流分类:|笔记分类:
DisplayMetrics dm = new DisplayMetrics();& &
getWindowManager().getDefaultDisplay().getMetrics(dm);& &Stirng width = dm.widthP& &
Stirng heiht = dm.heightP& &DisplayMetrics dm = new DisplayMetrics();&&
getWindowManager().getDefaultDisplay().getMetrics(dm);&&Stirng width = dm.widthP&&
Stirng heiht = dm.heightP
相关笔记推荐
精品视频课程推荐
从零开始,循序渐进掌握Android的核心开发知识;理解Android应用的运行过程、理解Intent和IntentFilter、
掌握资源和国际化、理解Android的进程和线程、理解Task和会退栈、理解Activity在屏幕旋转时的生命周期、
理解Handler的原理以及开发应用、掌握三种Service的写法、理解Broadcast的原理......
实现通过Wifi来在局域网内相互传递信息和语音通话的功能;学习Service;Broadcast Receiver;SharedPreference;SQLite;语音录制、播放、传输等;网络开发:wifi处理、UDP编程、TCP编程;多种设计模式的应用 等等
多种布局的综合使用、ImageButton的改进使用、AutoCompleteTextView的应用、显示多项的ListView、基本的人工智能的实现,基于启发式搜索算法、SharedPreferences和Sqlite的应用、自定义View的实现和应用等
浏览(2105)|(0)
&&交流分类:|笔记分类:
版权所有 Copyright(C) 私塾在线学习网

我要回帖

更多关于 android 获取屏幕截图 的文章

 

随机推荐