Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

红米5plus适配问题 #8

Closed
heavenrobotxu opened this issue Aug 22, 2018 · 8 comments
Closed

红米5plus适配问题 #8

heavenrobotxu opened this issue Aug 22, 2018 · 8 comments

Comments

@heavenrobotxu
Copy link

我的红米5plus,在manifest中设置了基准宽是375dp。基准高是667dp,然后在页面中view的高度设置为667dp,并没有充满页面,底部空余了非常大的空间,感
screenshot_2018-08-22-10-48-16-034_com hr autosizeapp
tim 20180822105441

觉没有适配

@heavenrobotxu
Copy link
Author

试了下宽度是适配的,高感觉有点问题

@JessYanCoding
Copy link
Owner

JessYanCoding commented Aug 22, 2018

上面的日志显示,你只是以宽为基准,当然只能让宽度占满屏幕

没有什么基准高,基准宽这么一说,只能以高或宽中的一个作为基准,建议看看我的 文章,原理看懂了才会用,以下为文章内容


要看懂下面的内容,还得明白,今日头条的适配方式,今日头条适配方案默认项目中只能以高或宽中的一个作为基准,进行适配,为什么不像 AndroidAutoLayout 一样,高以高为基准,宽以宽为基准,同时进行适配呢

这就引出了一个现在比较棘手的问题,大部分市面上的 Android 设备的屏幕高宽比都不一致,特别是现在大量全面屏的问世,这个问题更加严重,不同厂商推出的全面屏手机的屏幕高宽比都可能不一致

这时我们只以高或宽其中的一个作为基准进行适配,就会有效的避免布局在高宽比不一致的屏幕上出现变形的问题


你设置的设计图尺寸,宽是375dp,高是667dp,其实在框架适配时只会用到其中的一个,当以宽为基准进行适配时,用的就是宽度 375 dp,当以高度为基准进行适配时,用的就是高度 667 dp

在你当前页面以宽为基准进行适配时,在布局中有一个 View 宽度为 375dp,那这个 View 的宽度就刚好覆盖屏幕宽度,和屏幕一样宽,但如果这个 View 高为 667 dp 就不可能刚好覆盖屏幕高度,在有些设备会超出屏幕高度,有些会低于

如果你当前页面以高为基准进行适配,这时 667 dp 高度的 View 就可以刚好覆盖屏幕高度,在任何设备上都会刚好覆盖屏幕高度,不会过高,也不会过低,但是 375 dp 的宽度,就又可能会出现无法覆盖屏幕宽度的问题,在有些设备会超出屏幕宽度,有些会低于

它只能以高宽中的一个作为基准进行适配,这是为了在屏幕高宽比和设计图高宽比不同的设备上,也能正常适配,不是所有设备的屏幕高宽比都和设计图高宽比一样,你如果让设计图在所有设备上高宽都全部填充屏幕,那在高宽比与设计图高宽比不同的屏幕上,你的 View 肯定会严重变形,懂了原理才能刚好的使用框架,建议你好好看看我的文章

框架默认以宽度为基准进行适配,如果要想以高度为基准 AutoSizeConfig.getInstance().setBaseOnWidth(false)

@heavenrobotxu
Copy link
Author

嗯好的充分了解了,感谢楼主的解释

@androidmoyan1992
Copy link

基准是375 * 667(dp)的设计图, 如果以宽度为基准, 那有的手机分辨率是2160* 1080 (px) 或者是 1880* 1080这种 有点不是正规的手机分辨率, 那肯定是适配不好的,请问有什么解决方案没有,我看了#8的,您好像没有给出什么好的回答啊!坐等大神回复

@JessYanCoding
Copy link
Owner

JessYanCoding commented Nov 13, 2018

@androidmoyan 以宽度为基准时,只是在高度上不能像宽度一样刚好填满屏幕, 并不是就完全不能适配了,你可以使用 weight、RelativeLayout、约束布局、Recyclerview 等控件来实现,你之前没使用屏幕适配方案时怎么布局,现在就怎么样布局,以前没使用屏幕适配方案时,你也不可能全部 view 的所有属性都填写精确的 size 吧,只是屏幕适配方案让这个变成可能,这个就不多介绍了,算是基础了,以高度为基准也同理

@JessYanCoding JessYanCoding mentioned this issue Nov 29, 2018
5 tasks
@xadlovezy
Copy link

还不如直接用dimens,至少到宽高同时适配,保证和设计图一样的比例

@JessYanCoding
Copy link
Owner

JessYanCoding commented Mar 3, 2019

@xadlovezy 如果你说的用 dimens 的适配方案是 SmallestWidth(最小宽度)适配方案,那这种方式原理也差不多,也是只能以宽为基础进行适配,https://www.jianshu.com/p/2aded8bb6ede ,只要有屏幕高宽比和你的设计图高宽比不一致的设备存在,要想强制做到让布局根据设计图的高宽比例,等比例同时拉伸并填满屏幕,反而会导致 View 在某些设备上适配的畸形

AndroidAutoLayout 就是默认所有设备的屏幕高宽比都和设计图的高宽比(比如 16:9)保持一致,所以在某些屏幕高宽比与设计图高宽比不一致的设备上会出现 问题 问题,这些问题的解决方案就是将布局高度同样按照设计图宽度的拉伸比例进行适配,放弃之前布局高度以设计图高度,布局宽度以设计图宽度的适配方式,因为这样的设计本身就存在问题,不适用于现在这种全面屏普及的时代

@JessYanCoding
Copy link
Owner

JessYanCoding commented Apr 11, 2019

关于 AndroidAutoLayout 的适配方式,和 AndroidAutoSize 的适配方式,建议看看这篇 文章

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants