写作网站大全,软件开发者是什么意思,aps网站服务建设,企业邮箱免费版开通概述
最小宽度smallWidth适配实现屏幕适配方案
详细
前言
在之前的文章中#xff0c;我们讲到了Android屏幕适配的一些知识#xff0c;大家感兴趣的话可参考Android屏幕适配(1) — 概念解释Android屏幕适配(2) — drawable与mipmapAndroid屏幕适配(3) — 资源文件夹命名与…概述
最小宽度smallWidth适配实现屏幕适配方案
详细
前言
在之前的文章中我们讲到了Android屏幕适配的一些知识大家感兴趣的话可参考Android屏幕适配(1) — 概念解释Android屏幕适配(2) — drawable与mipmapAndroid屏幕适配(3) — 资源文件夹命名与匹配规则Android屏幕适配(4) — 宽高限定符 今天就让我们来学习下Android屏幕适配的最小宽度smallWidth适配相关知识吧。 今天涉及知识有
屏幕适配原理SmallWidthDimensHelper屏幕values文件夹生成帮助类的使用效果图和项目结构图screenMatch插件的使用
一.屏幕适配原理
1.1 最小宽度的理解
之前我们已经讲过屏幕适配的原理是: px(实际分辨率/涉及基准分辨率)*dp由于无法兼顾横竖两个方向所以会采取宽或者高的一个方向来适配。今天要讲的最小宽度smallWidth适配与之前又有所区别。最小宽度是指对手机或平板而言最短的两条边不一定是屏幕的宽度。(例如对平板而言有的高度其实是小于宽度的这是所谓的最小宽度其实是平板的高度)
1.2 values文件夹理解
利用SmallWidthDimensHelper帮助类我们生成的values文件夹名字类似如下 values-sw240dpvalues-sw360dpvalues-sw400dpvalues-sw960dpvalues-sw1080dp......
以我测试的手机为例我手机信息如下 *************屏幕信息*************宽1080 高2032dpi480 density(屏幕像素比例)3.0smallwidthDensity(最小宽度)360.0**********************************
可以看到我手机屏幕尺寸: 1080x2032,dpi480,density(屏幕像素比例)3.0,接着有一个smallwidthDensity(最小宽度)360.0。 这里我们需要注意的是我手机屏幕尺寸: 1080x2032适配的values文件夹并不是values-sw1080dp,而是values-sw360dp。values-swXXXdp文件夹格式这里的XXX表示的可不是屏幕宽度尺寸而是最小宽度Density。我们可以通过公式 smallwidthDensity 屏幕最短尺寸(屏幕宽高尺寸较短的那个)/屏幕像素比例(density)
来获取一个参考值。 为什么说是一个参考值呢因为我们的手机一般默认最小宽度我们计算的这个值一般不会去改它但是在手机的设置—系统—开发者模式/开发人员选项—最小宽度上是显示默认最小宽度如下图 1.3 布局向上兼容
由上面的讲解我们已经知道为了适配屏幕我们会生成大批量values-swXXXdp文件夹。类似如下 values-sw240dpvalues-sw360dpvalues-sw400dpvalues-sw960dpvalues-sw1080dp
以我测试为例加载的是values-sw360dp文件夹若项目中没有values-sw360dp文件夹则会向上匹配values-sw240dp文件夹如果values-sw240dp文件夹没有则会再往小的匹配如果还是没有则会匹配默认values文件夹。
二. SmallWidthDimensHelper屏幕values文件夹生成帮助类的使用
这里我封装了一个自动生成values dimens文件夹的工具类。此类要在Android项目中新建一个Java_module然后在Java的main方法中执行以下调用 public static void main(String[] args) {System.out.println(我是中国人);SmallWidthDimensHelper helper new SmallWidthDimensHelper();helper.setBase(1080, 1920) //设计图基准宽高.setDefaultScale(1.0f) //默认缩放比.createSmallWidthDimens(); //最小宽度适配}
以上代码的setBase(1080, 1920)设置的是设计图即UI给出的基准屏幕宽高, setDefaultScale(1.0f)设置的是默认values文件夹中dp和实际dp的比值。
三. 效果图和项目结构图
下面贴出MainActivity中布局代码 ?xml version1.0 encodingutf-8?androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityTextViewandroid:idid/tv_textandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textHello World!app:layout_constraintLeft_toLeftOfparentapp:layout_constraintRight_toRightOfparentapp:layout_constraintTop_toTopOfparentandroid:layout_marginTop70dp/Buttonandroid:idid/btn_testandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text测试1app:layout_constraintStart_toStartOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintTop_toBottomOfid/tv_textandroid:layout_marginTop50dp/Buttonandroid:idid/btn_test2android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text测试napp:layout_constraintStart_toStartOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintTop_toBottomOfid/btn_testandroid:layout_marginTop50dp/androidx.appcompat.widget.AppCompatTextViewandroid:idid/act_oneandroid:layout_widthdimen/dp_360android:layout_heightdimen/dp_100app:layout_constraintTop_toTopOfparentandroid:layout_marginTopdimen/dp_20app:layout_constraintStart_toStartOfparentandroid:background#ff0000/androidx.appcompat.widget.AppCompatTextViewandroid:idid/act_twoandroid:layout_widthdimen/dp_720android:layout_heightdimen/dp_0android:background#00ff00app:layout_constraintBottom_toBottomOfid/act_oneapp:layout_constraintEnd_toEndOfparentapp:layout_constraintTop_toTopOfid/act_one //androidx.constraintlayout.widget.ConstraintLayout
生成文件夹部分结构图如下 随便打开一个dimens.xml文件部分代码如下 ?xml version1.0 encodingutf-8?resourcesdimen namedp_00.0dp/dimendimen namedp_10.29dp/dimendimen namedp_20.59dp/dimendimen namedp_30.88dp/dimendimen namedp_41.18dp/dimendimen namedp_51.48dp/dimendimen namedp_61.77dp/dimendimen namedp_72.07dp/dimendimen namedp_82.37dp/dimendimen namedp_92.66dp/dimendimen namedp_102.96dp/dimendimen namedp_113.25dp/dimendimen namedp_123.55dp/dimendimen namedp_133.85dp/dimendimen namedp_144.14dp/dimendimen namedp_154.44dp/dimendimen namedp_164.74dp/dimen......
注意这里生成的值也是dp。 屏幕适配部分机型效果图如下 四. ScreenMatch插件的使用
最小宽度适配方案其实在Androidstudio中由一个插件ScreenMatch,其使用的话可参考