android 限定符屏幕适配 根据屏幕尺寸适配不同layout文件夹
通过资源文件夹的限定符让系统自动根据设备屏幕尺寸加载对应的布局文件;
1、最小宽度限定符 sw限定符
最小宽度限定符(sw<N>dp
),基于屏幕「最小宽度」(即屏幕短边的 dp 值)划分,更精准且不受屏幕方向影响(横屏 / 竖屏时最小宽度不变);
layout-sw600dp 表示「最小宽度 ≥ 600dp」的设备会优先加载该文件夹的布局
2、按屏幕宽高度(w<N>dp / h<N>dp)适配
针对特定宽度 / 高度的设备加载布局,受屏幕方向影响。
w360dp
:屏幕高度 ≥ 360dp 时生效
h600dp
:屏幕高度 ≥ 600dp 时生效
- layout
- layout-w360dp // 宽度 ≥ 360dp
- layout-w600dp // 宽度 ≥ 600dp
- layout-h720dp // 高度 ≥ 720dp
- layout-1080dp // 高度 ≥ 1080dp
以上两种不适用于px , Invalid resource directory name
3、按照屏幕像素尺寸px限定
- layout
- layout-2560x1260 //w:2560px | h:1260px
- layout-1560x860
- layout-1680x760
像素尺寸限定Google不推荐,除非特定条件一定要使用px
获取当前屏幕的最小宽度sw<N>dp
/*** 获取屏幕短边的 dp 值(即最小宽度,对应 sw<N>dp 中的 N)*/public static float getSmallestWidthDp(Context context) {WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);Display display = windowManager.getDefaultDisplay();Point size = new Point();display.getRealSize(size); // 获取屏幕实际尺寸(含导航栏等)//(不含导航栏),可使用 display.getSize(size);Log.i("ScreenUtils", "getSmallestWidthDp: x" + size.x + ",y:" + size.y);int smallestWidthPx = Math.min(size.x, size.y);//通过 density 转换为 dpDisplayMetrics dm = context.getResources().getDisplayMetrics();Log.i("ScreenUtils", "getSmallestWidthDp: dm.density:" + dm.density);return smallestWidthPx / dm.density;}
或
context.getResources().getConfiguration().smallestScreenWidthDp