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

recyclerview 的item布局错乱 #59

Closed
qiangzengli opened this issue Oct 5, 2018 · 14 comments
Closed

recyclerview 的item布局错乱 #59

qiangzengli opened this issue Oct 5, 2018 · 14 comments

Comments

@qiangzengli
Copy link

小米 4 点击home键 后 再返回 导致 recyclerview 的item布局错乱
在vivox9 上也是同样的问题 ,请大佬指教

@qiangzengli
Copy link
Author

我又测试了一下,发现是系统一旦调用onpause 然后恢复 item的适配效果就没有了,请大佬指点

@JessYanCoding
Copy link
Owner

JessYanCoding commented Oct 8, 2018

试试在恢复 item 之前调用 AutoSize#autoConvertDensity 手动适配,只要在 View 呈现到屏幕上之前,调用这个方法,理论上可以解决掉所有适配失效的问题

@qiangzengli
Copy link
Author

谢谢您的答复,使用这个方法成功解决的按home键适配失效的问题,但是没有解决按锁屏键的失效问题,这点我很是郁闷,打印了一下生命周期,按Home键和锁屏键生命周期是一样的呀,为什么解锁不能适配呢?(注:我的recyclerview 是在fragment中的)

@qiangzengli
Copy link
Author

谢谢大佬,已经解决了,我在onBindViewHolder中调用一下这个方法就解决了。
膜拜ing

@JessYanCoding
Copy link
Owner

好的,反正后面如果再遇到适配失效就调用这个方法,只要调用时机选择对就一定能解决问题

@zijin2014
Copy link

谢谢大佬,已经解决了,我在onBindViewHolder中调用一下这个方法就解决了。
膜拜ing

我的问题通过这种方式解决了,谢谢!

@imliujun
Copy link

如果我们不能知道是什么原因导致的适配失效,为了保证每个页面都显示正常,是不是每个页面都需要调用AutoSize#autoConvertDensity @JessYanCoding

@imliujun
Copy link

从本项目刚发布到现在,我们使用了 PT 副单位,一开始经常出现适配失效的情况,更新到1.1.0后,很少出现了,但是还是会偶现,主要表现在文字大小上,因为我们将所有的文字大小单位也设置为 PT ,防止系统字体大小改变应用中的文字大小。
但是偶尔会出现 PT 适配失效,文字变得很大。

@JessYanCoding
Copy link
Owner

JessYanCoding commented Dec 13, 2018

@imliujun 框架本身就已经在每个 Activity 执行 onCreate 和 onStart 生命周期时调用了 AutoSize#autoConvertDensity,不过你想更稳定可以试试在 onResume 中也调用一下 AutoSize#autoConvertDensity 看是否稳定性得到增加,因为 density 的修改是全局的,所以这个方案,可以做到低侵入性和低成本,但同样带来一个稳定性的问题,只要项目中、系统中或三方库中,有一处代码修改了 density 或将 density 还原为默认值,这就会导致整个项目其他页面适配的失效,而这威胁最大的就是某些定制系统,而有些系统确很稳定

所今日头条屏幕适配方案,只要是屏幕适配失效,很大程度都是因为上述的原因,在布局展示到屏幕之前 density 被某些地方修改成了不正确的值,所以万能的解决方案就是这个 #13 (comment) ,只要你能找到调用 AutoSize#autoConvertDensity 的正确时机,就一定能解决问题

今天我会发布一个新版本,使用 AutoSizeConfig.getInstance().setExcludeFontScale(true) 即可防止系统字体大小影响 app 的字体大小,即使你使用的是 sp 也可以奏效

@imliujun
Copy link

@JessYanCoding 厉害,目前来看确实很少出现问题了,昨天是公司一个同事拿个坚果手机在我面前复现了一次,我再重复操作就没有复现出来了。

@JessYanCoding
Copy link
Owner

@imliujun 升级到 v1.1.1,调用 AutoSizeConfig.getInstance().setExcludeFontScale(true); 即可

@dukevalorosol
Copy link

@imliujun 升级到 v1.1.1,调用 AutoSizeConfig.getInstance().setExcludeFontScale(true); 即可

请问调用时机是什么时候呢?好像效果不太理想

@gmgw0909
Copy link

横竖屏切换recyclerview的item字体会变小

@JessYanCoding
Copy link
Owner

JessYanCoding commented Jul 6, 2021

可能是 recyclerview 复用之前的 View 导致的,最好在 onBindHodlder 中使用 AutoSize.autoConvertDensityOfGlobal(activity) 设置 Density 后,再手动刷新这个 Item View 的所有 UI 内容。

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

6 participants