参考:

Android 屏幕适配神器ScreenMatch

Android屏幕适配(一):ScreenMatch官方屏幕适配方案

Android屏幕适配全攻略(最权威的官方适配指导)

Carson带你学Android:屏幕适配-最全面的解决方案

切图应该放哪个 drawable 文件夹下

获取设备smallestWidthDP

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int heightPixels = dm.heightPixels;
int widthPixels = dm.widthPixels;
float density = dm.density;
float heightDP = heightPixels / density;
float widthDP = widthPixels / density;
float smallestWidthDP = Math.min(widthDP, heightDP);//411.42856
@Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);{DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int heightPixels = dm.heightPixels;int widthPixels = dm.widthPixels;float density = dm.density;float densityDpi = dm.densityDpi;float heightDP = heightPixels / density;float widthDP = widthPixels / density;float smallestWidthDP = Math.min(widthDP, heightDP);//411.42856Log.e(TAG, "density====================" + density);Log.e(TAG, "heightDP====================" + heightDP);Log.e(TAG, "heightPixels====================" + heightPixels);Log.e(TAG, "densityDpi====================" + densityDpi);Log.e(TAG, "widthDP====================" + widthDP);Log.e(TAG, "widthPixels====================" + widthPixels);Log.e(TAG, "smallestWidthDP====================" + smallestWidthDP);}{DisplayMetrics displayMetrics = getApplication().getResources().getDisplayMetrics();float appDensity = displayMetrics.density;float appScaleDensity = displayMetrics.scaledDensity;float appDensityDpi = displayMetrics.densityDpi;float appHeightPixels = displayMetrics.heightPixels;float appWidthPixels = displayMetrics.widthPixels;Log.e(TAG, "appDensity====================" + appDensity);Log.e(TAG, "appScaleDensity====================" + appScaleDensity);Log.e(TAG, "appDensityDpi====================" + appDensityDpi);Log.e(TAG, "appHeightPixels====================" + appHeightPixels);Log.e(TAG, "appWidthPixels====================" + appWidthPixels);}{DisplayMetrics displayMetrics = getResources().getDisplayMetrics();float activityDensity = displayMetrics.density;float activityScaleDensity = displayMetrics.scaledDensity;float activityDensityDpi = displayMetrics.densityDpi;float activityHeightPixels = displayMetrics.heightPixels;float activityWidthPixels = displayMetrics.widthPixels;Log.e(TAG, "activityDensity====================" + activityDensity);Log.e(TAG, "activityScaleDensity====================" + activityScaleDensity);Log.e(TAG, "activityDensityDpi====================" + activityDensityDpi);Log.e(TAG, "activityHeightPixels====================" + activityHeightPixels);Log.e(TAG, "activityWidthPixels====================" + activityWidthPixels);}Configuration configuration = getResources().getConfiguration();int smallestScreenWidthDp = configuration.smallestScreenWidthDp;int screenWidthDp = configuration.screenWidthDp;int screenHeightDp = configuration.screenHeightDp;int densityDpi2 = configuration.densityDpi;float density2 = getResources().getDisplayMetrics().density;Log.e(TAG, "screenWidthDp====================" + screenWidthDp);Log.e(TAG, "screenHeightDp====================" + screenHeightDp);Log.e(TAG, "densityDpi2====================" + densityDpi2);Log.e(TAG, "density2====================" + density2);Log.e(TAG, "smallestScreenWidthDp=============================" + smallestScreenWidthDp);// ========================================>分屏// density====================1.5// heightDP====================660.0// heightPixels====================990// densityDpi====================240.0// widthDP====================1280.0// widthPixels====================1920// smallestWidthDP====================660.0// screenWidthDp====================1280// screenHeightDp====================604// densityDpi2====================240// density2====================1.5// smallestScreenWidthDp=============================720// ========================================>全屏// density====================1.5// heightDP====================660.0// heightPixels====================990// densityDpi====================240.0// widthDP====================635.3333// widthPixels====================953// smallestWidthDP====================635.3333// screenWidthDp====================635// screenHeightDp====================604// densityDpi2====================288// density2====================1.8000001// smallestScreenWidthDp=============================635}

为什么选择 smallestWidth 限定符适配而不用屏幕分辨率限定符适配

  • 屏幕分辨率限定符适配根据屏幕分辨率的,Android 设备分辨率一大堆,而且还要考虑虚拟键盘,这样就需要大量的 dimens.xml 文件。因为无论手机屏幕的像素多少,密度多少,90% 的手机的最小宽度都为 360dp,所以采用 smallestWidth 限定符适配只需要少量 dimens.xml 文件即可。

  • 屏幕分辨率限定符适配采用的是 px 单位,而 smallestWidth 限定符适配采用的单位是 dpsp,dp 和 sp 是 google 推荐使用的计量单位。又由于很多应用要求字体大小随系统改变,所以字体单位使用 sp 也更灵活。

  • 屏幕分辨率限定符适配需要设备分辨率与 values-xx 文件夹完全匹配才能达到适配,而 smallestWidth 限定符适配寻找 dimens.xml 文件的原理是从大往小找,例如设备的最小宽度为 360dp,就会先去找 values-360dp,发现没有则会向下找 values-320dp,如果还是没有才找默认的 values 下的 demens.xml 文件,所以即使没有完全匹配也能达到不错的适配效果。

插件:ScreenMatch的使用:

ScreenMatch : 一种非常好用的Android屏幕适配

ScreenMatch : 一种非常好用的 Android 屏幕适配——smallestWidth 限定符适配

ScreenMatch 使用

  • 获取设计图最小宽度(单位为 dp)。
  • 以设计图最小宽度作为基准值,生成所有设备对应的 dimens.xml 文件。

如果项目只需要适配手机的话,只需要生成 320、360、362.2641、384、392.7272、400、410、411.4285、432、480 对应的 dimens.xml 文件即可。

  • 根据设计图标注,标注多少 dp,布局中就写多少 dp,格式为 @dimen/dp_XX。

1、下载插件

2、找到下载的插件

3、点击使用:

4、成功后:


配置生成文件如下:360dp为设计图的尺寸

5、布局中:

针对设计图,多少就是多少dp/sp
最小宽度该填多少,一般根据ui出的图来填写dp值,一般宽度显示多少 dp 就写多少 dp, 多少 sp 就写多少 sp。

smallestWidth 限定符适配 : 屏幕适配-插件:ScreenMatch相关推荐

  1. android smallestWidth 限定符屏幕适配方案dimens.xml

    简介 smallestWidth 限定符适配方案 这个方案的的使用方式和我们平时在布局中引用 dimens 无异,核心点在于生成 dimens.xml 文件,但是已经有大神帮我们做了这 一步 ├── ...

  2. Smallest-width 限定符

    很多开发者都想在这个范围内根据不同的具体屏幕尺寸来显示不同的布局(例如 5寸和7寸的设备). 在Android 3.2版本中引入 "Smallest-width"限定符就是为了解决 ...

  3. 2021年最详细的Android屏幕适配方案汇总

    1 Android屏幕适配的度量单位和相关概念 建议在阅读本文章之前,可以先阅读快乐李同学写的文章<Android屏幕适配的度量单位和相关概念>,这篇文章包含了阅读本文的一些基础知识,推荐 ...

  4. android 屏幕最小宽度_AndroidTV屏幕适配-smallestWidth(最小宽度) 限定符

    背景 前几天接到一个需求,把项目上的原来的2k屏幕适配到4k屏幕. 我采用的是smallestWidth最小宽度限定符进行适配的我们项目的. 1,smallestWidth 限定符适配原理 系统都是根 ...

  5. Android适配--最详细的限定符屏幕适配方案解析 附带values-Dimens文件生成工具

    屏幕适配 前言 适配缘由 相关概念 适配方案 db适配 设计最大分辨率图片 屏幕分辨率限定符(宽高限定符) dimens文件生成原理 使用样例1 使用样例2 dimens文件生成脚本 总结 最小宽度限 ...

  6. 【Android 屏幕适配】屏幕适配基础概念 ④ ( 屏幕适配限定符 | 手机/平板电脑设备屏幕适配 )

    文章目录 一.屏幕适配限定符 二.手机/平板电脑设备屏幕适配 平板电脑市场占有率 密度无关像素计算 手机设备限定符 平板设备限定符 参考文档 : 设备兼容性概览 屏幕兼容性概览 支持不同的像素密度 声 ...

  7. Android 屏幕适配神器ScreenMatch

    Android屏幕适配 一.smallestWidth限定符 适配(推荐) 1.smallestWidth 限定符适配原理 2.为什么选择 smallestWidth 限定符适配? 3.使用步骤(重点 ...

  8. SmallestWidth一种非常好用的Android屏幕适配

    更新:由于该适配方案越来越多人使用,也有很多人遇到不太理解的问题.所以为了大家更好的使用,我将文章很多内容更新了,老用户可以重新看下整篇文章.主要更新的内容是使用方法跟以前不同了,以前是不改变最小宽度 ...

  9. Android学习屏幕适配技能包

    屏幕适配 序言 相关重要概念 硬件 屏幕尺寸 像素密度ppi 分辨率 软件 密度 像素密度dpi 密度限定符 密度无关像素 比例无关像素 屏幕适配的原因 解决方案 今日头条适配方案 宽高限定符适配方案 ...

最新文章

  1. android native java_在Android Native层中创建Java虚拟机实例
  2. 爬虫的系统框架组成-控制器
  3. zabbix-proxy3.0.4编译安装
  4. c++ primer学习笔记(2)-c++基本数据类型
  5. ceph 存储 对比_分布式存储系统 Curve
  6. 计算机基本概念及简单的二进制运算
  7. ROS中阶笔记(六):机器人感知—机器语音
  8. mysql查询中使用别名_如何在MySQL选择查询中使用别名?
  9. 定义并调用函数 十进制转二进制_用‘栈的思想编写一个十进制转换二进制、八进制或十六进制的程序...
  10. HTML 学习笔记一
  11. 关于达梦监视器dmmonitor的一些知识
  12. 使用Enterprise Architect设计数据库-赋操作截图
  13. nagios监控安装配置
  14. weblogic10 配置 domian
  15. React中文文档之Forms
  16. shell脚本明文密码隐藏且加密
  17. 幕课在线办公项目笔记——day2
  18. python qq聊天室
  19. python基础——数据类型
  20. 速卖通商标授权怎么弄?速卖通官方授权模板书分享

热门文章

  1. WPA2-PSK无线密码破解
  2. 查看电脑主机ID的两种方法
  3. vue整合jQuery和bootstrap,实现官网效果,实现Glyphicon Halflings 的字体图标
  4. php. 生成器 send,PHP生成器细说
  5. 有道翻译、小牛翻译Python[转载]
  6. 一文读懂Cookie、Session、Token和JWT(建议收藏)
  7. 监听套接字 连接套接字的区别
  8. SANGFOR防火墙配置上网认证,LDAP自动同步失败
  9. 初级计算机操作员职业资格证书,计算机操作员国家职业标准
  10. Ububtu Kylin 20.10 优麒麟操作系统下载