BottomNavigationView--基本使用总结

1、BottomNavigationView 是什么?

BottomNavigationView 是安卓官方提供的底部导航栏,能够方便的实现下图中的底部导航效果。

BottomNavigationView--基本使用总结_第1张图片

Paste_Image.png

按照 官方的设计规范 https://material.io/guidelines/components/bottom-navigation.html# 当底部导航的标签在 3--5 个之间的时候(含3、5), 可以使用BottomNavigationView 。

当导航标签少于3个的时候,也可以使用,不会报错,但实际项目中一般不会有少于三个的;如果导航标签超过5个,在使用BottomNavigationView 时在运行期会报错,错误信息如下:
java.lang.IllegalArgumentException: Maximum number of items supported by BottomNavigationView is 5. Limit can be checked with BottomNavigationView#getMaxItemCount()。意思是说,最多不能超过 5 个条目!

2、BottomNavigationView的使用前提及相关属性

(1)、使用前提

BottomNavigationView是放置在design包中的,所以,使用前需要先引入com.android.support:design:25.1.0包,引入方式有两种,一种是直接从当前module的 gradle 文件中编辑,一种是从Project Structure 界面的 dependences 选项卡中导入。导入方式,参考下图:

BottomNavigationView--基本使用总结_第2张图片

直接从当前Module的gradle文件中编辑.png

BottomNavigationView--基本使用总结_第3张图片

从Project Structure 界面的 dependences 选项卡中导入.png

(2)主要属性及方法

  • android:background

整个BottomNavigationView 的背景色,设置背景色之后,切换选项时依旧会有水波纹效果(设置背景色也是为了将底部导航和上方的内容进行分割区分)

  • app:itemBackground

条目的背景色。设置之后在切换选项时将无法看到水波纹效果

  • app:itemIconTint

条目图标的颜色。可以是单一颜色,也可以是颜色selector。通常建议设置selector,当未选中时指定一种颜色,选中时再指定另一种颜色。该selector 定义在 res -- color 目录下。(未设置该属性时,默认未选中状态为深灰色,选中状态时的颜色为当前主题的 colorPrimary 颜色)

  • itemTextColor

条目文本的颜色。可以是单一颜色,也可以是颜色selector。通常建议设置selector,当未选中时指定一种颜色,选中时再指定另一种颜色。该selector 定义在 res -- color 目录下。未设置该属性时,默认未选中状态为深灰色,选中状态时的颜色为当前主题的 colorPrimary 颜色)

  • app:menu

当前BottomNavigationView 所引用的menu 菜单。

  • setOnNavigationItemSelectedListener()

设置导航条目被选中时的监听器

  • getMenu( )

获取当前BottomNavigationView 中所引用的 menu 菜单对象

3、详细示例代码:

最终实现效果:

 

BottomNavigationView.gif

  • BottomNavigationViewActivity.java
/**
 * 作者:CnPeng
 * 

* 时间:2017/4/11:下午8:32 *

* 说明:安卓原生底部导航栏 BottomNavigationView 的基本使用示例 *

* 使用时需要先引入 design 包 *

* 底部Item的数量不能超过5 ,否则会报错,报错信息如下: java.lang.IllegalArgumentException: Maximum number of items supported by * BottomNavigationView is 5. Limit can be checked with BottomNavigationView#getMaxItemCount() *

* 当item超过3个时,未被选中的item 只显示图标,只有被选中的才会显示图标和文字;而3个及3个以内时图标和文字都会显示 *

* 如果底部Item 想实现小红点,就无法使用BottomNavigationView 了 。/(ㄒoㄒ)/~~ */ public class BottomNavigationViewActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bottom_navigation_view); final TextView tv_whichItemSelected = (TextView) findViewById(R.id.tv_whichItemSelected); BottomNavigationView bnv_001 = (BottomNavigationView) findViewById(R.id.bnv_001); //为底部导航设置条目选中监听 bnv_001.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected( @NonNull MenuItem item) { switch (item.getItemId()) { case R.id.item1: tv_whichItemSelected.setText(item.getTitle()); break; case R.id.item2: tv_whichItemSelected.setText(item.getTitle()); break; case R.id.item3: tv_whichItemSelected.setText(item.getTitle()); break; case R.id.item4: tv_whichItemSelected.setText(item.getTitle()); break; case R.id.item5: tv_whichItemSelected.setText(item.getTitle()); break; } return true; //这里返回true,表示事件已经被处理。如果返回false,为了达到条目选中效果,还需要下面的代码 // item.setChecked(true); 不论点击了哪一个,都手动设置为选中状态true(该控件并没有默认实现) // 。如果不设置,只有第一个menu展示的时候是选中状态,其他的即便被点击选中了,图标和文字也不会做任何更改 } }); //默认选中底部导航栏中的第三个 bnv_001.getMenu().getItem(2).setChecked(true); } }

activity_bottom_navigation.xml




    
    
    


menu_bottom_navigation.xml




    
    
    
    
    

selector_bnv.xml



    
    

4、总结

  • (1)BottomNavigationView 整体实现比较简单,但是扩展性不强。比如,想在某个条目的右上角加上小红点,这就行不通了。。。

  • (2)没有提供直接选中某项的方法,默认选中第一项。如果想更改默认选中,就需要通过getMenu( ) 方法获取menu 对象,然后获取其中的具体 item,最后再调用item 的 setChecked(true)

  • (3) 总的条目数量不能超过5个。当条目数量小于等于三个时,能将条目的图标和title 完全展示出来。如果大于3个小于等于5个,则只有被选中的条目才能同时展示图标和title,未被选中的条目只展示图标。

  • (4)创建 menu 菜单的时候,没必要手写,可以切换到design模式下,直接拖拽,然后再最右侧更改属性即可,大致如下图:

BottomNavigationView--基本使用总结_第4张图片

Paste_Image.png

参考:
http://codpoe.me/2016/10/27/bottom_navigation_view/

 

 

你可能感兴趣的:(android)