炫酷的底部导航控件——BottomNavigationBar

2024-05-07 08:32

本文主要是介绍炫酷的底部导航控件——BottomNavigationBar,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天闲来无事,跟朋友一起探讨技术,不觉之间发现了一个很好用的控件,于是乎拿来和大家分享,略显粗糙,海景大家见谅,想知道更多技术类文章,请关注我的博客,小编会在不定时更新博客

今天带来的一款控件是我们经藏用到的,那就是底部导航控件,大家可能会说这很简单,因为我们可以用Radiobutton+Fragment来实现,也可以TabLayout+ViewPager+Fragment来实现,但是今天呢,小编带来的不是这两种实现方式,而是另一种,那就是——BottomNavigationBar,这就是我们今天的主人公,下面大家就跟我一起来了解这个并不为所有人所知的控件,或许有些人说,我都已经用过了,或许有些人说,我还没听说过,不要急,用过的权当复习了,没用过的,大家一起来学习

关于这个控件大家可以去github上面进行下载,确实很不错的,下面附上下载地址:BottomNavigationBar下载地址,它里面也有简单的demo,但是呢小编还是要带大家一起来学习一下。

大家都知道谷歌在去年的I/O大会上发布了很多的新控件,其实BottomNavigationBar也是其中一个,因为这也很符合谷歌MD的设计风格,关于BottomNavigationBar在github上面也没有过多的介绍,接下来我们一起看怎样使用它,在github上面提供了四种方式:

>  1. 下载jar,这种方式在Eclipse中比较常用
>  2. 通过Maven
>  3. 在build.gradle中进行引用
>  4. 使用Ivy(没用过)

我们这里由于使用的android studio所以实用第三种方式,在build.gradle中进行引用:

compile 'com.ashokvarma.android:bottom-navigation-bar:1.3.0'

加上这句代码后我们就可以在android studio中对BottomNavigationBar进行使用了,怎么样,是不是有点小激动呢,先让我们来看看布局文件吧,把空间加进去才是王道啊!

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior"tools:context="com.roch.myapplication.MainActivity"tools:showIn="@layout/activity_main"><FrameLayout
        android:id="@+id/id_content"android:layout_width="match_parent"android:layout_height="match_parent"/><com.ashokvarma.bottomnavigation.BottomNavigationBar
        android:id="@+id/bottom_navigation_bar"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"/>
</RelativeLayout>

布局文件没啥难点,这里稍微注意一下,布局文件的FrameLayout,因为在后面我们会用replace方法将Fragment添加进去

然后我们再来看看MainActivity.java代码:

    //这里我写了一个基类,大家可以直接继承AppCompatActivitypublic class MainActivity extends BaseActivity<ActivityMainBinding> implements BottomNavigationBar.OnTabSelectedListener {private List<Fragment> fragments;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//我这里用到了谷歌官方的一个工具叫Databinding,又不熟悉的可以自己去百度setContentView(this, R.layout.activity_main);fragments = new ArrayList<>();initView();//悬浮按钮,直接忽略FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show();}});}@Overridepublic void setTitle(CharSequence title) {//设置标题super.setTitle(title);}/*** 创建视图*/private void initView() {//得到BottomNavigationBar控件BottomNavigationBar navigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);//设置BottomNavigationBar的模式,会在下面详细讲解navigationBar.setMode(BottomNavigationBar.MODE_DEFAULT);//设置BottomNavigationBar的背景风格,后面详细讲解navigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);//我这里增加了3个Fragment //BottomNavigationItem("底部导航ico","底部导航名字")navigationBar.addItem(new BottomNavigationItem(R.mipmap.ic_home_white_24dp, "首页").setActiveColorResource(R.color.colorPrimary)).addItem(new BottomNavigationItem(R.mipmap.ic_book_white_24dp, "发现").setActiveColorResource(R.color.colorPrimary)).addItem(new BottomNavigationItem(R.mipmap.ic_favorite_white_24dp, "我的").setActiveColorResource(R.color.colorPrimary)).setFirstSelectedPosition(0)//默认选择索引为0的菜单.initialise();//对导航进行重绘fragments = getFragments();setDefaultFragment();navigationBar.setTabSelectedListener(this);}/*** 设置默认显示的fragment*/private void setDefaultFragment() {FragmentManager manager = getSupportFragmentManager();FragmentTransaction transaction = manager.beginTransaction();transaction.replace(R.id.id_content, HomeFragment.newInstance("首页"));transaction.commit();}/*** 获取fragment** @return fragment列表*/private List<Fragment> getFragments() {List<Fragment> fragments = new ArrayList<>();fragments.add(HomeFragment.newInstance("首页"));fragments.add(FindFragmente.newInstance("发现"));fragments.add(MineFragment.newInstance("我的"));return fragments;}@Overrideprotected void onResume() {super.onResume();setTitle("测试Demo");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}@Overridepublic void onTabSelected(int position) {if (fragments != null) {if (position < fragments.size()) {FragmentManager fm = getSupportFragmentManager();FragmentTransaction ft = fm.beginTransaction();Fragment fragment = fragments.get(position);ft.replace(R.id.id_content, fragment);ft.commitAllowingStateLoss();//选择性的提交,和commit有一定的区别,他不保证数据完整传输}}}@Overridepublic void onTabUnselected(int position) {}@Overridepublic void onTabReselected(int position) {}
}

主要代码就这么多,每句代码的注释我都写在代码里面了,如果还有不懂的,大可以在博客下方留言,进行讨论

大家记得一定把模式和背景样式设置在获取Item前面,否则会不生效

上面模式设置的是默认值,下面会对每个选项进行详细介绍,接下来我们看下代码的运行效果:

这里写图片描述

接下来我们对三中模式进行分析,由于源码中没有对其进行详细介绍,我们根据实际效果自行理解:

  1. MODE_DEFAULT :这里写图片描述

  2. MODE_FIXED:这里写图片描述

  3. MODE_SHIFTING:这里写图片描述

上面三中效果都是基于setBackgroundStyle设置为BACKGROUND_STYLE_DEFAULT而实现的,接下来我们会把模式设置为默认,给大家演示一下背景样式的效果,大家也可以自己理解:

  1. BACKGROUND_STYLE_DEFAULT:和上图搭配使用,上面三个模式统一是在该背景样式下的效果,大家根据自己需要选择

  2. BACKGROUND_STYLE_RIPPLE :这里写图片描述

  3. BACKGROUND_STYLE_STATIC :这里写图片描述

好了,今天就讲这么多,以上就是模式和背景样式搭配在一起的效果,还有一些炫丽的样式的大家可以自由搭配,这就是今天给大家分享的BottomNavigationBar,如果大家喜欢,还请点一个赞,给小编一点动力

本篇博客纯手打,转载请注明出处:http://blog.csdn.net/u010151514/article/details/52253586

最后附上github上面的demo下载

如果喜欢,大家可以关注我的博客,我会在不定期更新博文。与大家分享技术上的快乐,如有不懂还请留言进行讨论

这篇关于炫酷的底部导航控件——BottomNavigationBar的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966836

相关文章

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

小程序button控件上下边框的显示和隐藏

问题 想使用button自带的loading图标功能,但又不需要button显示边框线 button控件有一条淡灰色的边框,在控件上了样式 border:none; 无法让button边框隐藏 代码如下: <button class="btn">.btn{border:none; /*一般使用这个就是可以去掉边框了*/} 解决方案 发现button控件有一个伪元素(::after

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem

控件重绘有三种方法: 1 设定界面属性 2 利用Windows的消息机制,通过Windows消息映射(Message Mapping)和反映射(Message Reflecting),在合适的时机修改控件的状态和行为。此方式涉及NM_CUSTOMDRAW和WM_DRAWITEM 3 利用虚函数机制,重载虚函数。即DrawItem虚函数。 对于NM_CUSTOMDRAW,某些支持此消息的控件

C# 通过拖控件移动窗体

目录 引言一、通过控件事件移动窗体1、创建窗体界面2、添加控件事件3、添加代码 二、通过windowsAPI移动窗体1、 构建窗体和添加事件2、代码展示 引言 在C#Form窗体设计中,如果我们不需要使用默认边框设计自己个性化的窗体(FromBorderStyle=none时),这时候你会发现拖动窗体的功能就没有了,这里需要自己构建方法让用户可以拖动整个窗体,这里我们使用前辈的

Qt-常用控件(3)-多元素控件、容器类控件和布局管理器

1. 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件.QTableView 自身不持有数据,使用 QTab

ASP.NET手动触发页面验证控件事件

开发环境:.NET Framework 3.5.1 sp1 参考文章: http://www.codeproject.com/KB/aspnet/JavascriptValidation.aspx http://msdn.microsoft.com/zh-cn/library/aa479045.aspx http://www.cnblogs.com/minsentinel/archive/

兔子--计算listview的高度,解决listview与scrollview控件冲突

/** * 计算ListView的高度 * * @param listView */ public void setListViewHeightBasedOnChildren(ListView listView) { // 获取ListView对应的Adapter OrderGoodsAdapter listAdapter = (OrderGoodsAdapter) listView.getAda

QT:QWidget 控件属性的介绍

控件属性介绍 🌴enabled 状态属性🌴geometry 几何属性示例一:改变控件尺寸示例二:更变控件位置window frame 的影响 🌴windowTitle 窗口标题🌴windowIcon 窗口图标🌴 qrc机制🌴windowOpacity 窗口透明度🌴cursor 修改鼠标显示样式示例一:通过编辑区直接修鼠标显示样式示例二:通过代码的方式设置鼠标在控件的显示效果示例