解决方法
(1)通过设置禁用叠加
你的XML中的android:windowSharedElementsUSEOverlay =“false”.禁用时,共享元素将作为被调用的Activity视图层次结构的一部分绘制,从而使共享元素无法在系统UI栏顶部意外重叠.
不幸的是,禁用此行为可能最终会引入新问题……
例如,您可能会发现任一活动中的非共享视图在共享元素转换到位时开始剪切它们.在大多数情况下,您可以通过为XML中的每个共享元素的父级设置android:cliptochildren =“false”和“android:clipToPadding =”false“来防止这种情况发生,但根据具体的用例,可能还需要其他配置.
(2)添加操作栏,状态栏背景和导航栏背景作为附加共享元素
通过使系统禁用共享元素,您可以确保原始共享元素和系统UI在窗口的View层次结构的其余部分上绘制在同一级别.要获取对这些视图的引用,可以使用以下代码:
你的XML中的android:windowSharedElementsUSEOverlay =“false”.禁用时,共享元素将作为被调用的Activity视图层次结构的一部分绘制,从而使共享元素无法在系统UI栏顶部意外重叠.
不幸的是,禁用此行为可能最终会引入新问题……
例如,您可能会发现任一活动中的非共享视图在共享元素转换到位时开始剪切它们.在大多数情况下,您可以通过为XML中的每个共享元素的父级设置android:cliptochildren =“false”和“android:clipToPadding =”false“来防止这种情况发生,但根据具体的用例,可能还需要其他配置.
(2)添加操作栏,状态栏背景和导航栏背景作为附加共享元素
通过使系统禁用共享元素,您可以确保原始共享元素和系统UI在窗口的View层次结构的其余部分上绘制在同一级别.要获取对这些视图的引用,可以使用以下代码:
查看decor = getWindow().getDecorView();
查看statusBar = decor.findViewById(android.R.id.statusBarBackground);
查看navBar = decor.findViewById(android.R.id.navigationBarBackground);
查看actionBar = decor.findViewById(getResources().getIdentifier(“action_bar_container”,“id”,“android”));