安卓:BottomNavigationBar——底部导航栏控件

这篇具有很好参考价值的文章主要介绍了安卓:BottomNavigationBar——底部导航栏控件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、BottomNavigationBar介绍

二、BottomNavigationBar的常用方法及其常用类

(一)、常用方法

1. 添加菜单项

2. 移除菜单项

3. 设置选中监听器

4. 设置当前选中项 

5. 设置徽章

 6. 样式和颜色定制

7. 动画效果 

8. 隐藏底部导航栏。

 9、设置模式

10.初始化 bottomNavigation

 (二)、常用类

 TextBadgeItem常用方法:

 ShapeBadgeItem常用方法:

三、bottomNavigation的使用例子 

一、BottomNavigationBar介绍

        BottomNavigationBar是一个用于Android应用程序的底部导航栏控件,通常用于在应用程序的不同页面之间进行快速切换。它提供了一种直观且易于使用的导航方式,使用户可以轻松访问应用程序的各个模块。

依赖包:

implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.4'

二、BottomNavigationBar的常用方法及其常用类

(一)、常用方法

        BottomNavigationBar提供了一系列常用的方法,用于定制和管理底部导航栏的外观和行为。以下是BottomNavigationBar的常用方法及其调用例子的详细介绍:

1. 添加菜单项

  • addItem(BottomNavigationItem item):向导航栏添加一个菜单项。

2. 移除菜单项

  • removeItem(int position):从导航栏中移除指定位置的菜单项。

3. 设置选中监听器

  • setOnTabSelectedListener(OnTabSelectedListener listener):设置导航栏的选中监听器。

4. 设置当前选中项 

  • setCurrentItem(int position, boolean animate):设置当前选中的菜单项。
  • setFirstSelectedPosition(int position):设置默认选中项。

5. 设置徽章

  • setNotification(String text, int position):在指定位置的菜单项上显示徽章。
  • removeNotification(int position):移除指定位置菜单项上的徽章。

 6. 样式和颜色定制

  • setBackgroundStyle(int backgroundStyle):用于设置底部导航栏的背景样式。
  • setDefaultBackgroundColor(int color):设置导航栏的默认背景颜色。
  • setAccentColor(int color):设置选中项的颜色。
  • setInactiveColor(int color):设置未选中项的颜色。
  • setTitleState(int state):设置标题的显示方式,可选值有STATE_ALWAYS_SHOW、STATE_ALWAYS_HIDE和STATE_SHOW_WHEN_ACTIVE。
  • setTitleTextSize(int textSize):设置标题的字体大小。

7. 动画效果 

  • setColored(boolean colored):设置是否启用选中项的颜色动画效果。
  • setBehaviorTranslationEnabled(boolean enabled):设置是否启用底部导航栏的滑动效果。

8. 隐藏底部导航栏。

  • hideBottomNavigation(boolean hide):显示或隐藏底部导航栏。

 9、设置模式

  • setMode(int mode) :
  1. MODE_FIXED:固定模式

    • 当导航栏的菜单项个数小于等于3个时,推荐使用此模式。
    • 在固定模式下,所有的菜单项会平均分布在底部导航栏中,且大小相等。
  2. MODE_SHIFTING:移动模式

    • 当导航栏的菜单项个数大于3个时,推荐使用此模式。
    • 在移动模式下,当前选中的菜单项会突出显示,而其他未选中的菜单项则会缩小并向上移动。

10.初始化 bottomNavigation

  •  initialise():用于完成底部导航栏的初始化。

 (二)、常用类

  1. BottomNavigationBar:底部导航栏的主要类,用于创建和管理底部导航项。通过该类,可以设置导航栏的模式、背景样式、菜单项等属性,并监听导航项的选中事件。
  2. BadgeItem:角标类,用于在导航栏的菜单项上显示角标。它有两个子类:TextBadgeItem用于在菜单项上显示文本角标。ShapeBadgeItem用于在菜单项上显示形状角标,如圆形、方形等。 
  3. BottomNavigationItem:底部导航项的类,用于创建每个菜单项。通过该类,可以设置图标、标题和选中状态的图标。
  4. OnTabSelectedListener:底部导航栏的选项卡选中监听器接口。通过实现该接口,可以监听到选项卡的选中事件,并在相应的回调方法中进行处理。
  5. BadgeAnimation角标动画类,用于定义角标的出现和消失动画效果。

 TextBadgeItem常用方法

  • setText(String text):设置角标上显示的文本内容。
  • setBackgroundColor(int color):设置角标的背景颜色。
  • setTextColor(int color):设置角标文本的颜色。
  • setHideOnSelect(boolean hideOnSelect):设置是否在选中菜单项时隐藏角标,默认为false。
  • setAnimationDuration(long duration):设置角标动画的持续时间,单位为毫秒。
  • show()hide():手动显示和隐藏角标。 
  •  setShape(Shape shape):设置角标的形状。

 ShapeBadgeItem常用方法

  • setIconDrawable(Drawable icon):设置菜单项的图标。
  • setInactiveIconDrawable(Drawable icon):设置菜单项的非选中状态的图标。 
  • setText(String text):设置菜单项的文本内容。
  •  setInactiveColor(int color):设置菜单项的非选中状态的颜色。
  • setActiveColor(int color):设置菜单项的选中状态的颜色。
  • setBadgeItem(BadgeItem badgeItem):为菜单项设置角标。

三、bottomNavigation的使用例子 

MainActivity: 

package com.example.bottomnavigationbardemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import com.ashokvarma.bottomnavigation.ShapeBadgeItem;
import com.ashokvarma.bottomnavigation.TextBadgeItem;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {
    private FragmentManager mFragmentManager;
    private BottomNavigationBar mBottomNavigationBar;
    TextBadgeItem mTextBadgeItem;
    ShapeBadgeItem mShapeBadgeItem;
    private FirstFragment firstFragment;
    private SecondFragment secondFragment;
    private ThirdFragment thirdFragment;
    private FragmentTransaction transaction;
    int curPosition;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBottomNavigationBar = findViewById(R.id.bottom_navigation_bar);
        initBottomNavigationBar();
    }

    private void initBottomNavigationBar() {
        // 设置固定模式
        mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
        // 设置点击事件
        mBottomNavigationBar.setTabSelectedListener(this);
        List<BottomNavigationItem> items= getBottomNavigationItem();
        mBottomNavigationBar.addItem(items.get(0))
                .setFirstSelectedPosition(0)
                .addItem(items.get(1))
                .addItem(items.get(2))
                // 此方法应在所有自定义方法结束时调用。此方法将考虑所有更改并重新绘制选项卡。
                .initialise();
                setDefaultFragment();
    }

    private List<BottomNavigationItem> getBottomNavigationItem() {
        initBadgeItem();
        // 用来存item的集合
        List<BottomNavigationItem> items = new ArrayList<>();
        // 创建Item1
        BottomNavigationItem homeItem = new BottomNavigationItem(R.drawable.home,"首页");
        // 设置被点击时的颜色
        homeItem.setActiveColor(R.color.purple_500).setBadgeItem(mShapeBadgeItem);
        // 设置没有被点中的颜色
//        homeItem.setInActiveColor(R.color.teal_200);
        // 设计没有被点中时的图片资源
//        homeItem.setInactiveIconResource(R.drawable.ic_launcher_foreground);
        items.add(homeItem);

        // 创建Item2
        BottomNavigationItem messageItem = new BottomNavigationItem(R.drawable.message,"信息");
        // 设置被点击时的颜色设置没有被点中的颜色
        messageItem.setActiveColor(R.color.purple_500)
//        .setInActiveColor(R.color.teal_200)
        .setBadgeItem(mTextBadgeItem);

//        .setInactiveIconResource(R.drawable.ic_launcher_foreground);
        items.add(messageItem);

        // 创建Item2
        BottomNavigationItem personage = new BottomNavigationItem(R.drawable.person,"个人信息");
        // 设置被点击时的颜色设置没有被点中的颜色
        personage.setActiveColor(R.color.purple_500);
//                .setInActiveColor(R.color.teal_200)
//                .setInactiveIconResource(R.drawable.ic_launcher_foreground);
        items.add(personage);
        return items;
    }

    /**
     * 设置徽章
     */
    private void initBadgeItem() {
        mTextBadgeItem = new TextBadgeItem();
        mTextBadgeItem.setText("99+")
                .setTextColor("#ffffff")
                .setBorderWidth(5)
                .setBackgroundColor("#ff4083")
                .setHideOnSelect(false); // 选中是否隐藏
//                .setGravity(Gravity.TOP); // 设置位置
        mShapeBadgeItem = new ShapeBadgeItem();
        mShapeBadgeItem.setShape(ShapeBadgeItem.SHAPE_OVAL)
                .setShapeColor(Color.RED)
                .setEdgeMarginInDp(this,0) // 距离item的边距,dP
                .setSizeInDp(this, 15, 15) //宽高值,dp
                .setHideOnSelect(false)
                .setAnimationDuration(300); //隐藏和展示的动画速度,单位毫秒,和setHideOnSelect一起使用
    }
    /**
     * 设置默认开启的fragment
     */
    private void setDefaultFragment() {
        mFragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = mFragmentManager.beginTransaction();
        firstFragment = new FirstFragment();
        transaction.add(R.id.tb, firstFragment);
        transaction.commit();
    }
    /**
     * 隐藏当前fragment
     *
     * @param transaction
     */
    private void hideFragment(FragmentTransaction transaction) {
        if (firstFragment != null) {
            transaction.hide(firstFragment);
        }
        if (secondFragment != null) {
            transaction.hide(secondFragment);
        }
        if (thirdFragment != null) {
            transaction.hide(thirdFragment);
        }

    }

    @Override
    public void onTabSelected(int position) {
        curPosition = position;//每次点击赋值
        //开启事务
        transaction = mFragmentManager.beginTransaction();
        // 隐藏当前的fragment
        hideFragment(transaction);
        switch (position) {
            case 0:
                if (firstFragment == null) {
                    firstFragment = new FirstFragment();
                    transaction.add(R.id.tb, firstFragment);
                } else {
                    transaction.show(firstFragment);
                }
                // transaction.replace(R.id.tb, firstFragment);
                break;
            case 1:
                if (secondFragment == null) {
                    secondFragment = new SecondFragment();
                    transaction.add(R.id.tb, secondFragment);
                } else {
                    transaction.show(secondFragment);
                }
                break;
            case 2:
                if (thirdFragment == null) {
                    thirdFragment = new ThirdFragment();
                    transaction.add(R.id.tb, thirdFragment);
                } else {
                    transaction.show(thirdFragment);
                }
                break;
        }
        // 事务提交
        transaction.commit();
    }

    @Override
    public void onTabUnselected(int position) {
        // 没有被选中时,调用该方法
    }

    @Override
    public void onTabReselected(int position) {
        // 再次选中时,调用此方法
    }

}

代码解析:

MainActivity 类是一个包含底部导航栏的活动。在 onCreate() 方法中,通过调用 initBottomNavigationBar() 初始化了底部导航栏。

initBottomNavigationBar() 方法中:

  • 设置了底部导航栏的模式为 MODE_SHIFTING,表示选项卡会随用户的点击而移动。
  • 设置了底部导航栏的点击事件监听器为当前活动(this)。
  • 调用 getBottomNavigationItem() 方法获取底部导航栏的选项卡集合,并添加到底部导航栏中。
  • 调用 initialise() 方法完成底部导航栏的初始化,并设置默认显示的片段。

getBottomNavigationItem() 方法中:

  • 创建了三个底部导航栏的选项卡 BottomNavigationItem
  • 分别设置了选项卡的图标、文字、被点击时的颜色、未被点击时的颜色和未被点击时的图标资源。
  • 将选项卡添加到一个列表中并返回。

除此之外,还定义了其他方法:

  • initBadgeItem():初始化了两个徽章(TextBadgeItem 和 ShapeBadgeItem),并设置其属性。
  • setDefaultFragment():设置默认显示的片段为 FirstFragment
  • hideFragment(FragmentTransaction transaction):隐藏当前显示的片段。
  • onTabSelected(int position):处理选项卡被选中的事件,根据位置切换不同的片段。
  • onTabUnselected(int position):处理选项卡取消选中的事件。
  • onTabReselected(int position):处理选项卡再次被选中的事件。

总结:该代码是一个包含底部导航栏的活动,通过点击底部选项卡来切换显示不同的片段。可以根据需要修改底部导航栏的样式、添加更多的选项卡和设置对应的片段。

 FirstFragment :

package com.example.bottomnavigationbardemo;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;

public class FirstFragment extends Fragment {

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.activity_first_fragment, container, false);

        return view;
    }
}

 activity_first_fragment:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第一个Fragment"
        android:textSize="30sp" />
</LinearLayout>

activity_main: 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/tb"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <View
        android:layout_width="match_parent"
        android:layout_height="0.5dp"
        android:background="#eeeeee" />

    <com.ashokvarma.bottomnavigation.BottomNavigationBar
        android:id="@+id/bottom_navigation_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom" />

</LinearLayout>

注意: SecondFragment、ThirdFragment和FirstFragment的代码一样,其布局文件也跟activity_first_fragment一样。

运行效果:

 文章来源地址https://www.toymoban.com/news/detail-715285.html

android 底部导航栏,第三方库,python,开发语言

 

 四、总结

        BottomNavigationBar(底部导航栏)是一种常见的用户界面设计模式,常用于移动应用程序中。下面是 BottomNavigationBar 的优点和缺点的总结:

优点:

1. 提供直观的导航:底部导航栏通常位于屏幕底部,使用户可以轻松访问主要功能和导航选项。这种布局方式更符合用户的自然操作习惯,提供了直观的导航体验。
2. 节省屏幕空间:将导航选项放置在底部,可以节省屏幕顶部的空间,更多地用于显示应用程序的内容。尤其对于大屏幕设备,这种设计可以更好地利用屏幕空间。
3. 易于使用手指操作:由于底部导航栏靠近手指自然的位置,用户可以轻松地使用拇指进行导航,而无需频繁改变手持设备的姿势。
4. 强调当前位置:通过高亮显示当前活动或选中的导航选项,底部导航栏可以帮助用户更清楚地知道自己所处的位置,并提供上下文导航。

缺点:

1. 屏幕空间限制:虽然底部导航栏节省了屏幕顶部的空间,但它也会占用屏幕底部的一定高度。对于某些应用程序而言,这可能会减少可用的内容显示区域。
2. 选项数量限制:底部导航栏通常适用于不超过五个主要功能或导航选项的应用程序。如果选项过多,可能会导致导航栏变得拥挤,难以识别和操作。
3. 设计一致性:底部导航栏是一种常见的设计模式,但并不适用于所有应用程序。在选择使用底部导航栏时,需要确保它与应用程序的整体设计风格和用户期望一致。

        综上所述,BottomNavigationBar 提供了直观、节省空间和易于操作的优点,但也存在屏幕空间限制和选项数量限制等一些缺点。在设计应用程序时,需要仔细考虑是否采用底部导航栏,并确保与应用程序的整体设计一致。

 

到了这里,关于安卓:BottomNavigationBar——底部导航栏控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android底部导航栏之BottomNavigationView

    1,首先需要添加依赖: implementation \\\'com.google.android.material:material:1.1.0\\\' 2,布局文件中引入: 3,常用属性: app:itemTextColor 文字的颜色,可以通过 selector 来控制选中和未选中的颜色 app:itemIconTint 图标的颜色,可以通过 selector 来控制选中和未选中的颜色 app:itemIconSize 图标大小,

    2024年02月08日
    浏览(72)
  • Android BottomNavigation底部导航栏使用

    原文地址: Android BottomNavigation底部导航栏使用 - Stars-One的杂货小窝 本文侧重点记录一些特殊的样式设置,所以基本使用这里就简单概述一下,详细图文可以去找其他人的博文 1.创建对应的menu菜单文件 2.xml布局引用menu菜单 3.启动Activity预览效果 可以使用 setOnItemSelectedListener 方法监

    2024年02月12日
    浏览(51)
  • Android---DslTabLayout实现底部导航栏

    1. 在 Android 项目中引用 JitPack 库  AGP 8.+ 根目录的 settings.gradle  AGP 8.+ 根目录如果是  settings.gradle.kts 文件  AGP 8.- 根目录的 build.gradle 2. 添加依赖  在APP目录中的 build.gradle 3. 布局 activity_main.xml 4. 底部 tab_item.xml 布局 5. 每个底部 tab 对应的 fragment a. DiscoveryFragment b. fragment_dis

    2024年02月20日
    浏览(42)
  • Android实现底部导航栏方法(Navigation篇)

    底部导航栏一直是大部分App不可缺失的一部分 最近注意到Jetpack中的Navigation支持Fragment的切换操作 特此浅研究一下 选择性跳过 此处使用Google开发者文档中介绍 使用nav文件配合 FragmentContainerView组件 实现Fragment的切换操作 创建nav文件 导入后,在项目的res文件夹下,右键选择

    2024年02月06日
    浏览(87)
  • Flutter写一个android底部导航栏框架

    废话不多说,上代码: 在上述示例中,我们创建了一个 MyHomePage 小部件,它是 StatefulWidget 。 MyHomePage 包含底部导航栏和相关页面内容。通过 BottomNavigationBar 和 currentIndex 属性,我们可以控制当前选中的导航项并在 onTap 回调中更新状态。 在 items 属性中,我们设置了三个 Bott

    2024年02月14日
    浏览(36)
  • 【Android】底部导航栏【BottomNavigationView】+【ViewPage2】

    问题需求 实现底部导航栏切换 问题解决 最简单的实现方式就是使用系统自动生成的模板页面,但是有时候会有一些问题,特别是需要去除【ActionBar】的情况下,这种情况下使用系统的模板页面就不好用了,此时可以使用下面这种解决方式。 【BottomNavigationView】+【ViewPage2】

    2023年04月18日
    浏览(46)
  • Android开发:利用Android Studio自带的底部导航栏和ViewPager+TabLayout创建顶部导航栏

    目录 效果图 底部导航栏 ​编辑 顶部导航栏 底部导航栏首个Fragment代码 适配器代码 顶部导航栏首个Fragment代码  顶部导航栏另外三个Fragment代码  ​编辑 顶部导航栏四个Fragment的XML 补充 学Android开发开始实操,第一步肯定要把大致布局搞定。做这个布局用到的知识难点有fr

    2024年02月03日
    浏览(59)
  • 『Android基础入门』ViewPager+Fragment+BottomNavigationView实现底部导航

    👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟 🏡个人主页:starry陆离 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 在ViewPager与Fragment结合实现多页面滑动的学习上再进一步,记录一下ViewPager+Fragment+BottomNavigationView实现底部导航 1.复习ViewPager的用法 2.复习F

    2023年04月08日
    浏览(45)
  • Android Jetpack Compose之底部导航栏的实现

    写过一段Android jetpack compose 界面的小伙伴应该都用过Compose的脚手架 Scaffold ,利用它我们可以很快的实现一个现代APP的主流界面架构,即一个带顶部导航栏和底部导航栏的界面架构,我们基于这个架构可以快速的搭建出我们想要的页面效果。而今天的文章就是要介绍如何实现

    2024年03月23日
    浏览(48)
  • android 关于TabLayout联动ViewPager2 实现底部导航栏

    最近在心血来潮想写在app 不过我关于android可以说是0基础 在写底部导航栏的时候去问了大佬才知道TabLayout和ViewPager 花了两天才看懂... 这里只是简单介绍因为我不准备专门做安卓软件所以在学的途中很多地方没有认真记 本篇文章使用的代码是Java 这里官方是有将两个进行联动

    2024年01月25日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包