- 当android屏幕密度为160(1英寸上有160个像素点)时:1dp=1px
pixs =dips * (densityDpi/160)
dips=(pixs*160)/densityDpi
public static int dip2px(Context context, float dip){ final float scale = context.getResources().getDisplayMetrics().density; return (int)(dip * scale + 0.5f); } public static int px2dip(Context context, float px){ final float scale = context.getResource().getDisplayMetrics().density; return (int)(px / scale + 0.5f); }
- drawable-
- 文件夹 --> 屏幕密度
- ldpi --> 120
- mdpi --> 160
- hdpi --> 240
- xhdpi --> 320
- WVGAHVGAQVGA
- VGA(Video Graphics Array),显示标准为640*480分辨率
- WVGA(Wide VGA):480*800
- HVGA(Half VGA):320*480
- QVGA(Quarer VGA):240*320
- drawable- --> 分辨率(系统会根据机器的分辨率到这几个文件夹找对应的图片资源)
- ldpi --> QVGA(240*320)
- mdpi --> HVGA(320*480)
- hdpi --> WVGA(480*800) || FWVGA(480*854)
- xhdpi --> 至少960*720
- xxhdpi --> 1280*720
- layout-
- small --> 屏幕小于3英寸
- normal --> 屏幕小于4.5英寸
- large --> 4英寸到7英寸
- xlarge --> 7英寸到10英寸
- AndroidManifest.xml
- <supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/> - android:anyDensity:是否支持多种不同密度的屏幕
- true --> 根据屏幕分辨率自动匹配
- false --> l - m - h - xh - xxh
- hdpi、mdpi、ldpi有同一张图片资源的不同密度表示,系统选择加载mdpi
- hdpi有图片而其它文件夹没有对应图片资源,选择hdpi
- hdpi、mdpi有图片资源而ldpi没有,系统选择mdpi
- android:largeScreens:是否支持大屏幕
- false --> 当屏幕为大屏幕时,系统默认加载layout-normal && drawable-mdpi
- android:smallScreens
- false --> 当屏幕为小屏幕时,系统默认加载layout-normal && drawable-mdpi
- <supports-screens
- 编程技巧
- 布局文件中定义长度的时候,最好使用wrap_content,fill_parent, 或者dp 进行描述,这样可以保证在屏幕上面展示的时候有合适的大小
- 为不同屏幕密度的手机,提供不同的位图资源,可以使得界面清晰无缩放。
对应bitmap 资源来说,自动的缩放有时会造成放大缩小后的图像变得模糊不清,这是就需要应用为不同屏幕密度配置提供不同的资源:为高密度的屏幕提供高清晰度的图像等。 - 不要使用AbsoluteLayout
- 像素单位都使用DIP,文本单位使用SP
- 布局文件中定义长度的时候,最好使用wrap_content,fill_parent, 或者dp 进行描述,这样可以保证在屏幕上面展示的时候有合适的大小
- 屏幕像素 && 密度
- DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels;// 屏幕宽度(像素)
int height = metric.heightPixels;// 屏幕高度(像素) --> 分辨率= width*height
float density = metric.density;// 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi;// 屏幕密度DPI(120 / 160 / 240)
- DisplayMetrics metric = new DisplayMetrics();
版权声明:本文为zifeng1203s原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。