BottomNavigationBar的一些坑和问题

最近做项目时想尝试用一下BottomNavigationBar,按照官方的文档使用时,遇到了不少坑,网上的解决方案也很少,经过多次研究和尝试后终于出坑,特意记录一下。

一、首先看下官方给出的使用方式

  • step 1:导入

导入方式有三种,这里我使用了最简单的一种,在app的gradle中添加依赖:

   compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.3'
  • step 2:在xml布局文件中使用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="demo.com.activity.MainActivity">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <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>
  • step 3初始化:BottomNavigationBar
BottomNavigationBar bnb = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);

bnb.addItem(new BottomNavigationItem(R.drawable.ic_home, "Home"))
   .addItem(new BottomNavigationItem(R.drawable.ic_book, "Books"))
   .addItem(new BottomNavigationItem(R.drawable.ic_music_note, "Music"))
   .addItem(new BottomNavigationItem(R.drawable.ic_tv, "Movies & TV"))
   .addItem(new BottomNavigationItem(R.drawable.ic_game, "Games"))
   .initialise();

以上就完成了BottomNavigationBar的基本配置和初始化,不出意外的话,就可以开心愉悦的按照API使用了,但事实却是...


image.png

二、遇到的问题

  • 问题1

在step1导入的时候就遇到了一个问题,当添加完依赖,Sync之后,立马弹出了一个错误:
image.png

打开后跳到文件:
image.png
根据错误提示,应该是找不到父样式Body2,看到父样式中有个AppCompat,我立马想到了在新建项目时,取消了BackWards Compatibility(AppCompat)选项的勾选,如下图
image.png

这个选项勾选上时,AS会自动引入V7包,我取消了勾选,因此就没有自动引入。所以猜测可能是这个原因,因此需要手动导入V7包:
image.png

导入之后,果然这个错误就消失了。

  • 问题2

step2中,在xml布局文件中使用BottomNavigation时,又遇到了一个错误:
image.png

这个错误时在预览窗口底下提示的,根据错误提示,无法找到android.support.design.widget.CoordinatorLayout$Behavior这个类,导致BottomNavigationBar无法实例化,后来尝试添加Material库,修复了这个问题。
具体方式:在app的build.gradle中添加依赖:

compile 'com.android.support:design:26.0.0-alpha1'
  • 问题3

在Step3初始化BottomNavigationBar时,编译能够正常通过,但一运行就崩溃,提示错误:

android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>

这个错误不知道是什么原因导致的,经过网上的一番搜索也没有得到答案,后来多次尝试得出了两个解决方法:
1.让你的Activity继承AppCompatActivity
2.在清单文件中,给使用了BottomNavigationBar的Activity加上一个AppCompat的主题,如:

android:theme="@style/Base.Theme.AppCompat"

以上两种解决方法任选其一即可
在网上搜索问题3的时候,有一个解决方法是给Activity加上AppTheme主题,但不知道为什么我尝试发现没有效果。

三、总结

关于BottomNavigationBar的一些用法,可以参考官方的wiki:https://github.com/Ashok-Varma/BottomNavigation/wiki,由于项目目前正在开发中,就不贴源码了。网上有一些不错的源码,比如:http://blog.csdn.net/qq_16131393/article/details/51419901 ,可以下载下来研究一下。
最后,

image.png

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 122,327评论 15 532
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 66,911评论 12 114
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 33,659评论 5 336
  • 妞妞最近得了玉净瓶~喊我:爸爸!“哎”“收”……我被她收进去了!一会儿,她又喊我:好爸爸!“哎”“收”……又被收进去了!
    欣欣然624阅读 14评论 0 0
  • 我讨厌在你面前的自己 神经病一样的无理取闹 敏感疯癫不讲道理
    达浪打啦阅读 13评论 0 0