由于目前在开发大尺寸平板,所以今天看了很多关于屏幕的资料,感觉自己理解了,心得分享一下,如有错误恳请指出。。谢谢!
这是一段获取手机屏幕信息的代码:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); getDisplayMetrics(); tv1=(TextView) findViewById(R.id.tv1); bt1=(Button) findViewById(R.id.bt1); tv1.setText( "绝对像素:" +dMetrics.widthPixels+ "X" +dMetrics.heightPixels+ "\n" ); tv1.append( "DPI:" +dMetrics.densityDpi+ "\n" ); tv1.append( "density:" +dMetrics.density+ "\n" ); tv1.append( "scaledDensity:" +dMetrics.scaledDensity+ "\n" ); } private void getDisplayMetrics() { // TODO Auto-generated method stub dMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dMetrics); } |
需要在工程的AndroidManifest.xml文件中,加入supports-screens节点,具体的内容如下:
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:resizeable="true"
android:anyDensity="true" />
这样的话,当前的Android程序就支持了多种分辨率,那么就可以得到正确的物理尺寸了。
名词解释:
Resolution是分辨率,比如小米分辨率是480*854
DPI是每英寸像素,小米的DPI是240
density是屏幕密度,小米的是1.5
scaledDensity这个找不到资料,在几个不同尺寸的pad上试了下发现这个跟density数值都一样的
ps:纠正思想:以上的四个概念不能单凭某一方面说:“XX越高屏幕越清晰”
彼此关系:
转换公式如下:
density=DPI/160
DPI=对角线像素(通过直角三角形求斜边长度)/屏幕对角线尺寸(英寸)
开发帮助:(重点)
假如我用我的小米开发,小米屏幕尺寸是480x854, density=1.5 ,然后通过转换可以得出对应的dip范围为:320dip*570dip( 因为density=1.5 ,480/1.5=320dip,854/1.5=570dip ),所以可以在main.xml里面的父layout不用fill_parent直接写320dip*570dip即可以铺满屏幕,然后根据这个思想可以做出符合当前屏幕的最佳尺寸的图标以及其他UI。
希望这个对你能有点帮助。
个人理解,其实dp就是英寸的一个更小的单位,同样尺寸的手机,分辨率越高,单位密度大,但是屏幕内容纳的dp数目是不变的。我们编程,就是按dp大小来编程,不管用户分辨率多少,只要手机尺寸一眼,出现的效果就是一样的。
至于一个屏幕有多少分辨率,就是分辨率/密度就可以计算出电脑的分辨率是多少,至于一个diip表示多少个像素,我们就不用知道了,知道也没有意义
配置的图片大小最好以最大分辨率为准,图片高度=dp高度*密度;图片宽度= dp宽度*密度。