带有操作栏图标单击的NavigationUI导致片段淡入和淡出

问题描述 投票:0回答:1

我有一个带图标的操作栏,单击该图标可在屏幕上显示对应的片段。这与导航图无关。在操作栏中单击相应图标时,我正在使用NavigationUI.onNavDestinationSelected方法导航到各个片段。当我使用导航图通过片段内的按钮单击动作等在片段之间导航时,没有动画,但是当我单击动作栏图标时,它将导致对应的片段缓慢地淡入和淡出。要禁用此功能,我该怎么办?

包含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)
    }
}
android android-fragments android-actionbar android-animation android-navigation-editor
1个回答
0
投票

我找到了解决方案。您必须通过在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

    1. 右键单击res文件夹(如果没有动画文件夹,然后单击New -> Android Resource File
    2. 选择动画作为类型
    3. 键入nav_default_enter_anim作为名称,然后单击确定。
    4. 重复其他文件,但是这次右键单击动画文件夹。

所有文件中只能包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!--Empty to disable animation-->
</set>

这是帮助我的stackoverflow答案:https://stackoverflow.com/a/56306166/10259491

© www.soinside.com 2019 - 2024. All rights reserved.