从一个片段过渡到另一个片段时,工具栏会闪烁
Toolbar blinks when transitioning from fragment to fragment
我的 parent Activity 中有一个工具栏。有两个children-fragments。当我按下 FAB 按钮在片段之间转换时,工具栏会闪烁。我能做些什么来修复它?谢谢!
screenshot
主要Activity
XML:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ToolbarTheme"
app:popupTheme="@style/ToolbarTheme"/>
科特林:
navController = findNavController(R.id.myNavHostFragment)
setSupportActionBar(findViewById(R.id.toolbar))
setupActionBarWithNavController(navController)
片段A
XML:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/floatingActionButton"
android:transitionName="shared_element_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:clickable="true"
android:focusable="true"
app:elevation="8dp"
/>
科特林:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
postponeEnterTransition()
binding = FragmentListBinding.inflate(inflater, container, false)
binding.root.doOnPreDraw {
startPostponedEnterTransition()
}
return binding.root
片段 B
XML:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:transitionName="shared_element_container">
科特林:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedElementEnterTransition = MaterialContainerTransform()
sharedElementReturnTransition = MaterialContainerTransform()
}
已解决: 对我有用的是我从主 activity 中删除了我的工具栏并将应用程序主题从“(主题名称)”.NoActionBar 更改为'(主题名称)'.DarkActionBar。所以我把工具栏放在主题中,它解决了问题
当您使用共享元素过渡设置动画时,您需要排除不设置动画的视图。
像这样:
val animation = MaterialContainerTransform() // Initialize the default animation
animation.excludeTarget(R.id.toolbar, true) // Exclude your toolbar from said animation
对我有用的是,我从主 activity 中删除了我的工具栏,并将应用程序主题从“(主题名称)”.NoActionBar 更改为“(主题名称)”.DarkActionBar。所以我把工具栏放在主题中,它解决了问题
我的 parent Activity 中有一个工具栏。有两个children-fragments。当我按下 FAB 按钮在片段之间转换时,工具栏会闪烁。我能做些什么来修复它?谢谢!
screenshot
主要Activity
XML:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ToolbarTheme"
app:popupTheme="@style/ToolbarTheme"/>
科特林:
navController = findNavController(R.id.myNavHostFragment)
setSupportActionBar(findViewById(R.id.toolbar))
setupActionBarWithNavController(navController)
片段A
XML:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/floatingActionButton"
android:transitionName="shared_element_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:clickable="true"
android:focusable="true"
app:elevation="8dp"
/>
科特林:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
postponeEnterTransition()
binding = FragmentListBinding.inflate(inflater, container, false)
binding.root.doOnPreDraw {
startPostponedEnterTransition()
}
return binding.root
片段 B
XML:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:transitionName="shared_element_container">
科特林:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedElementEnterTransition = MaterialContainerTransform()
sharedElementReturnTransition = MaterialContainerTransform()
}
已解决: 对我有用的是我从主 activity 中删除了我的工具栏并将应用程序主题从“(主题名称)”.NoActionBar 更改为'(主题名称)'.DarkActionBar。所以我把工具栏放在主题中,它解决了问题
当您使用共享元素过渡设置动画时,您需要排除不设置动画的视图。
像这样:
val animation = MaterialContainerTransform() // Initialize the default animation
animation.excludeTarget(R.id.toolbar, true) // Exclude your toolbar from said animation
对我有用的是,我从主 activity 中删除了我的工具栏,并将应用程序主题从“(主题名称)”.NoActionBar 更改为“(主题名称)”.DarkActionBar。所以我把工具栏放在主题中,它解决了问题