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

相关文章

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

maven中的maven-antrun-plugin插件示例详解

《maven中的maven-antrun-plugin插件示例详解》maven-antrun-plugin是Maven生态中一个强大的工具,尤其适合需要复用Ant脚本或实现复杂构建逻辑的场景... 目录1. 核心功能2. 典型使用场景3. 配置示例4. 关键配置项5. 优缺点分析6. 最佳实践7. 常见问题

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑