从开始安卓编程到现在一直在想着学习屏幕适配但又一直没能真的下点功夫学习,今天项目要求对三种不同的平板做适配才临时抱佛脚,有些心得,写出来给大家做参考。有问题的地方还请大家包容和指正。
android屏幕的适配除了多的使用相对布局之外(并不是一定要)主要就是项目下资源文件夹的相关适配。
要适配不同分辨率和屏幕大小的机型首先在manifest中加上
<supports-screens
android:smallScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
drawable文件夹:安卓项目中有多个drawable文件夹,drawable-ldpi、drawable-mdpi等,将不同大小的资源图片放在不同的文件夹中,安卓系统会自动识别调用对应的drawable。
那到底什么情况下会调用哪个文件夹下的资源呢,这要看安装的手机的屏幕密度(dpi)是多少,一定是屏幕密度,并不是网上很多人说的分辨率!!!,dpi的简单查看方法:在Activity的oncreat方法中加入下述代码:
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int dpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
知道了dpi就知道到底引用了哪个drawable下的资源,
ldpi指120,mdpi指160,hdpi指240,xhdpi指320。知道了这些你就知道该放多大的图在哪个文件夹了吧。
l ayout文件夹:drawable文件夹是根据屏幕密度来适配的,那些屏幕密度相同屏幕大小却不一样的如何适配呢?就用layout,在res目录下创建相应命名的layout文件夹,里边放置不同的xml布局文件。
还是那问题,到底什么情况下会使用相应的文件夹下的布局文件呢?首先要看layout的命名格式:
①横竖屏:layout-land|port
②分辨率:layout-1280x720(网上学习了一下并不止这一种命名,具体可以去细看)
其中1280x720是上文代码中的width和height,跟分辨率略有不同,因为部分机型有虚拟按钮。
这样在开发中中就能用不同的layout来做具体的适配。当时这里的介绍很不全面,大家也可补充一下,感谢!