目录
一、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) :
-
MODE_FIXED:固定模式
- 当导航栏的菜单项个数小于等于3个时,推荐使用此模式。
- 在固定模式下,所有的菜单项会平均分布在底部导航栏中,且大小相等。
-
MODE_SHIFTING:移动模式
- 当导航栏的菜单项个数大于3个时,推荐使用此模式。
- 在移动模式下,当前选中的菜单项会突出显示,而其他未选中的菜单项则会缩小并向上移动。
10.初始化 bottomNavigation
- initialise():用于完成底部导航栏的初始化。
(二)、常用类
BottomNavigationBar
:底部导航栏的主要类,用于创建和管理底部导航项。通过该类,可以设置导航栏的模式、背景样式、菜单项等属性,并监听导航项的选中事件。BadgeItem
:角标类,用于在导航栏的菜单项上显示角标。它有两个子类:TextBadgeItem
:用于在菜单项上显示文本角标。ShapeBadgeItem
:用于在菜单项上显示形状角标,如圆形、方形等。BottomNavigationItem
:底部导航项的类,用于创建每个菜单项。通过该类,可以设置图标、和选中状态的图标。OnTabSelectedListener
:底部导航栏的选项卡选中监听器接口。通过实现该接口,可以监听到选项卡的选中事件,并在相应的回调方法中进行处理。-
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 items= getBottomNavigationItem(); mBottomNavigationBar.addItem(items.get(0)) .setFirstSelectedPosition(0) .addItem(items.get(1)) .addItem(items.get(2)) // 此方法应在所有自定义方法结束时调用。此方法将考虑所有更改并重新绘制选项卡。 .initialise(); setDefaultFragment(); } private List getBottomNavigationItem() { initBadgeItem(); // 用来存item的集合 List 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一起使用 } private void setDefaultFragment() { mFragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = mFragmentManager.beginTransaction(); firstFragment = new FirstFragment(); transaction.add(R.id.tb, firstFragment); transaction.commit(); } 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:
activity_main:
注意: SecondFragment、ThirdFragment和FirstFragment的代码一样,其布局文件也跟activity_first_fragment一样。
运行效果:
四、总结
BottomNavigationBar(底部导航栏)是一种常见的用户界面设计模式,常用于移动应用程序中。下面是 BottomNavigationBar 的优点和缺点的总结:
优点:
提供直观的导航:底部导航栏通常位于屏幕底部,使用户可以轻松访问主要功能和导航选项。这种布局方式更符合用户的自然操作习惯,提供了直观的导航体验。
2. 节省屏幕空间:将导航选项放置在底部,可以节省屏幕顶部的空间,更多地用于显示应用程序的内容。尤其对于大屏幕设备,这种设计可以更好地利用屏幕空间。
3. 易于使用手指操作:由于底部导航栏靠近手指自然的位置,用户可以轻松地使用拇指进行导航,而无需频繁改变手持设备的姿势。
4. 强调当前位置:通过高亮显示当前活动或选中的导航选项,底部导航栏可以帮助用户更清楚地知道自己所处的位置,并提供上下文导航。
缺点:
屏幕空间限制:虽然底部导航栏节省了屏幕顶部的空间,但它也会占用屏幕底部的一定高度。对于某些应用程序而言,这可能会减少可用的内容显示区域。
2. 选项数量限制:底部导航栏通常适用于不超过五个主要功能或导航选项的应用程序。如果选项过多,可能会导致导航栏变得拥挤,难以识别和操作。
3. 设计一致性:底部导航栏是一种常见的设计模式,但并不适用于所有应用程序。在选择使用底部导航栏时,需要确保它与应用程序的整体设计风格和用户期望一致。
综上所述,BottomNavigationBar 提供了直观、节省空间和易于操作的优点,但也存在屏幕空间限制和选项数量限制等一些缺点。在设计应用程序时,需要仔细考虑是否采用底部导航栏,并确保与应用程序的整体设计一致。
来源地址:https://blog.csdn.net/A125679880/article/details/130038876