标签: android-bottomnav

重新选择底部导航选项卡后Android清除后退堆栈

将最新的导航组件与 一起使用BottomNavigationViewNavController现在默认保存和恢复选项卡的状态:

作为此更改的一部分,onNavDestinationSelected()、BottomNavigationView.setupWithNavController() 和 NavigationView.setupWithNavController() 的 NavigationUI 方法现在会自动保存和恢复弹出目的地的状态,从而无需更改任何代码即可支持多个返回堆栈。当使用带有片段的导航时,这是与多个返回堆栈集成的推荐方法。

这很棒!现在,切换选项卡将为您提供最后查看的堆栈。

但是,如果用户重新选择一个选项卡,假设他们已经离开Home -> Detail Page A -> Detail Page B,然后他们选择Home希望返回到默认视图的选项卡,他们仍然会看到Detail Page B

似乎讨论的一部分是处理问题跟踪器中提到的“重新选择选项卡”行为,但我无法找出实现此目的的推荐方法。

NavigationAdvancedSample中包含的所有内容是:

val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_nav)
bottomNavigationView.setupWithNavController(navController)

// Setup the ActionBar with navController and 3 top level destinations
appBarConfiguration = AppBarConfiguration(
        setOf(R.id.titleScreen, R.id.leaderboard,  R.id.register)
    )
setupActionBarWithNavController(navController, appBarConfiguration)
Run Code Online (Sandbox Code Playgroud)

这只是恢复之前的状态,如发行说明中所述。

我们如何检查是否再次点击导航栏项目并清除后堆栈?

android android-navigation bottomnavigationview android-bottomnav android-architecture-navigation

11
推荐指数
3
解决办法
7106
查看次数

如何动态更改底部导航项文本?

在此输入图像描述

我正在努力实现上述设计。我可以更改图标,但无法更改底部文本。我使用材质底部导航栏

我通过为每个图标实现单独的选择器可绘制对象来实现图标更改。有什么方法可以对导航标题做同样的事情吗?

MainActivity.class

public class MainActivity extends AppCompatActivity {
BottomNavigationView navView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    navView = findViewById(R.id.nav_view);

    // Passing each menu ID as a set of Ids because each
    // menu should be considered as top level destinations.
    AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
            R.id.navigation_home, R.id.navigation_saved, R.id.navigation_applied, R.id.navigation_profile, R.id.navigation_more)
            .build();

    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
    NavigationUI.setupWithNavController(navView, navController);



}
Run Code Online (Sandbox Code Playgroud)

活动主文件

<?xml version="1.0" encoding="utf-8"?>
<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" …
Run Code Online (Sandbox Code Playgroud)

android material-design bottomnavigationview android-bottomnav android-bottom-nav-view

9
推荐指数
1
解决办法
7642
查看次数

导航到其他片段、切换到其他菜单并切换回初始菜单后,BottomNavigationView 的菜单未选择

我正在使用底部导航构建一个带有 3 个菜单的 Android 应用程序。我使用底部导航活动在 Android Studio 中创建了新项目。

我将该片段重命名为:

  • InfoFragment.kt

  • DetectFragment.kt

  • AboutFragment.kt

将布局重命名src/main/res/layout为:

  • fragment_info.xml

  • fragment_detect.xml

  • fragment_about.xml

将菜单重命名src/main/res/menu为:

  • navigation_info

  • navigation_detect

  • navigation_about

fragment_about.xml我添加了一个按钮buttonGoToFAQ来导航到fragment_faq 这样的代码AboutFragment.kt

buttonGoToFAQ.setOnClickListener {
        val action = AboutFragmentDirections.actionFAQ()
        Navigation.findNavController(it).navigate(action)
    }
Run Code Online (Sandbox Code Playgroud)

单击 BottomNavigationView 菜单 或 后navigation_infonavigation_detect然后单击navigation_about菜单返回,BottomNavigationView 上的选定菜单不会更改。
看这张图

我想要的是应该选择菜单navigation_about而不是其他菜单。

我已经尝试过覆盖fun onStart()fun onResume()进入FAQFragment.kt但无济于事。
nav_view是我的 BottomNavigationView。

override fun onStart() {
    super.onStart()

    (requireActivity().findViewById<View>(R.id.nav_view) as BottomNavigationView).selectedItemId …
Run Code Online (Sandbox Code Playgroud)

kotlin android-studio android-navigation android-bottomnav

9
推荐指数
3
解决办法
3113
查看次数

有没有办法为Android的BottomNavigationView的选定状态设置不同的图标/颜色?

以下是我当前BottomNavigationView的XML.目前,所有三个图标drawable都是具有相同颜色的未填充图标.我希望能够在选择该状态时呈现图标的填充版本,并且可能更改颜色以使其显然是当前图标状态.以下图片是我的意思的一个例子.

选择状态的图标颜色更改示例

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_favorites"
        android:enabled="true"
        android:icon="@drawable/icon_flyer"
        android:title="Flyer"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_schedules"
        android:enabled="true"
        android:icon="@drawable/icon_list"
        android:title="List"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_music"
        android:enabled="true"
        android:icon="@drawable/icon_contact"
        android:title="Contact"
        app:showAsAction="ifRoom" />
</menu>
Run Code Online (Sandbox Code Playgroud)

android bottomnavigationview android-bottomnav

7
推荐指数
4
解决办法
5186
查看次数

底部导航片段内的标签片段

我有一个带有三个选项卡的底部导航(主页,仪表板,通知).每个底部导航选项卡都是一个片段.第一个标签即.主片段包含另外的顶部导航标签,其具有四个标签(标签1,标签2,标签3,标签4).

在此输入图像描述

问题

  1. 当我直接从" 主页"选项卡导航到" 通知"选项卡并返回" 主页"选项卡时,Tab1 /选择了以前选择的选项卡(顶部导航选项卡),未加载选项卡的内容.

  2. 当我从选项卡1(主页片段选项卡)一直滑动选项卡到" 通知"选项卡并向后滑动时,在到达选项卡4时,未加载选项卡的内容,并且在第一次从选项卡4滑动到选项卡3时,滑动不会拿到表3.选项卡指示器只需移动一点,然后在第二次滑动时按预期方式转到选项卡3.

该应用程序包含大量代码,因此我只需将完整代码链接到Github.

这里有我的代码快速参考

MainActivity.java

public class MainActivity extends AppCompatActivity {


    private ViewPager viewPager;

    NavigationView navigationView;

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    viewPager.setCurrentItem(0);
                    return true;
                case R.id.navigation_dashboard:
                    viewPager.setCurrentItem(1);
                    return true;
                case R.id.navigation_notifications:
                    viewPager.setCurrentItem(2);
                    return true;
            }
            return false;
        }

    }; …
Run Code Online (Sandbox Code Playgroud)

tabs android tabnavigator android-fragments android-bottomnav

7
推荐指数
1
解决办法
6714
查看次数

实施 Material Design 入门示例

我正在查看Material 的入门设计指南。我想知道我应该如何复制这种导航。它似乎包含了一个特殊的底部标签栏和 viewpager。没有 viewpager 的滑动功能,只有两个按钮倾斜到底部标签栏的两侧。

在此处输入图片说明

android tabbar android-viewpager bottomnavigationview android-bottomnav

7
推荐指数
0
解决办法
441
查看次数

Jetpack Compose + Navigation - 使用 BottomNavBar 进行嵌套导航

我正在尝试使用 Jetpack Compose + Jetpack Navigation 实现以下屏幕流程:

导航概念

实际上,我可以编写两个单打案例:

  • 启动画面 --> 主屏幕(没有底部导航栏)
  • 主屏幕(带底部导航栏)--> 选项卡

我无法编写整个问题的代码。事实上,我对 NavHost 的管理有疑问。在第一种情况(SplashScreen -> HomeScreen)中,我需要在高范围内调用 NavHost:

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        MyAppTheme {
            //init the Navigation Controller for screen navigation
            val navController = rememberNavController()

            //setup the Navigation Graph
            SetupNavGraph(navController)
Run Code Online (Sandbox Code Playgroud)

而在第二种情况下,我需要在可组合项innerPadding的范围内调用它Scaffold

fun MainScreen(navController: NavHostController) {

    Scaffold(
        bottomBar = {
            BottomNavBar(navController)
        }
    ) { //innerPadding scope
        //setup the Navigation Graph
        SetupNavGraph(navController)
    }
}
Run Code Online (Sandbox Code Playgroud)

请假设该SetupNavGraph()函数按预期工作(调用 …

android android-bottomnav android-jetpack-navigation android-jetpack-compose

7
推荐指数
1
解决办法
8016
查看次数

BottomNavigationItems 填充

有什么方法可以从 BottomNavigationItem 中删除此填充吗?

图像

如果我有非常大的文本,我必须使用 ResponsiveText 来管理它,但这不是我的意图。我需要的是它的左侧和右侧都没有侧边距/边距,以便占据尽可能多的空间。

我的代码:

@Composable
fun BottomNavBar(
    backStackEntryState: State<NavBackStackEntry?>,
    navController: NavController,
    bottomNavItems: List<NavigationItem>
) {
    BottomNavigation(
        backgroundColor = DarkGray.copy(alpha = 0.6f),
        elevation = Dimen0,
        modifier = Modifier
            .padding(Dimen10, Dimen20, Dimen10, Dimen20)
            .clip(RoundedCornerShape(Dimen13, Dimen13, Dimen13, Dimen13))
    ) {
        bottomNavItems.forEach { item ->
            val isSelected = item.route == backStackEntryState.value?.destination?.route

            BottomNavigationItem(
                icon = {
                    Icon(
                        painter = painterResource(id = item.icon.orZero()),
                        contentDescription = stringResource(id = item.title)
                    )
                },
                label = {
                    ResponsiveText(
                        text = stringResource(id = item.title),
                        textStyle = TextStyle14, …
Run Code Online (Sandbox Code Playgroud)

android-bottomnav android-jetpack-compose

7
推荐指数
2
解决办法
2029
查看次数

使用底部导航和导航组件在按钮单击上切换选项卡

我有一个非常简单的应用程序,由三个片段和一个底部导航栏组成,是通过使用 Android Studio 中的“新项目 -> 底部导航活动”创建的。第一个片段包含一个按钮,它应该将我带到第二个片段,就像单击底部导航栏的中间按钮一样。

带按钮的片段

有没有一个“标准”的方法来做到这一点?

我努力了:

  • 使用launch(...)导航组件,该组件似乎使用自己的后堆栈启动片段并破坏底部导航。
  • 以不同的方式使用setSelectedItemId(...),这要么导致异常,要么以不同的方式破坏底部导航。

在这篇文章中,有人问了完全相同的问题,但它被标记为重复。我找不到答案,特别是关于导航组件。

android bottomnavigationview android-bottomnav android-architecture-navigation

6
推荐指数
1
解决办法
9856
查看次数

底部导航视图片段在创建后重新创建

在我的应用程序中,我使用Jetpack NavigationBottomNavigationView. 我有 4 个片段:主页、搜索、通知、个人资料,当我在主页片段中时,我再次单击底部导航视图中的主页项目,它会重新创建片段。我进行了搜索,但主要的答案是针对那些不使用喷气背包导航的人。

(顺便说一句,我只希望当我已经在该片段中时不重新创建片段,如果我不在该片段中,则可以重新创建)

以下是我的设置:

val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView_mainActivity) as NavHostFragment
navController = navHostFragment.navController 
binding.bottomNavView.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)

这是显示底部导航视图行为方式的 gif 图像

android android-fragments fragmentmanager android-bottomnav android-jetpack-navigation

5
推荐指数
1
解决办法
2004
查看次数