我对像素密度感到困惑。我发现中等密度下,屏幕分辨率可以是320x480、480x800或者480x854。所以,如果我在mdpi文件夹中有一张宽度为300像素的图片,那么在这3种不同的屏幕尺寸上看起来会是相同的大小吗(主要是320x480和另外两个)?而且通过“看起来相同的大小”,我的意思是根据屏幕尺寸缩放成更大或更小。谢谢。
我对像素密度感到困惑。我发现中等密度下,屏幕分辨率可以是320x480、480x800或者480x854。所以,如果我在mdpi文件夹中有一张宽度为300像素的图片,那么在这3种不同的屏幕尺寸上看起来会是相同的大小吗(主要是320x480和另外两个)?而且通过“看起来相同的大小”,我的意思是根据屏幕尺寸缩放成更大或更小。谢谢。
为了完整性,还要检查以下选项来控制布局:
目录限定符:
尺寸:小,正常,大 密度:ldpi,mdpi,hdpi,nodpi(不自动缩放) 纵横比:长,非长 方向:横屏用法:
res/layout/my_layout.xml
res/layout-small/my_layout.xml
res/layout-large/my_layout.xml
res/layout-large-long/my_layout.xml
res/layout-large-land/my_layout.xml
res/drawable-ldpi/my_icon.png
res/drawable-mdpi/dpi/my_icon.png
res/drawable-hdpi/my_icon.png
res/drawable-nodpi/composite.xml
通过AndroidManifest将您的应用限制在特定的屏幕尺寸上:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
...
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true" />
...
</manifest>
对于代码级别的微调:
float scale = getContext().getResources().getDisplayMetrics().density;
不要忘记:
dpi = 160; //在160dpi下
pixels = dips * (density / dpi)
所有内容都在这个文档中:
developer.android.com:支持多种屏幕320px
,而要写成320dip
。
http://developer.android.com/guide/practices/screens_support.html
实际上,用于计算设备物理屏幕尺寸的代码如下:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
double x = Math.pow(dm.widthPixels/dm.xdpi,2);
double y = Math.pow(dm.heightPixels/dm.ydpi,2);
double screenInches = Math.sqrt(x+y);