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

主页面有很多个fragment,第一次运行软件,有的页面整体变得很大;当程序退出后,以后再进来都很正常,请问这是什么问题? #69

Closed
zijin2014 opened this issue Oct 25, 2018 · 20 comments

Comments

@zijin2014
Copy link

zijin2014 commented Oct 25, 2018

第一次运行时日志
id4cszekc p ny_ng6 zhg

@mackwu828
Copy link

这个问题我也一直碰到,某些fragment适配会失败,变成副单位的尺寸,然后控件就变的很大。希望作者看下是什么问题@JessYanCoding

@JessYanCoding
Copy link
Owner

JessYanCoding commented Oct 29, 2018

由于 Fragment 的生命周期特别复杂,很多特殊情况会导致框架自动适配的失效,如果遇到失效请在合适的时机手动适配,比如 https://github.com/JessYanCoding/AndroidAutoSize/blob/master/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java#L47

参考 #13 (comment)

@anuo10
Copy link

anuo10 commented Oct 29, 2018

兄弟 你解决了么 我的也是 我还纳闷是什么原因呢 我的主页全是 fragment, 有时候进来 整体会变小 ,怎么解决呢?分享一波???我的并不是因为屏幕旋转导致的,就是偶然性的 ,但频率有点高

@JessYanCoding
Copy link
Owner

JessYanCoding commented Oct 29, 2018

兄弟能举一反三好吗 ...,你发生问题的原因虽然不是屏幕旋转但是解决方案却是一样的,今日头条方案唯一的不足就是修改后的 density 会在某些情况,或者在某些机型上被恢复成默认的 density,导致适配失效或者适配异常

你只要在当前页面的 view 被显示到屏幕上之前,把 density 修改成你期望的值就可以保证一定能完成适配,应用到框架中就是在合适的时机调用 AutoSize#autoConvertDensity() 手动修改 density,#13 (comment) 中已经描述的非常清楚了,这个就是万能的解决方案,所有适配失效都可以通过这个方式解决,如果这个方式都不能解决,那基本很难解决了

还有如果使用了自定义 Fragment 这个功能,需要注意一下,Fragment 的自定义尺寸这个需求,框架虽然支持,但是只是为了支持某些项目的特殊需求而设立的,实际开发中基本很难用到,所以框架才默认是关闭的,一般一个 Fragment 的布局覆盖了整个屏幕并且这个 Fragment 的设计图尺寸却和之前布局的设计图尺寸不同才会需要自定义 Fragment,如果一个 Activity 的整个页面由多个 Fragment 布局分割,每个 Fragment 只是占整个页面的一部分,并不能完全覆盖整个屏幕,那这几个 Fragment 是不需要自定义设计图尺寸的,你只要保证这个 Activity 的设计图尺寸和设计图是一样的就可以了,因为在这时这几个 Fragment 只是碎片,将这几个碎片组合起来才是一个设计图,而 Activity 是一个将他们组合在一起的容器,你只要保证这个容器的设计图尺寸是对的就可以了

@mackwu828
Copy link

mackwu828 commented Oct 29, 2018

设计搞的尺寸是750*1334,那在fragment的onCreateView中调用AutoSize.autoConvertDensity(getActivity(), 375, true)指定density吗。是传的375吗,运行后尺寸不对

还是只实现CustomAdapt。这个相当于覆盖了设计搞的尺寸吧,会解决适配失效的问题吗
@OverRide
public boolean isBaseOnWidth() {
return true;
}

@Override
public float getSizeInDp() {
    return 375;
}

@JessYanCoding
Copy link
Owner

onCreateView 中调用 AutoSize.autoConvertDensity() 即可,不需要实现 CustomAdapt,AutoSize.autoConvertDensity() 中填写你 manifest 中写的宽度

@anuo10
Copy link

anuo10 commented Oct 30, 2018

    AutoSize.autoConvertDensity(getActivity(), 375, true);我把这句话加载我的 BaseFragment 的 onCreateView 方法中,还是不行...很尴尬

@JessYanCoding
Copy link
Owner

JessYanCoding commented Oct 30, 2018

@anuo10 不行是哪种不行你也没截图,只要确定,View 在被绘制之前 density 被修改成期望的值,按系统的原理不会出现问题,除非是系统定制过,修改了某些东西

@anuo10
Copy link

anuo10 commented Oct 30, 2018

暂时复现不了,不好意思哈,我看上面讲解,是在创建 fragment 的时候去约束布局,我想根据 fragment 的生命周期的去约束,应该就可以了.要是还有问题,再反馈哈

@JessYanCoding
Copy link
Owner

@anuo10 好的👌

@mackwu828
Copy link

mackwu828 commented Oct 30, 2018

我添加了AutoSize.autoConvertDensity(Objects.requireNonNull(getActivity()), 750, true);
但是偶尔重新进入app后,fragment中部分布局适配失效,我这里是include了一个布局,可以看到从横线开始适配就失效了,横线是android:layout_marginLeft="40mm"
0iu7 o t it8_bph2p p9

404amkp6n xgoqfx3aj 81

@JessYanCoding
Copy link
Owner

@wjj201411 重新进入 App 也需要调用 AutoSize.autoConvertDensity,比如在 onResume 中调用

@mackwu828
Copy link

我已经再onCreateView中调用了autoConvertDensity,还要在onResume中调用吗。
关于上面那个fragment中全部布局适配失效,控件变大的情况,虽然不会必现,但是测试反馈给我还是会偶现,我已经在onCreateView中调用了autoConvertDensity。

@JessYanCoding
Copy link
Owner

JessYanCoding commented Oct 30, 2018

对,在 onResume 中调用,上面的原理我也分析了,适配失效的原因无非就是 修改后的 density 会在某些情况,或者在某些机型上被恢复成默认的 density,你保证 View 绘制前,density 是正确值即可

@mackwu828
Copy link

好的,谢谢群主哈

@DevXue
Copy link

DevXue commented Oct 31, 2018

@JessYanCoding 建议大佬加个更新日志··· 我之前用的是1.0.0,今天看了下成了1.0.5了! 不知道大佬更新了什么!, 哈哈哈 这只是我个人的愚见啊!

@JessYanCoding
Copy link
Owner

@mackwu828
Copy link

@JessYanCoding 请问这个打印有方法控制吗
MainActivity Info: isBaseOnWidth = true, designWidthInDp = 750.000000, targetDensity = 1.440000, targetScaledDensity = 1.440000, targetDensityDpi = 230, targetXdpi = 1.440000

@JessYanCoding
Copy link
Owner

JessYanCoding commented Nov 2, 2018

@wmjwmj828

AutoSizeConfig.getInstance()
                .setLog(false);

@JessYanCoding
Copy link
Owner

@wjj201411 兄弟,下图中说的软件是不是你上面截图的那个软件?
ac6b7528-f99f-4c66-9e1e-919d1323496f
cca383ae-2f37-4fa8-a326-5512283185b8

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

5 participants