1px
2px
3px
4px
省略若干行…
1279px
1280px
那么values-1920x1080文件夹下面的dimens.xml文件就应该是这样的:
1.5px
3px
4.5px
6px
省略若干行…
1918.5px
1920px
values-2560x1440文件夹下面的dimens.xml文件就应该是这样的:
2px
4px
6px
8px
省略若干行…
2558px
2560px
其实主要的分辨率就这三种,至于低于1280x720的分辨率的手机配置太低了,不在我们项目的适配考虑之内(如果需要适配建立对应的dimens文件即可)
/**
-
@param context
-
@return 获取屏幕原始尺寸高度,包括虚拟功能键高度
*/
public static int getTotalHeight(Context context) {
int dpi = 0;
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
@SuppressWarnings(“rawtypes”)
Class c;
try {
c = Class.forName(“android.view.Display”);
@SuppressWarnings(“unchecked”)
Method method = c.getMethod(“getRealMetrics”, DisplayMetrics.class);
method.invoke(display, displayMetrics);
dpi = displayMetrics.heightPixels;
} catch (Exception e) {
e.printStackTrace();
}
return dpi;
}
/**
-
@param context
-
@return 获取屏幕内容高度不包括虚拟按键
*/
public static int getScreenHeight(Context context) {
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(outMetrics);
return outMetrics.heightPixels;
}
通过这两个方法我们可以得到手机的分辨率高度和手机去除虚拟按键的高度,两者相减就是手机的虚拟按键的高度
调用后得到的结果是 总高度 : 2560 内容高度 : 2408 虚拟按键 : 152
如果想要适配该机型,其实也很简单,只需要把原来的values-2560x1440文件夹复制一份重新名为values-2408x1440即可,在使用dimens适配过程中,若遇有类似虚拟按键问题可照此处理,亲测完美适配!
对于dimens文件这里我想说一下,其实一个文件夹下面一个dimens文件即可,没必要弄两个(lay_x和lay_y,网上不少博客是使用两个dimens文件,至少分辨率是16:9的手机用一个dimens文件是可以的,因为lay_y.xml里面的内容已经包括lay_x.xml文件中的了)
减少dimens文件还有一个方法:对于一个主流的分辨率只要留虚拟按键高度最高的那组dimens文件即可,什么意思呢?比如说1920x1080分辨率,有多款机型都是这个分辨率,只不过是虚拟按键高度不同,你可能需要创建1788x1080,1812x1080,1776x1080…等多套dimens文件,其实大可不必,只需要1776x1080这一套就够了,因为系统找不到对应尺寸的dimens文件,会使用比它略小的分辨率的dimens文件,如此一来我们的dimens文件会大大减少的。
下面是使用dimens适配的简单效果图:
最后
在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!