欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android BottomNavigationBar底部导航控制器使用方法详解

程序员文章站 2024-02-28 16:45:16
最近google在自己推出的material design中增加了bottom navigation导航控制。android一直没有官方的导航控制器,自己实现确实是五花八门...

最近google在自己推出的material design中增加了bottom navigation导航控制。android一直没有官方的导航控制器,自己实现确实是五花八门,有了这个规定之后,就类似苹果的底部toolbar,以后我们的app就会有一致的风格,先看一张效果:

Android BottomNavigationBar底部导航控制器使用方法详解

这是官方在material design中给出一张图,确实很不错。

1.bottomnavigationbar的下载地址

https://github.com/ashok-varma/bottomnavigation

2.使用的方法

2.1在gradle中添加

compile ‘com.ashokvarma.android:bottom-navigation-bar:0.9.5'

2.2布局实现

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

2.3类中activity中添加bottomnavigationitem

bottomnavigationbar bottomnavigationbar = (bottomnavigationbar) findviewbyid(r.id.bottom_navigation_bar);

bottomnavigationbar
        .additem(new bottomnavigationitem(r.drawable.ic_home_white_24dp, "home"))
        .additem(new bottomnavigationitem(r.drawable.ic_book_white_24dp, "books"))
        .additem(new bottomnavigationitem(r.drawable.ic_music_note_white_24dp, "music"))
        .additem(new bottomnavigationitem(r.drawable.ic_tv_white_24dp, "movies & tv"))
        .additem(new bottomnavigationitem(r.drawable.ic_videogame_asset_white_24dp, "games"))
        .initialise();

2.4设置事件监听器tabchangelistener

 bottomnavigationbar.settabselectedlistener(new bottomnavigationbar.ontabselectedlistener(){
      @override
      public void ontabselected(int position) {
      }
      @override
      public void ontabunselected(int position) {]
      }
      @override
      public void ontabreselected(int position) {
      }
    });

3.案例的实现

布局文件

<?xml version="1.0" encoding="utf-8"?>
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
  android:layout_height="match_parent"
  app:layout_behavior="@string/appbar_scrolling_view_behavior"
  tools:showin="@layout/activity_navigation_view_demo"
  tools:context="com.lidong.demo.navigation_view.bottomnavigationbardemoactivity">

  <linearlayout
    android:id="@+id/tb"
    android:layout_width="match_parent"
     android:layout_height="match_parent"
    android:orientation="vertical" />
  <com.ashokvarma.bottomnavigation.bottomnavigationbar
    android:id="@+id/bottom_navigation_bar"
    android:layout_width="match_parent"
    android:layout_alignparentbottom="true"
    android:layout_height="wrap_content"/>
</relativelayout>

activity的代码:

package com.lidong.demo.navigation_view;

import android.app.fragmentmanager;
import android.app.fragmenttransaction;
import android.os.bundle;
import android.support.v7.app.appcompatactivity;
import android.support.v7.widget.toolbar;
import android.util.log;

import com.ashokvarma.bottomnavigation.bottomnavigationbar;
import com.ashokvarma.bottomnavigation.bottomnavigationitem;
import com.lidong.demo.r;

/**
 * bottomnavigationbar实现
 */
public class bottomnavigationbardemoactivity extends appcompatactivity implements bottomnavigationbar.ontabselectedlistener {

  private bottomnavigationbar bottomnavigationbar;
  int lastselectedposition = 0;
  private string tag = bottomnavigationbardemoactivity.class.getsimplename();
  private locationfragment mlocationfragment;
  private findfragment mfindfragment;
  private favoritesfragment mfavoritesfragment;
  private bookfragment mbookfragment;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_navigation_view_demo);
    toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar);
    setsupportactionbar(toolbar);
    bottomnavigationbar = (bottomnavigationbar) findviewbyid(r.id.bottom_navigation_bar);

    bottomnavigationbar
        .additem(new bottomnavigationitem(r.mipmap.ic_location_on_white_24dp, "位置").setactivecolor(r.color.orange))
        .additem(new bottomnavigationitem(r.mipmap.ic_find_replace_white_24dp, "发现").setactivecolor(r.color.blue))
        .additem(new bottomnavigationitem(r.mipmap.ic_favorite_white_24dp, "爱好").setactivecolor(r.color.green))
        .additem(new bottomnavigationitem(r.mipmap.ic_book_white_24dp, "图书").setactivecolor(r.color.blue))
        .setfirstselectedposition(lastselectedposition )
        .initialise();

    bottomnavigationbar.settabselectedlistener(this);
    setdefaultfragment();
  }

  /**
   * 设置默认的
   */
  private void setdefaultfragment() {
    fragmentmanager fm = getfragmentmanager();
    fragmenttransaction transaction = fm.begintransaction();
    mlocationfragment = locationfragment.newinstance("位置");
    transaction.replace(r.id.tabs, mlocationfragment);
    transaction.commit();
  }

  @override
  public void ontabselected(int position) {
    log.d(tag, "ontabselected() called with: " + "position = [" + position + "]");
    fragmentmanager fm = this.getfragmentmanager();
    //开启事务
    fragmenttransaction transaction = fm.begintransaction();
    switch (position) {
      case 0:
        if (mlocationfragment == null) {
          mlocationfragment = locationfragment.newinstance("位置");
        }
        transaction.replace(r.id.tb, mlocationfragment);
        break;
      case 1:
        if (mfindfragment == null) {
          mfindfragment = findfragment.newinstance("发现");
        }
        transaction.replace(r.id.tb, mfindfragment);
        break;
      case 2:
        if (mfavoritesfragment == null) {
          mfavoritesfragment = favoritesfragment.newinstance("爱好");
        }
        transaction.replace(r.id.tb, mfavoritesfragment);
        break;
      case 3:
        if (mbookfragment == null) {
          mbookfragment = bookfragment.newinstance("图书");
        }
        transaction.replace(r.id.tb, mbookfragment);
        break;
      default:
        break;
    }
    // 事务提交
    transaction.commit();
  }

  @override
  public void ontabunselected(int position) {
    log.d(tag, "ontabunselected() called with: " + "position = [" + position + "]");
  }

  @override
  public void ontabreselected(int position) {

  }
}

fragment的代码

package com.lidong.demo.navigation_view;

import android.app.fragment;
import android.os.bundle;
import android.view.layoutinflater;
import android.view.view;
import android.view.viewgroup;
import android.widget.textview;

import com.lidong.demo.r;

public class locationfragment extends fragment {


  public static locationfragment newinstance(string param1) {
    locationfragment fragment = new locationfragment();
    bundle args = new bundle();
    args.putstring("agrs1", param1);
    fragment.setarguments(args);
    return fragment;
  }

  public locationfragment() {

  }

  @override
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
  }

  @override
  public view oncreateview(layoutinflater inflater, viewgroup container,
               bundle savedinstancestate) {
    view view = inflater.inflate(r.layout.fragment_location, container, false);
    bundle bundle = getarguments();
    string agrs1 = bundle.getstring("agrs1");
    textview tv = (textview)view.findviewbyid(r.id.tv_location);
    tv.settext(agrs1);
    return view;
  }



}

代码下载:https://github.com/lidong1665/androidrapidlibrary

代码实现起来很简单,就加载布局,添加bottomnavigationitem,设置tabchangelistener就这三步搞定底部导航控制器。

Android BottomNavigationBar底部导航控制器使用方法详解

以上就是关于bottomnavigationbar底部导航控制器,希望对大家的学习有所帮助。