smallestWidth 限定符适配 : 屏幕适配-插件:ScreenMatch

2023-12-23 03:38

本文主要是介绍smallestWidth 限定符适配 : 屏幕适配-插件:ScreenMatch,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:

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 限定符适配采用的单位是 dp sp,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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526580

相关文章

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

eclipse安装subversion(SVN)版本控制插件

陈科肇 查看插件更新站点 网址:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 网站截图: 根据自己的eclipse版本,选择需要的更新站点. 使用eclipse集成subservion插件 Help > Install New Software…> 等待下载安装插件…

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;

Weex入门教程之2,Android Studio安装Weex插件

插件位置及描述 https://plugins.jetbrains.com/idea/plugin/8460-weex 貌似对windows还不是很支持,先放着吧。 安装 插件功能 先预览下都有什么功能 安装完成Weex插件后,如果在main toolbar找不到这些功能图标,那么就需要手动添加到main toolbar 添加到main toolbar 红框内就是

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬