首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何为BottomNavigationView +导航组件添加条件?

基础概念

BottomNavigationView 是 Android 开发中常用的一个组件,用于在屏幕底部显示导航选项。它通常与 Navigation Component 结合使用,以实现导航和界面切换。

相关优势

  1. 简化导航逻辑:使用 Navigation Component 可以简化导航逻辑,减少代码量。
  2. 支持动画和过渡效果:可以轻松添加动画和过渡效果,提升用户体验。
  3. 支持深层链接:可以处理深层链接,直接打开应用中的特定页面。
  4. 支持安全导航:可以防止用户通过返回键回到不安全的页面。

类型

BottomNavigationView 主要有以下几种类型:

  1. 固定项:所有导航项都固定在底部,不会随着页面切换而改变。
  2. 可变项:导航项可以根据页面切换动态变化。

应用场景

BottomNavigationView 常用于以下场景:

  1. 应用底部导航栏:如微信、支付宝等应用的底部导航栏。
  2. 多页面应用:需要在多个页面之间快速切换的应用。

添加条件

BottomNavigationView 添加条件可以通过以下步骤实现:

  1. 定义导航图:在 res/navigation 目录下创建一个导航图文件(如 nav_graph.xml),定义各个页面和导航路径。
代码语言:txt
复制
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav_graph"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/homeFragment"
        android:name="com.example.HomeFragment"
        android:label="Home" />
    <fragment
        android:id="@+id/settingsFragment"
        android:name="com.example.SettingsFragment"
        android:label="Settings" />
</navigation>
  1. 配置 BottomNavigationView:在布局文件中配置 BottomNavigationView,并将其与导航图关联。
代码语言:txt
复制
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:navGraph="@navigation/nav_graph"
        app:defaultNavHost="true" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavigationView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:menu="@menu/bottom_nav_menu" />
</androidx.constraintlayout.widget.ConstraintLayout>
  1. 添加条件逻辑:在 ActivityFragment 中添加条件逻辑,根据条件动态设置 BottomNavigationView 的可见性或选中项。
代码语言:txt
复制
public class MainActivity extends AppCompatActivity {

    private BottomNavigationView bottomNavigationView;
    private NavController navController;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bottomNavigationView = findViewById(R.id.bottomNavigationView);
        navController = Navigation.findNavController(this, R.id.nav_host_fragment);

        bottomNavigationView.setNavigationItemSelectedListener(item -> {
            switch (item.getItemId()) {
                case R.id.homeFragment:
                    navController.navigate(R.id.homeFragment);
                    return true;
                case R.id.settingsFragment:
                    navController.navigate(R.id.settingsFragment);
                    return true;
            }
            return false;
        });

        // 添加条件逻辑
        if (someCondition) {
            bottomNavigationView.setVisibility(View.VISIBLE);
        } else {
            bottomNavigationView.setVisibility(View.GONE);
        }
    }
}

可能遇到的问题及解决方法

  1. 导航项不显示:确保 BottomNavigationViewmenu 属性正确引用了菜单资源文件。
  2. 导航不生效:确保 NavController 正确初始化,并且导航路径正确。
  3. 条件逻辑不生效:确保条件逻辑在正确的生命周期方法中执行,如 onCreateonViewCreated

参考链接

通过以上步骤和示例代码,你可以为 BottomNavigationView 添加条件逻辑,并实现更灵活的导航控制。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用导航组件: 条件导航 | MAD Skills

这是第二个关于导航 (Navigation) 的 MAD Skills 系列,本文是导航组件系列的第二篇文章,如果您想回顾过去发布的内容,请参考下面链接查看: 导航组件概览 导航到对话框 在应用中导航时使用...在本文中,我将通过添加条件导航来修复这个问题,并且当用户首次启用应用时指导我们的用户做出选择。...在应用中使用条件导航的准备工作 这是自上一篇文章以来我所做 修改 的快速回顾: 首先,我添加了 UserPreferencesRepository,它使用 DataStore API 来保存用户的选择;...现在当我运行应用时,它会导航至 SelectionFragment。后续应用的启动将会记住我做出的选择并将我导航至正确的起始目的地。 就是如此!我们在 DonutTracker 应用中添加条件导航。...△ 测试导航 小结 在本文中,我在 DonutTracker 应用中添加条件导航,同时也添加了测试来验证流程是否正常工作——解决方案代码。

1.6K30

何为antd的Tree组件添加右键菜单

最近在用 antd v4 的 Tree 组件时,想给 Tree 组件添加一个右键菜单功能,最初的想法是看看 antd 官方有没有提供现成的方法,遗憾的是,官方并没有给出一个统一的方法,只是建议大家先使用社区提供的组件...tabindex=“-1”),表示元素是可聚焦的,但是不能通过键盘导航来访问到该元素,用 JS 做页面小组件内部键盘导航的时候非常有用。...tabindex="0" ,表示元素是可聚焦的,并且可以通过键盘导航来聚焦到该元素,它的相对顺序是当前处于的 DOM 结构来决定的。...我们给一个菜单添加一个div容器,并且给这个容器加上 tabindex 属性,值设为 -1,这样,这个容器以及容器包裹的菜单就具备了可以聚焦和失去焦点的特性。...treeData={treeData} /> {renderMenu()} ); } 总结 以上两种方式,均可以实现给 antd 的 Tree 组件添加右键菜单

4.1K30
  • 深入浅出 NavigationUI | MAD Skills

    这是第二个关于导航 (Navigation) 的 MAD Skills 系列,如果您想回顾过去发布的内容,请参考下面链接查看: 导航组件概览 导航到对话框 在应用中导航时使用 SafeArgs 使用深层链接导航...在本文中,我们将为大家讲解另外一个用例,即类似操作栏 (Action Bar)、底部标签栏或者抽屉型导航栏之类的 UI 组件如何在应用中实现导航功能。...我需要在应用中增加一些页面,所以有必要使用抽屉式导航栏或者底部标签栏来辅助用户导航。但是我们该如何使用这些 UI 组件来集成导航功能呢?通过点击监听器手动触发导航动作吗? 不需要!无需任何监听器。...这样,导航组件就可以将 MenuItem 与目的页面进行关联。...我们无需进行多余的操作,仅需添加 UI 组件,并且匹配 MenuItem 的 id 和目的页面的 id。您可以查阅 完整代码,并且通过 main 与 starter 分支的 比较,观察代码的变化。

    3K30

    自定义View:手撸一个带FAB凹槽的底部导航

    导航栏与页面跳转:使用谷歌官方提供的现成组件BottomNavigationView+Navigation组件+Fragment的方式来实现; FAB停靠导航栏:利用协调者布局CoordinatorLayout...(主要涉及:BottomNavigationView Navigation Fragment Canvas Path Animation CoordinatorLayout) 实现过程 导航栏与页面跳转...由于谷歌官方有现成的导航相关组件BottomNavigationView和Navigation组件,一般来说如果没什么特殊需求的话只需要自己定义下导航路由图和底部导航菜单menu文件,定义导航item...以及每个item对应的页面使用Fragment组件来实现,页面跳转、item切换动画等的相关功能都是现成的,方便快捷。...对于这样的效果我决定老老实实选择自定义BottomNavigationView,为所欲为哈哈哈!

    20510

    安卓Navigation系列——进阶篇

    BottomNavigationView控件, <?...是谷歌的一个实现底部导航组件, app:menu属性为底部导航栏指定元素,新建一个bottom_nav_menu的menu资源文件 <?...明明已经调用addNavigator方法添加自定义的FixFragmentNavigator了。...那么我们是不能在布局文件中通过app:navGraph属性指定自定义的导航资源文件了,只能在布局文件中去掉app:navGraph这个属性,然后在添加FixFragmentNavigator的同时,通过代码将导航资源文件设置进去...总结 本篇在上篇的基础上,结合BottomNavigationView实现了第一个底部导航切换的实例,然后介绍了这种方式引发的坑,进而通过源码分析了发生这种现象的原因,并给出了解决的思路。

    3.1K30

    Android学习(简单使用Bottom Navigation Activity来实现底部导航栏)

    自定义底部导航 现在的底部导航只有三个选项,而且图标文字都是固定我。那么我们想增加导航或者改变图标文字应该怎么办呢?...,那么新建4个文件,这里只创建两个测试用)layout文件 并在里面添加自己的布局。...定制导航栏 对于导航栏的定制和之前大体相同,如果我们要新添一个自己的导航页可以这样操作:menu文件夹下的bottom_nav_menu.xml对应底部的导航图标,添加自己的item。...添加示例的功能 我们的示例主要是介绍这个模板而不是mvvm架构,所以代码比较简单。...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    2.3K10

    Android底部导航——BottomNavigationView+ViewPager+Fragment

    前言: Android端采用底部导航栏的APP非常多,比如微信、微博、支付宝…等等,这也不能说是盲目学习iOS,毕竟好东西大家都可以用,各家操作系统也都在博采众长,互相学习。...Android端的底部导航栏有着一套规范,详情 这篇文章为大家带来 1.官方BottomNavigationView的使用方法 2.结合ViewPager、Fragment实现一个流行UI布局!...4.写完布局写代码,完整activity文件如下: 实例化控件后为NavigationView添加监听事件即可,代码如下: package com.fedming.bottomnavigationdemo...禁止滑动时,为ViewPager添加setOnTouchListener接口,在onTouch下直接消费掉点击事件。...添加下面这段代码: //禁止ViewPager滑动 //禁止ViewPager滑动 viewPager.setOnTouchListener(new View.OnTouchListener(){

    3.3K21

    听说谷歌Baba更新了 Material UI ...

    Bottom Navigation BottomNavigationView创建底部导航栏,用户只需轻点一下即可轻松浏览和切换顶级内容视图。 ...当项目有3到5个顶层(底部)目的地导航到时,可以使用此模式。...使用也是很Easy,如下: 创建一个菜单资源 ,最多5个导航目标(BottomNavigationView不支持超过5个项目); 在内容下面放置BottomNavigationView; 将BottomNavigationView...那下面按照步骤操作一次: Step 1:在布局中添加BottomNavigationView: <com.google.android.material.bottomnavigation.BottomNavigationView...下面着撸起实现: Step 1:搞个布局玩玩 外层使用CoordinatorLayout包裹,底部导航栏采用BottomNavigationView,中间内容区域,很Easy咯~ <?

    3K20

    Android开发之漫漫长途 XIII——Fragment最佳实践

    (bottomNavigationItem4); //为底部导航布局设置点击事件 bottomNavigationView.setOnBottomNavigationItemClickListener...其实上面的代码存在性能问题,尤其是在底部导航这种场景中,Fragment之间的来回切换,这里使用的replace方法。关于这个方法带来的问题以及如何进行优化,将在下一节详细说明。...,之后的replace操作会移出前面添加的Fragment,再添加方法参数中指定的Frament。...我们不能使用replace来进行页面的切换,那么可使用的方法貌似只有add了,我们可以在加载的时候判断Fragment是不是已经被添加到队列中,如果已添加,我们就显示(show)该Fragment,隐藏...(hide)其他,如果没有添加过呢,就添加

    1.3K20

    BottomNavigationView使用,配合ViewPager、修改图标大小、去掉文字等

    目录 1、布局 2、常用属性 3、设置监听 4、默认选中 5、配合ViewPager 6、添加角标 7、修改图标大小 8、去除波纹效果 9、Github MaterialDesign中的一个底部导航栏...(默认高度56dp,菜单在3~5个),使用简单,自带动画 1、布局 <android.support.design.widget.BottomNavigationView android.../navigation"/> 2、常用属性 app:itemBackground 背景颜色 app:itemIconTint 图标颜色 app:itemTextColor 文字颜色 app:menu 导航菜单...android:attr/windowBackground" app:menu="@menu/navigation" /> 添加Listener让二者关联起来...的item也选中,BottomNavigationView的item选中的时候让ViewPager切换page 6、添加角标 查看:BottomNavigationView添加角标(BadgeView)

    1.4K60

    Android Navigation + Fragment 制作APP主页面导航(步骤 + 源码)

    添加依赖 Navigation 是JetPack中的组件,感兴趣可以去查看Google JetPack官方文档。而如果你想单独查看的Navigation 内容,可以点击Navigation 文档。...添加底部导航 鼠标右键点击res → New → Android Resource File,然后选择Menu ? 之后打开menu.xml去添加子项。 <com.google.android.material.bottomnavigation.BottomNavigationView android:id="...,这样就把刚才的item都添加进去了 现在你通过预览已经可以看到这个底部导航栏了,不是吗?...底部导航栏控制Fragment切换 在上面已经添加了底部导航栏,但是这个导航栏还没有和NavHost绑定起来,所以自然就无法在切换底部导航的同时,改变NavHost中的Fragment。

    9.8K42

    Android Notes|BottomNavigationView 爱上 Lottie

    以前大部分项目底部导航栏关于图片部分的实现,要么两套图 selector 切换,要么通过着色器 tint 进行渲染,总之最后呈现的效果便是在点击时两张图静态切换,说 Low 吧,也还凑合,但是总是没那么高大上...一般我用于底部导航栏,最多支持 5 个 item,源码有写,如下: @RestrictTo(LIBRARY_GROUP) public final class BottomNavigationMenu...而关于选中状态切换时,对应标题字体大小发生改变以及导航栏高度,都可以通过在 dimens 定义如下解决: 84dp 对于设置角标,也就是右上角小圆点或者对应的数字,可通过获取...Configuration.UI_MODE_NIGHT_MASK return flag == Configuration.UI_MODE_NIGHT_YES } Step 4:设置布局 先添加

    3.7K21

    利用BottomNavigationView实现底部标签栏

    在Android Studio上创建官方默认的首屏标签页面很方便,首先右击需要添加标签栏的模块,在弹出的右键菜单中依次选择“New”——“Activity”——“Bottom Navigation Activity...不过为了定制页面的详细内容,开发者仍需修改相关代码,譬如将标签文字从英文改成中文,将频道上方的描述说明从英文改成中文,给频道页面添加图像视图等其他控件等等,故而还得梳理标签栏框架的实现方式。...(底部导航视图),另一个是位于其上占据剩余屏幕的碎片fragment。...总算理清了这种底部导航的实现方式,接下来准备修理修理默认的标签及其频道。...R.id.text_home);         textView.setText("这是首页页面");         return root;     } 因为默认代码里的ViewModel并非必需组件

    2.2K30
    领券