Как отключить превращение иконки гамбургера в стрелку (компонент навигации) - PullRequest
0 голосов
/ 17 июня 2020

Помогите мне, пожалуйста.
Введение : Я использую компонент навигации, шаблон одного действия с 3 фрагментами, переключаемыми через нижнее меню навигации. Также у меня есть навигация по ящику.
Все фрагменты одного уровня (все root, доступ к ним осуществляется напрямую из нижней части навигации)
Как должно быть : для всех фрагментов должен быть панель инструментов со значком гамбургера для ящика.
Проблема : при запуске приложения в домашнем фрагменте отображается стандартный значок гамбургера для ящика, и это нормально. Но когда я переключаюсь на любой другой фрагмент, значок ящика превращается в значок стрелки. Кроме того, при нажатии стрелки ящик выдвигается слева. Это означает, что он по-прежнему работает как кнопка для отображения меню ящика, но изменился только значок .
Вопрос : Как отключить преобразование значка гамбургера в значок стрелки при переходе к другим фрагментам из нижнего меню навигации?
Файлы : График навигации:

<navigation 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:id="@+id/nav_graph"
    app:startDestination="@id/bottom_nav_proposals"
    >
    <fragment
        android:id="@id/bottom_nav_proposals"
        android:name="com.base.ProposalsContainerFragment"
        android:label="fragment_proposals"
        tools:layout="@layout/fragment_proposals" />
    <fragment
        android:id="@id/bottom_nav_vehicles"
        android:name="com.base..DriversVehiclesFragment"
        android:label="Vehicles" >
    </fragment>
    <fragment
        android:id="@id/bottom_nav_drivers"
        android:name="com.bijov1apps.base.carrier.root.drivers.DriversVehiclesFragment"
        android:label="Drivers" >
    </fragment>
</navigation>

Действие:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
//initializing Navigation COmponent
       val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_carrier_root) as NavHostFragment
        val navController = navHostFragment.navController
//setting up toobar stuff
        val toolbar: Toolbar = findViewById(R.id.toolbar_root)
        toolbar.setupWithNavController(navController, drawerLayout)
//setting up navigation drawer stuff
        val drawerLayout:DrawerLayout = findViewById(R.id.drawer_layout)
        val navView: NavigationView = findViewById(R.id.nav_view)
        val toggle = ActionBarDrawerToggle(
            this, drawerLayout, toolbar, R.string.navigation_drawer_open, 
        R.string.navigation_drawer_close
        )
        drawerLayout.addDrawerListener(toggle)
        toggle.syncState()
        navView.setNavigationItemSelectedListener(this)
//setting up bottom navigation menu stuff
        val bottomNavigationView = findViewById<BottomNavigationView>(R.id.logisticBottomBar)
        bottomNavigationView.setupWithNavController(navController)
}

1 Ответ

1 голос
/ 17 июня 2020

Согласно документации Навигационной верхней панели приложения :

NavigationUI использует объект AppBarConfiguration для управления поведением кнопки навигации в верхнем левом углу вашего область отображения приложения. Поведение кнопки навигации меняется в зависимости от того, находится ли пользователь в пункте назначения верхнего уровня.

Пункт назначения верхнего уровня - это пункт назначения root или самого высокого уровня в наборе иерархически связанных пунктов назначения. В местах назначения верхнего уровня не отображается кнопка «Вверх» на верхней панели приложения, поскольку нет места назначения более высокого уровня. По умолчанию начальным пунктом назначения вашего приложения является единственный пункт назначения верхнего уровня.

Когда пользователь находится в пункте назначения верхнего уровня, кнопка навигации становится значком ящика, если в пункте назначения используется DrawerLayout. Если место назначения не использует DrawerLayout, кнопка навигации скрыта. Когда пользователь находится в любом другом месте назначения, кнопка навигации отображается как кнопка «Вверх».

Поэтому, если вы хотите, чтобы значок ящика отображался на всех значках верхнего уровня, вам необходимо создать AppBarConfiguration, в котором перечислены эти пункты назначения, и использовать его при вызове setupWithNavController():

val appBarConfiguration = AppBarConfiguration(
    setOf(R.id.bottom_nav_proposals, R.id.bottom_nav_vehicles, R.id.bottom_nav_drivers), drawerLayout)
toolbar.setupWithNavController(navController, appBarConfiguration)

В документации по Navigation Drawer на той же странице также специально указывается, что вы не должны использовать ActionBarDrawerToggle при использовании навигации. Вы должны удалить весь этот код.

...