前言:关于这个问题就设计到了很多单位了,什么px、pt、dp、sp,手机尺寸,ppi等等,我这里只介绍我解除过比较靠谱的。如果你有更好的屏幕适配方案,请在评论区留下链接。非常感谢
一、最小宽度 限定符(推荐)
什么是最小宽度限定符,先看看我的截图把:
没错,以- 这种结尾的文件夹,和你项目里的文件处于同一级。
我简单用我的话理解下:推荐使用的单位是dp(就像苹果推荐使用的单位是pt一样),这里的意思是屏幕密度的意思。听到密度就知道了。虽然各大尺寸分辨率很多,但是用密度衡量的话,会显得很少。简单的话来说就是:1寸的屏幕里,像素点是一样的
1.1、感谢大神插件
详细链接,感谢。
当你会使用插件后,我稍微讲下.这个文件,是插件自动生成的:
点开的是这样的
############################################################################
#
# You need to refresh or reopen the project every time you modify the configuration,
# or you can't get the latest configuration parameters.
#
#############################################################################
#
# Base dp value for screen match. Cut the screen into [base_dp] parts.
# Data type is double. System default value is 360.
# I advise you not to modify the value, be careful !!!!!!!!! _^_ *_*
# 设计图上最小的宽度的基准值。意思就是满屏时是360dp
base_dp=360
# Also need to match the phone screen of [match_dp].
# If you have another dp values.
# System default values is 320,360,384,392.7272,400,410,411.4285,432,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365
# 要适配的最小宽度有哪些宽度
match_dp=320,360,384,392.7272,400,410,411.4285,432,480,533,592,600,640
# If you not wanna to match dp values above. Write some above values here, append value with "," .
# For example: 811,961,1365
# 需要忽略适配的宽度有哪些
ignore_dp=662,720,768,800,811,820,960,961,1024,1280,1365
# They're not android module name. If has more,split with , Symbol.
# If you set, it will not show in SelectDialog.
# If you have, write here and append value with "," .
# For example: testLibrary,commonModule
1.2、同时适配 手机 & 平板
首先我们要知道一点,同时要适配手机和平板,这里应该有2套布局。做一套手机的做一套平板的。知道这个就好办了。我们都知道手机屏幕的大小一般在3英寸-5英寸之间,平板电脑的大小在7英寸-10英寸之间。所以手机会直接运行里的布局。我们再定义一个-文件夹,与同一层。里面的布局就是平板布局。当然你要更精细的可以协商不同尺寸的文件夹。如下
这样的话运行在手机上,会走。运行在平板会走-。你可以放2套不同的布局试试。但是你的的xml名称要保持一致哦。
我首先运行在手机上,再运行在平板上。同一个项目,看效果
1.3、同时适配横竖屏
当你会使用插件里,是不是生成了很多最小宽度限定符的文件夹。之前也说了最小宽度限定符,是不区分横竖屏,既最小那边是最小宽度。那么这样的话在切换横竖屏幕的时候是会混乱的。意思你再竖屏的时候设置了一个控件,占屏幕宽度一半,但切换到横屏时,却没有占一半。具体怎么做呢??
将插件生成的文件夹,前面的的s去掉,变成wXXdp。,大致意思,当前方向就是最小宽度的方向,这里区分了横竖屏了。看下面效果(这里配置好了,我什么都没干,只是旋转了手机,看适配效果):
这里稍微提下,就不细讲了。如果你想单独为横屏或者竖屏幕适配一套,可以利用横竖限定符
关于以上demo链接
二、屏幕分辨率限定符( 小心使用 )
什么是屏幕分辨率限定符?
首先感谢张鸿洋的自动生成工具
但是经过我具体细致的测试下,我发现问题大大的。首先这本身就是屏幕分辨率限定符的弊端。先看我的测试,我使用的真机测试机,
很明显我的手机是1080 x 1920的分辨率。这里我们从lay_x.xml分析就行了。首先我是以设计图里的宽度375去生成这些文件夹。
之后我在里放了2个控件,一个设置成@dimen/x375,另外一个设置成@dimen/x187。但是结果并不是,一个满屏,一个半屏。之后我很奇怪所以我在里打印了当前@dimen/x375的长度,和屏幕当前宽度。结果是这样的:
发现屏幕宽度确实是1080。但是@dimen/x375的值确是800。然后我那一堆文件夹里去找,找到了-文件夹里是800px。但是我就有点奇怪了。既然有-文件夹。为什么不走呢??!!我后面怒删-文件夹。结果走的是-。我整个人都震惊了,震惊了。我在想,我以前某些项目岂不是坑爹了。!!后面继续怒删-文件夹。结果删了一个遍,系统一直去往上找。就是不找。没办法继续去找资料了解这个机制。直接给链接吧
被误用的屏幕分辨率限定符
屏幕适配,比较全的方案
个人建议屏幕分辨率限定符还是小心使用吧。不像那样能经受的住考验。如果你有更好的屏幕适配方法,请在评论区留下链接。一起加油进步。3q
三、今日头条屏幕适配方案
今日头条屏幕适配方案终极版,一个极低成本的 屏幕适配方案
字节跳动官方文章
小结:经过实际测试和大量虚拟机测试,今日头条是以360dp为例,且以为例。不改代码直接去试。设置了360dp后,如果属于的手机确实正常,但是不是160的dpi却不是满屏。且如果动态获取dpi:.。却发现还是不能实现如官网文章所说的效果。是我忽略什么了吗?而且全it平台全是以官网文章为例子,360和160。大家真的用了多种机型测试过吗。希望有比较了解的,能解决我的疑惑!!!
评论(0)