关于屏幕适配,之前只是了解过,可以在资源文件夹的名字后面增加后缀,来让系统自动区分,在当前设备上应该使用哪种资源。
具体遇到案例,今天还是第一次,下面简单说一下需求:
公司有三种设备用来测试同一个app,手机,平板,以及电视盒子;
在尺寸上完全是3个级别的设备。
所以我得想办法让同一套代码能自动适应3种设备。
直接看方案:
在res文件下,做两套layout布局文件(当然,copy之后修改),下面这个sw600是指 在至少600dp的宽度的设备上使用这个布局。
上面那个不带后缀的,则是系统检索了设备尺寸之后发现没有更合适的布局文件的时候才使用的。
一般手机的宽不会超过600dp,而平板一般都是大于这个尺寸的。
关于多屏幕适配的布局文件夹名称的写法,参照https://developer.android.com/guide/practices/screens_support.html
这是安卓官网中的一个网页。其他基础概念以及其他相关知识点,就不在此赘述。
另外,我们怎么去判断当前设备上的宽高dp值呢?参照如下代码,计算公式来自安卓官网,可自行百度。那这样的话,就可以针对特定设备进行特别布局了,问题解决。
public void getAndroiodScreenProperty() { WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); int widthPx = dm.widthPixels;// 屏幕宽度(像素) int heightPx = dm.heightPixels; // 屏幕高度(像素) int densityDpi = dm.densityDpi;//屏幕密度dpi(120 / 160 / 240) //DPI计算公式应该是 //px = dp*(dpi/160); //所以 dp = px * 160 / dpi; int widthDpValue = widthPx * 160 / densityDpi; int heightDpValue = heightPx * 160 / densityDpi; Log.e("MyLog", widthDpValue + "======" + heightDpValue); }
最后说一个疑点,我按照上面的方法算出了电视盒子的宽DP,是1280,但是我多加了一个layout-sw1280之后,
这个sw1280dp的布局好像没起作用,我在盒子上试验了一下,还是用的sw600dp的那个布局,今天没时间了,暂作个记录,后面处理。