单击操作栏图标的 NavigationUI 会导致片段淡入淡出
NavigationUI with actionbar icon clicks result in fragments fading in and out
我有一个带有图标的操作栏,单击该图标会在屏幕上显示相应的片段。这与导航图无关。当在操作栏中单击对应的图标时,我正在使用 NavigationUI.onNavDestinationSelected
方法导航到相应的片段。当我使用导航图通过片段内的按钮单击操作等在片段之间导航时,没有动画,但是当我点击操作栏图标时,它会导致相应的片段慢慢淡入和淡出。我需要做什么才能禁用此功能?
主要 activity 包含 NavHostFragment:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.navigation.ui.NavigationUI
import com.google.android.material.snackbar.Snackbar
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
navController = Navigation.findNavController(this, R.id.navHostFragment)
NavigationUI.setupActionBarWithNavController(this, navController)
//supportActionBar?.setDisplayHomeAsUpEnabled(true)
//setSupportActionBar(toolbar)
}
override fun onSupportNavigateUp(): Boolean {
onBackPressed()
return true
}
//TODO: add options in overflow menu to add new category and a new task
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main_menu, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId)
{
R.id.app_settings -> {
//just to test it out
Snackbar.make(findViewById(R.id.main_activity_container), "app settings option clicked", Snackbar.LENGTH_LONG).show()
true}
R.id.main_pomo_settings -> {
//just to test it out
Snackbar.make(findViewById(R.id.main_activity_container), "pomo settings option clicked", Snackbar.LENGTH_LONG).show()
true}
}
return NavigationUI.onNavDestinationSelected(item!!, navController) || super.onOptionsItemSelected(item)
}
}
我找到了我自己的问题的解决方案。您必须通过在 anim 文件夹中创建以下空动画文件来禁用动画:
res/anim/nav_default_enter_anim.xml
res/anim/nav_default_exit_anim.xml
res/anim/nav_default_pop_enter_anim.xml
res/anim/nav_default_pop_exit_anim.xml
- 右键单击 res 文件夹(如果不存在 anim 文件夹)和 select
New -> Android Resource File
- Select 资源类型的动画
- 键入
nav_default_enter_anim
作为文件名,然后单击“确定”。
- 重复其他文件,但这次右键单击动画文件夹。
在每个文件中放入以下内容:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--Empty to disable animation-->
</set>
我有一个带有图标的操作栏,单击该图标会在屏幕上显示相应的片段。这与导航图无关。当在操作栏中单击对应的图标时,我正在使用 NavigationUI.onNavDestinationSelected
方法导航到相应的片段。当我使用导航图通过片段内的按钮单击操作等在片段之间导航时,没有动画,但是当我点击操作栏图标时,它会导致相应的片段慢慢淡入和淡出。我需要做什么才能禁用此功能?
主要 activity 包含 NavHostFragment:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.navigation.ui.NavigationUI
import com.google.android.material.snackbar.Snackbar
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
navController = Navigation.findNavController(this, R.id.navHostFragment)
NavigationUI.setupActionBarWithNavController(this, navController)
//supportActionBar?.setDisplayHomeAsUpEnabled(true)
//setSupportActionBar(toolbar)
}
override fun onSupportNavigateUp(): Boolean {
onBackPressed()
return true
}
//TODO: add options in overflow menu to add new category and a new task
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main_menu, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId)
{
R.id.app_settings -> {
//just to test it out
Snackbar.make(findViewById(R.id.main_activity_container), "app settings option clicked", Snackbar.LENGTH_LONG).show()
true}
R.id.main_pomo_settings -> {
//just to test it out
Snackbar.make(findViewById(R.id.main_activity_container), "pomo settings option clicked", Snackbar.LENGTH_LONG).show()
true}
}
return NavigationUI.onNavDestinationSelected(item!!, navController) || super.onOptionsItemSelected(item)
}
}
我找到了我自己的问题的解决方案。您必须通过在 anim 文件夹中创建以下空动画文件来禁用动画:
res/anim/nav_default_enter_anim.xml
res/anim/nav_default_exit_anim.xml
res/anim/nav_default_pop_enter_anim.xml
res/anim/nav_default_pop_exit_anim.xml
- 右键单击 res 文件夹(如果不存在 anim 文件夹)和 select
New -> Android Resource File
- Select 资源类型的动画
- 键入
nav_default_enter_anim
作为文件名,然后单击“确定”。 - 重复其他文件,但这次右键单击动画文件夹。
在每个文件中放入以下内容:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--Empty to disable animation-->
</set>