android分辨率密度
A. android webview默认屏幕为中像素密度怎么修改
Android中Webview加载的页面居中显示为中等像素密度的方法如下:
第一种方法:
WebSettings settings = webView.getSettings();
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
LayoutAlgorithm是一个枚举用来控制页面的布局,有三个类型:
1.NARROW_COLUMNS:可能的话使所有列的宽度不超过屏幕宽度
2.NORMAL:正常显示不做任何渲染
3.SINGLE_COLUMN:把所有内容放大webview等宽的一列中
用SINGLE_COLUMN类型可以设置页面居中显示,页面可以放大缩小
第二种方法:
//设置加载进来的页面自适应手机屏幕
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
第一个方法设置webview推荐使用的窗口,设置为true。第二个方法是设置webview加载的页面的模式,也设置为true。这方法可以让你的页面适应手机屏幕的分辨率,完整的显示在屏幕上,可以放大缩小。
第三种方法:(主要用于平板,针对特定屏幕代码调整分辨率)
java">DisplayMetricsmetrics=newDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
intmDensity=metrics.densityDpi;
if(mDensity==120){
settings.setDefaultZoom(ZoomDensity.CLOSE);
}elseif(mDensity==160){
settings.setDefaultZoom(ZoomDensity.MEDIUM);
}elseif(mDensity==240){
settings.setDefaultZoom(ZoomDensity.FAR);
}
Android中的webview其实是一个浏览器,对js进行解析以便于在智能机上面很好的显示。
B. android多屏幕分辨率适配问题
屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸)。android把屏幕分为以下4种:small,normal,large,extra large。
怎么判断?
屏幕密度(Screen Density) - 一块实际的屏幕区域有多少个像素,一般用dpi衡量(每英寸有多少个点)。相比起medium、high屏幕密度的设备,在一块确定大小的屏幕区域l密度为low的屏幕拥有的像素更少。android把屏幕密度分为4种:low,medium,high,extra high。
如何判断是ldpi,mdpi,hdpi?
方向(orientation) - 屏幕方向分为landscape(横屏)和portrait(竖屏)。
分辨率(Resolution) - 屏幕上的总实际像素数。对屏幕进行适配时,一般不关注它的分辨率,只关注它的屏幕大小和密度。
与密度无关的像素(Density-independent pixel,dp或dip) - 为了保证你的UI适合不同的屏幕密度,建议你采用dp来定义程序UI。
它的计算方法为:px = dp * (dpi / 160)
sp(scale-independent pixel)
C. Android设备的屏幕像素密度和720P,1080P的关系是怎么样的
首先看下像素密度PPI的公式:
你的屏幕分辨率是width*height(1920*1080),
设备是size(5)寸,那么像素密度是:
(440PPI)
PPI越高表明你的屏幕越清晰。
结论:
所以1080P并不一定比720P的就清晰,这个和你的设备尺寸是有关系的。
如果一台机器是60英寸,1080P,而另外一台是5寸720p你会看到60寸的电视上面全是像素点。而5寸觉得不会看到。
D. 怎么查看android设备 分辨率
为解决Android设备碎片化,引入一个概念density,也就是密度.它指的是在一定尺寸的物理屏幕上显示像素的数量,一般使用dpi(dots per inch,每英寸像素数)作为单 位.比如设备分辨率为240x320,屏幕物理尺寸为1.5英寸x2英寸(对角线为2.5)它的密度可以用分辨率/尺寸表示:240/1.5或者即320/2,密度为160dpi。算对角线也是一样 的,长的平方+宽的平方=160000,开方后=400.可知400/2.5=160.对于用户来说,密度越大的屏幕显示效果越精细,因为每英寸显示的像素数量更多。 以上的描述就是一个蓝本(此蓝本对应于mdpi). 按照此蓝本一个dp相当于160dpi屏幕中的一个px.同理在,在320dpi的屏幕中,一个dp相当于2个px. 通过这样的成比例放缩,Android解决了需要多个不同屏幕中的大小显示问题. 所以在Eclipse的布局文件中,以3.7in WVGA(Nexus One)(480x800)为例,可以看见其为sw320dp,h533dp. 即宽有320dp,高为533dp. 是怎么计算出来的呢? 将(480的平方+800的平方)开方=932.9523031 然后932.9523031/屏幕尺寸3.7=252.14927,此结果为此手机的屏幕密度. 然后按照上面的蓝本,就应该要计算在该手机上1dp对于多少px.计算如下: 160 1dp=1px 252.14927 1dp=?px 结果为: 252.14927/160=1.5759329 注意: 在此一般不取1.5759329,只取到1.5即可. 所以:480/1.5=320;800/1.5=533.3333(通常取为533),即上述的sw320dp,h533dp. 手机屏幕密度的对应关系 120上下浮动的都属于ldpi 160上下浮动的都属于mdpi 240上下浮动的都属于hdpi 320上下浮动的都属于xdpi 以摩托罗拉ME525+(3.7英寸 分辨率854x480像素)为例: 将(480的平方+854的平方)开方=979.6509 然后979.6509/屏幕尺寸3.7=264.770529,此结果为此手机的屏幕密度.对应为hdpi 264.770529/160=1.6548 即在此手机中1dp=1.6548个像素,只取到1.6即可 所以:480/1.6=300;854/1.6=533.75(通常取为533) 按照这个逻辑,算出来的宽应该是只有300dp.悲剧的是,如果某个控件的宽为300,在此手机上是不能铺满手机的宽的. 也就是说除以的不是1.6而还是1.5!!!!所以将宽设置为320即可 总结:在hdpi中,像素转换为dp统一用的是:像素/1.5 以联想K860(5.0英寸,分辨率1280x720像素)为例: 将(1280的平方+720的平方)开方=1468.60478 然后1468.60478/屏幕尺寸5=293.720,此结果为此手机的屏幕密度.对应为xdpi 293.720/160=1.8357 即在此手机中1dp=1.8357个像素 所以:1280/1.8357=697.281;720/1.8357=392.22 按照这个逻辑,算出来的宽应该是392.22.悲剧的是,如果某个控件的宽为392.22,在此手机上是显示不完全的. 也就是说除以的不是1.8而是2!!!!所以将宽设置为360即可 总结:在xdpi中,像素转换为dp统一用的是:像素/2 注意问题1: 在建立模拟器的时候注意 854x480在Hardware中,应该将Abstracted LCD density设置为240,并手动输入分辨率 1280x720在Hardware中,应该将Abstracted LCD density设置为320,并手动输入分辨率 注意问题2: 多个layout文件夹在命名上有相应规则,以分辨率480x854为例,需要建立480x854像素的layout文件夹,命名:layout-854x480,有两点需要注意:①大数(854)必须在前, 否则会报错;②两个数字之间的符号是小写英文字母“x”,不是乘号
E. android中的屏幕密度是否和屏幕分辨率无关
跟分辨率有关系。3.2寸的480*800分辨率屏幕,跟4.7寸的480*800分辨率的屏幕对比,显然3.2更细腻。苹果的3.5寸640*960分辨率屏幕,就是这个原因,肉眼无法看到颗粒感。还有就是像素排列,i9000的屏幕,是五宫格样式的排列,没有普通纵向、横向细腻。
F. Android 中8dp是多少毫米
DP是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。假设有一部手机,屏幕的物理尺寸为1.5英
寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或
320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per
Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480x320分辨率的也有800x480分辨率的,前者的像素密度就比较低。
Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系
数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。例如界面上有一个长度为“80dp”的图片,那么它在240dpi的手机上实际显示
为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。如果你拿这两部手机放在一起对比,会发现这个图片的物理尺寸“差不
多”,
G. Android 屏幕适配
1: dp: android 尺寸的基本单位。 在不同的分辨率的手机里面,1dp对应着不同数量的px, 这样就实现了dp定义一个控件大小的时候,在不同分辨率手机里表现出相应大小的像素值。
2: 屏幕分辨率: 1080下160, 表示宽度有1080个像素点而高度有2160个像素点。常见的分辨率有320x480, 480x800, 720x1280, 1080x1920等。
3: 屏幕尺寸: 以寸为单位, Android设备对角线的长度
4: 像素密度: 每英寸的像素点
5: 屏幕尺寸, 分辨率,像素密度 三者之间的关系:
密度(dpi)= √(宽2 + 高2)/屏幕尺寸
6: px:像素,是屏幕上显示数据的最基本的点
7: dpi:屏幕像素密度,每英寸上的像素点数
8: sp:与dp类似,通常用于指定字体的大小,当用户修改手机显示的字体时,字体大小会随之改变。
1: dp适配方案: Android自带的原始的适配方案, 在不同的分辨率手机里面表现出相应大小的像素点。
缺点: Android的碎片化严重, 如果生产厂家没有根据屏幕尺寸、分辨率和像素密度的关系来规则定义, 或者出一些乱七八糟的屏幕大小,这样的适配方案就不在适合了。
2: 宽高限定符:枚举所有的屏幕宽高像素值,根据等比缩放去适配。如果没有找到对应的屏幕, 则取默认的。 目前这种方案已经被弃用。
缺点:
1: 占用资源大,会增加APK的体积。
2: 容错机制大需要精准命中资源文件才能适配,比如1920x1080的手机就一定要找到1920x1080的限定符,否则就只能用统一的默认的dimens文件了。而使用默认的尺寸的话,UI就很可能变形。
3:AndroidAutoLayout适配方案(停止维护)
4: SW限定符适配方案:(smallestWidth最小宽度适配)
Android 会去识别屏幕可用高度或者宽度的最小尺寸的dp值。然后根据识别到的结果去对应的资源文件里面去找寻相应的结果。
如何生成:ScreenMatch插件
此方案跟宽高限定的适配方案相比,有很好的容错机制, 如果没有找到对应的适配宽度, 那么会在vlues文件里面去找跟他最接近的宽度。
5:今日头条适配方案:
1>: px 转 dp 的公式 dp = px / density.不管我们设定的单位是什么, 最终我们都会将这些单位长度转化为px的。density就是他们的转化比, 所以,动态改变这个转化比也是可以达到我们适配屏幕的目的的。
2>: 通过修改density值,强行把所有不同尺寸分辨率的手机的宽度dp值改成一个统一的值(在清单文件中定义),这样就解决了所有的适配问题。
3>: Density = 当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) ;
4>:引入了AndroidAutoSize屏幕适配框架:
https://github.com/JessYanCoding/AndroidAutoSize
最后, 最重要的................
点赞 点赞 点赞, 不重要的事情也就说3遍......
H. android中怎么实现手机不同分辨率访问的效果
android中不同手机分辨率适配问题
在项目开发的过程中,同一个布局对应不同的手机会显示出不同的效果。导致这个现象产生的原因是不同手机的分辨率不同。在android sdk提供的帮助文档中,我们可以看到各种手机的分辨率和对应的屏大小。QVGA (240x320),WQVGA400(240x400),WQVGA432 (240x432),HVGA (320x480),WVGA800 (480x800),WVGA854 (480x854)。
目前android手机的分辨率大致就是帮助文档中描述的几种。我们可以用两种方式进行不同手机的适配。一种是在java代码中,另外一种是在xml文件中。具体使用哪种方式更有效更合适,要看具体的情况而定。
在以前的项目中,我之前做过关于历史聊天记录,每页显示条数的匹配。不同的手机,每页可以显示历史记录的条数是不同的。我采用的是在java代码中做匹配。不同分辨率的手机,他们都有固定的屏高。例如,480x800,屏高是800。240x320,屏高是320。根据屏高为判定条件,为每一页显示历史记录的条数做一个限制。我个人觉得,在java代码中做手机匹配,要看匹配的布局中,控件是否太多,不太多,可以在java代码中根据不同的情况修改,否则,java代码将会显得很冗长,修改起来也很麻烦。
在xml进行手机匹配,主要是针对布局中控件太多,不方便在java代码中修改的情况。在xml中解决不匹配问题很简单,对于不同手机的分辨率,建立对应的layout文件即可。例如:480x800,之间建立layout-800x400,240x320,建立layout-320x240。特别注意:大的写在前面,例如800,320,小的写在后面,例如480,240。建立了相应的layout后,还要在不同的手机上调整布局中的控件大小和位置。
在本次项目中,我负责不同手机视图的匹配问题,我选择的是xml匹配方式,结果发现按上面的方式做了之后,对应分辨率的手机的显示没有任何的效果,后来,我查看帮助文档后,发现必须要在androidmainfest中进行如下代码的配置:
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
如果没有这几行代码,不管你怎么调整layout中的控件,对应分辨率的手机是没有任何效果的。注意:由于android版本的不同,有些版本不支持xlargeScreens,可以直接将android:xlargeScreens="true"去掉。
来源:
android屏幕分辨率适配
1. 多分辨率支持
在设计之初,Android系统就被设计为一个可以在多种不同分辨率的设备上运行的操作系统。对于应用程序来说,系统平台向它们提供的是一个稳定的,跨平台的运行环境,而关于如何将程序以正确的方式显示到它所运行的平台上所需要的大部分技术细节,都由系统本身进行了处理,无需程序的干预。当然,系统本身也为程序提供了一系列API,所以在目标平台的分辨率是可以完全确定的情况下,程序也可以精确的控制自身在目标平台上的界面显示方式。
这个文档会说明系统平台究竟提供了哪些分辨率支持特性,与它们如何在程序中使用的信息。如果你遵循文档中列出的方法,就很容易让你的程序在所有支持的分辨率下都能完美显示。这样你就可以用一个单独的.apk文件,将你的程序发布到所有的平台上。
如果你已经发布过针对Android 1.5或更早版本平台的程序,你应该仔细阅读这篇文档,然后考虑一下到底如何让自己的老程序可以在拥有各种不同分辨率,并且运行着Android 1.6或更新平台上正常显示。在绝大部分情况下,只需要对程序作出小小的修改就可以达到目的,但你仍然需要尽可能地在各种分辨率的平台上进行测试。
特别的,如果你有一个已经完成的程序,又想让它可以在超低分辨率的设备(比如320×240)上正确运行,你需要阅读“老程序的更新策略”,那篇文档会告诉你应该怎么做。
2. 术语和概念
屏幕尺寸
屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如2.8寸,3.5寸)。
简而言之,Android把所有的屏幕尺寸简化为三大类:大,中,小。
程序可以针对这三种尺寸的屏幕提供三种不同的布局方案,然后系统会负责把你的布局方案以合适的方式渲染到对应的屏幕上。这个过程是不需要程序员用代码来干预的。
屏幕长宽比
屏幕的物理长度与物理宽度的比例。程序可以为制定长宽比的屏幕提供制定的素材,只需要用系统提供的资源分类符long和notlong。
分辨率
屏幕上拥有的像素的总数。注意,虽然大部分情况下分辨率都被表示为“宽度×长度”,但分辨率并不意味着屏幕长宽比。在Android系统中,程序一般并不直接处理分辨率。
密度
以屏幕分辨率为基础,沿屏幕长宽方向排列的像素。
密度较低的屏幕,在长和宽方向都只有比较少的像素,而高密度的屏幕通常则会有很多——甚至会非常非常多——像素排列在同一区域。屏幕的密度是非常重要的,举个例子,长宽以像素为单位定义的界面元素(比如一个按钮),在低密度的屏幕上会显得很大,但在高密度的屏幕上则会显得很小。
密度无关的像素(DIP)
指一个抽象意义上的像素,程序用它来定义界面元素。它作为一个与实际密度无关的单位,帮助程序员构建一个布局方案(界面元素的宽度,高度,位置)。
一个与密度无关的像素,在逻辑尺寸上,与一个位于像素密度为160DPI的屏幕上的像素是一致的,这也是Android平台所假定的默认显示设备。在运行的时候,平台会以目标屏幕的密度作为基准,“透明地”处理所有需要的DIP缩放操作。要把密度无关像素转换为屏幕像素,可以用这样一个简单的公式:pixels = dips * (density / 160)。举个例子,在DPI为240的屏幕上,1个DIP等于1.5个物理像素。我们强烈推荐你用DIP来定义你程序的界面布局,因为这样可以保证你的UI在各种分辨率的屏幕上都可以正常显示。
支持的屏幕分辨率范围
1.5及更早版本的Android系统,在设计的时候假定系统只会运行在一种分辨率的设备上——HVGA(320×480)分辨率,尺寸为3.2寸。由于系统只能工作在一种屏幕上,开发人员就可以针对那个屏幕来编写自己的程序,而无需去考虑程序在其他屏幕上的显示问题。
但自从Android 1.6以来,系统引入了对多种尺寸、多种分辨率屏幕的支持,以此满足拥有各种配置的新平台的运行需求。这就意味着开发人员在针对Android 1.6或更新版系统开发程序的时候,需要为自己的程序在多种分辨率的屏幕上良好显示作出额外的设计。
为了简化程序员面在对各种分辨率时的困扰,也为了具备各种分辨率的平台都可以直接运行这些程序,Android平台将所有的屏幕以密度和分辨率为分类方式,各自分成了三类:
·三种主要的尺寸:大,正常,小;
·三种不同的密度:高(hdpi),中(mdpi)和低(ldpi)。
如果需要的话,程序可以为各种尺寸的屏幕提供不同的资源(主要是布局),也可以为各种密度的屏幕提供不同的资源(主要是位图)。除此以外,程序不需要针对屏幕的尺寸或者密度作出任何额外的处理。在执行的时候,平台会根据屏幕本身的尺寸与密度特性,自动载入对应的资源,并把它们从逻辑像素(DIP,用于定义界面布局)转换成屏幕上的物理像素。
下表列出了Android平台支持的屏幕中一些比较常用的型号,并显示了系统是如何把它们分类到不同的屏幕配置里的。有些屏幕分辨率并不在下面的列表上,但系统仍会把它们归入下列的某一个类型中。
低密度(120),ldpi
中密度(160),mdpi
高密度(240),hdpi
小屏幕
·QVGA(240×320),2.6~3.0寸
普通屏幕
·WQVGA(240×400),3.2~3.5寸
·FWQVGA(240×432),3.5~3.8寸
·HVGA(320×480),3.0~3.5寸
·WVGA(480×800),3.3~4.0寸
·FWVGA(480×854),3.5~4.0寸
大屏幕
·WVGA(480×800),4.8~5.5寸
·FWVGA(480×854),5.0~5.8寸
如上表所示,所有分辨率的屏幕,都围绕在基准屏幕周围,而基准屏幕在分类中,为“正常”尺寸,与“中”密度。之所以用HVGA屏幕作为基准屏幕,是因为所有针对Android 1.5或更早的程序都是针对这片屏幕所写的(因为只支持这一片),比如T-Mobile G1。
虽然系统支持上面9种不同配置的屏幕,但你并不一定需要为它们都提供各自不同的资源。系统已经提供了足够鲁棒(就是在各种恶劣环境下正常工作,对环境变化不敏感)的兼容特性,用于在各种不同的屏幕上良好显示你的程序。这在下面的文档中会详细描述,如果你需要更多的资料,请查看“与屏幕无关的最佳实践”。
作者“Ant space”
I. Android的px,dp和sp等单位的区别详解
px:
即像素,1px代表屏幕上一个物理的像素点;
px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同
dp:
这个是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。
不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480x320分辨率的也有800x480分辨率的,前者的像素密度就比较低。
Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。
例如界面上有一个长度为“100dp”的图片,那么它在240dpi的手机上实际显示为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。如果你拿这两部手机放在一起对比,会发现这个图片的物理尺寸“差不多”,这就是使用dp作为单位的效果。
dip:
与dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,后来为了与sp统一就建议使用dp这个名字了。
sp:
与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。
还有几个比较少用到的尺寸单位:
mm:
即毫米;
in:
即英寸,1英寸=2.54厘米(约);
pt:
1pt=1/72英寸=0.035厘米;
最佳实践,文字的尺寸一律用sp单位,非文字的尺寸一律使用dp单位。例如textSize="16sp"、layout_width="60dp";偶尔需要使用px单位,例如需要在屏幕上画一条细的分隔线时:
<View layout_width="match_parent" layout_height="1px"/>
补充:
1. android.view.ViewGroup.LayoutParams.height及width这两个属性的单位为像素,但是为了兼容多种分辨率的手机,我们需要最好使用dp。
2. 根据手机的分辨率从dp的单位转成px
public static int dip2px(Context context, float dpValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dpValue*scale + 0.5f);
}
3.根据手机的分辨率从px转成dp
public static int px2dip(Context context, float pxValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale + 0.5f);
}