gpt4 book ai didi

android - 如何隐藏底部栏导航。当遵循单一 Activity 设计时?

转载 作者:行者123 更新时间:2023-12-05 00:17:52 26 4
gpt4 key购买 nike

我试图仅在几个 fragment 中显示底部栏导航(即隐藏我的大部 fragment 段)..

我阅读了 official document关于这个,但我不清楚,比如我把代码放在哪里,我读了comments on this here on StackOverFlow ,例如“我很惊讶文档中建议这样做,因为它实际上看起来很糟糕,因为监听器在新 fragment 放置在屏幕上之前触发,导致可见闪烁(有时存在,有时不存在)”。

我对此进行了研究,据我了解,我需要创建一个嵌套的 naviagtion_graph(导航)或其他东西,听 onDestinationChanged 并将底部导航或工具栏设置为 Gone..

我不太明白这个..我只是想在大多数 fragment 中隐藏底部栏导航..

这是我的 navigation_gragh (mobile_navigation):

<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/mobile_navigation"
app:startDestination="@+id/navigation_home">

<fragment
android:id="@+id/navigation_home"
android:name="com.example.testingbottomnav.ui.home.HomeFragment"
android:label="@string/title_home"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/action_navigation_home_to_newScreenFragment"
app:destination="@id/newScreenFragment" />
</fragment>

<fragment
android:id="@+id/navigation_dashboard"
android:name="com.example.testingbottomnav.ui.dashboard.DashboardFragment"
android:label="@string/title_dashboard"
tools:layout="@layout/fragment_dashboard" />

<fragment
android:id="@+id/navigation_notifications"
android:name="com.example.testingbottomnav.ui.notifications.NotificationsFragment"
android:label="@string/title_notifications"
tools:layout="@layout/fragment_notifications" />
<fragment
android:id="@+id/newScreenFragment"
android:name="com.example.testingbottomnav.ui.newscreen.NewScreenFragment"
android:label="fragment_new_screen"
tools:layout="@layout/fragment_new_screen" />
</navigation>

这是我的 activity_main.xml :

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?attr/actionBarSize">

<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:labelVisibilityMode="selected"
app:menu="@menu/bottom_nav_menu" />

<fragment
android:id="@+id/nav_host_fragment_activity_main"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />

</androidx.constraintlayout.widget.ConstraintLayout>

这是我的 MainActivty.kt :

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

val navView: BottomNavigationView = binding.navView

val navController = findNavController(R.id.nav_host_fragment_activity_main)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
}

任何帮助将不胜感激,谢谢..

最佳答案

如果您想让 BottomNavigationView 仅在目的地是顶级目的地时可见,您可以尝试:

 val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home,
R.id.navigation_dashboard,
R.id.navigation_notifications
)
)
navController.addOnDestinationChangedListener { controller: NavController, destination: NavDestination, bundle: Bundle? ->
yourBottomNavigationView.isVisible = appBarConfiguration.topLevelDestinations.contains(destination.id)
}

关于android - 如何隐藏底部栏导航。当遵循单一 Activity 设计时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70763230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com