android-fragments 如何在方向改变时保持工具栏背景颜色?

am46iovg  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(130)

我在fragment的工具栏中遇到了这种不必要的行为,工具栏背景工作正常,但当滚动到一个水平,然后将方向从纵向模式更改为横向模式时,背景颜色丢失。横向模式的滚动状态与纵向模式相同。
如果您切换回纵向,背景颜色仍然会丢失
当背景颜色丢失时,更改滚动状态将恢复背景颜色。
问题是,在更改设备方向后,第一个滚动状态发生更改时,如何保持背景颜色?
第一个

igsr9ssn

igsr9ssn1#

横向模式的滚动状态与纵向模式相同。
当更改配置发生时(在您的情况下为方向),在正常情况下,系统能够保留一些内容,如滚动状态。
但是当滚动到某一水平然后将方向从纵向改变为横向模式时,背景颜色丢失。
但是其他的东西不能被保留,比如这个背景颜色,你在滚动ScrollView之后通过编程改变了这个颜色。
There are different ways,用于在片段中维护关于配置改变的数据;是使用ViewModels的最常见/最健壮的一个。
但在你的情况下作为滚动值是已经保存下来的;您可以直接覆盖onConfigurationChanged并重置那里的背景:

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    updateHeaderBackground(scrollView.getScrollY()); // Change this to scrollView.getScrollX() if you the scroll is horizontal
}

最新消息:
它不会被击中,在更改方向时由于某种原因未调用该方法
这可能是因为清单文件活动节中缺少android:configChanges="orientation"
但是,我宁愿推荐另一种解决方法:
您可以在onCreateView()回调中检查bundle参数是否为空,而不是覆盖onConfigurationChanged();对于配置更改,它不应为空:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    // CODE IS OMITTED
    
    if (savedInstanceState != null) // It's not null
        updateHeaderBackground(scrollView.getScrollY()); // Change this to scrollView.getScrollX() if you the scroll is horizontal
    
}

相关问题