Nativescript plugin for Android & iOS to have the Bottom Navigation bar following the Material Design Guidelines.
You need the version of NS3 or later to use this plugin.
tns plugin add nativescript-bottom-navigationBefore start using the plugin you need to add the icons for android & iOS in your App_Resources directory.
You can set the tabs using the tabs property
<Page xmlns="http://schemas.nativescript.org/tns.xsd"
      xmlns:bottomNav="nativescript-bottom-navigation"
      loaded="pageLoaded"
      class="page">
    <GridLayout columns="*"
                rows="*, auto">
        <StackLayout row="0">
            <Label text="content"></Label>
        </StackLayout>
        <bottomNav:BottomNavigation tabs="{{ tabs }}"
                                    activeColor="green"
                                    inactiveColor="red"
                                    backgroundColor="black"
                                    loaded="bottomNavigationLoaded"
                                    row="1"></bottomNav:BottomNavigation>
    </GridLayout>
</Page>import * as observable from 'tns-core-modules/data/observable';
import * as pages from 'tns-core-modules/ui/page';
import { BottomNavigation, BottomNavigationTab, OnTabSelectedEventData } from "nativescript-bottom-navigation";
// Event handler for Page 'loaded' event attached in main-page.xml
export function pageLoaded(args: observable.EventData) {
  // Get the event sender
  let page = <pages.Page>args.object;
  page.bindingContext = {
      tabs: [
        new BottomNavigationTab('First', 'ic_home'),
        new BottomNavigationTab('Second', 'ic_view_list'),
        new BottomNavigationTab('Third', 'ic_menu')
      ]
  };
}
export function bottomNavigationLoaded(args) {
  let bottomNavigation: BottomNavigation = args.object;
  // For some reason the tabSelected event doesn't work if you
  // handle it from the view, so you need to handle the event in this way.
  bottomNavigation.on('tabSelected', tabSelected);
}
export function tabSelected(args: OnTabSelectedEventData) {
  console.log('tab selected ' + args.newIndex);
}or you can add the tabs directly in your xml view
<Page xmlns="http://schemas.nativescript.org/tns.xsd"
      xmlns:bottomNav="nativescript-bottom-navigation"
      loaded="pageLoaded"
      class="page">
    <GridLayout columns="*"
                rows="*, auto">
        <StackLayout row="0">
            <Label text="content"></Label>
        </StackLayout>
        <bottomNav:BottomNavigation activeColor="green"
                                    inactiveColor="red"
                                    backgroundColor="black"
                                    loaded="bottomNavigationLoaded"
                                    row="1">
            <bottomNav:BottomNavigationTab title="First" icon="ic_home"></bottomNav:BottomNavigationTab>
            <bottomNav:BottomNavigationTab title="Second" icon="ic_view_list"></bottomNav:BottomNavigationTab>
            <bottomNav:BottomNavigationTab title="Third" icon="ic_menu"></bottomNav:BottomNavigationTab>
        </bottomNav:BottomNavigation>
    </GridLayout>
</Page>import * as observable from 'tns-core-modules/data/observable';
import * as pages from 'tns-core-modules/ui/page';
import { BottomNavigation, BottomNavigationTab, OnTabSelectedEventData } from "nativescript-bottom-navigation";
// Event handler for Page 'loaded' event attached in main-page.xml
export function pageLoaded(args: observable.EventData) {
  // Get the event sender
  let page = <pages.Page>args.object;
}
export function bottomNavigationLoaded(args) {
  let bottomNavigation: BottomNavigation = args.object;
  bottomNavigation.on('tabSelected', tabSelected);
}
export function tabSelected(args: OnTabSelectedEventData) {
  console.log('tab selected ' + args.newIndex);
}First you need to include the NativescriptBottomNavigationModule in your app.module.ts
import { NativescriptBottomNavigationModule} from "nativescript-bottom-navigation/angular";
@NgModule({
    imports: [
        NativescriptBottomNavigationModule
    ],
    ...
})As the examples in the Javascript/Typescript version you can use the tabs property to set the BottomNavigationTabs
<GridLayout rows="*, auto">
    <StackLayout row="0">
       <Label text="content"></Label>
    </StackLayout>
    <BottomNavigation [tabs]="tabs"
                      activeColor="red"
                      inactiveColor="yellow"
                      backgroundColor="black"
                      (tabSelected)="onBottomNavigationTabSelected($event)"
                      (tabPressed)="onBottomNavigationTabPressed($event)"
                      row="1"></BottomNavigation>
</GridLayout>or you can declare the BottomNavigationTabs in your html directly
<GridLayout rows="*, auto">
    <StackLayout row="0">
       <Label text="content"></Label>
    </StackLayout>
    <BottomNavigation activeColor="red"
                      inactiveColor="yellow"
                      backgroundColor="black"
                      (tabSelected)="onBottomNavigationTabSelected($event)"
                      (tabPressed)="onBottomNavigationTabPressed($event)"
                      row="1">
        <BottomNavigationTab title="First" icon="ic_home"></BottomNavigationTab>
        <BottomNavigationTab title="Second" icon="ic_view_list"></BottomNavigationTab>
        <BottomNavigationTab title="Third" icon="ic_menu"></BottomNavigationTab>
    </BottomNavigation>
</GridLayout>import { Component, OnInit } from "@angular/core";
import { BottomNavigation, BottomNavigationTab, OnTabPressedEventData, OnTabSelectedEventData } from 'nativescript-bottom-navigation';
@Component(
  {
    selector: "ns-app",
    moduleId: module.id,
    templateUrl: "./app.component.html",
  }
)
export class AppComponent {
  public tabs: BottomNavigationTab[] = [
    new BottomNavigationTab('First', 'ic_home'),
    new BottomNavigationTab('Second', 'ic_view_list'),
    new BottomNavigationTab('Third', 'ic_menu')
  ];
  onBottomNavigationTabPressed(args: OnTabPressedEventData): void {
    console.log(`Tab pressed:  ${args.index}`);
  }
  onBottomNavigationTabSelected(args: OnTabSelectedEventData): void {
    console.log(`Tab selected:  ${args.oldIndex}`);
  }
}If you want to use this plugin with Vue, do this in your app.js or main.js:
import BottomNavigation from 'nativescript-bottom-navigation/vue';
Vue.use(BottomNavigation)This will install and register BottomNavigation and BottomNavigationTab components to your Vue instance and now you can use the plugin as follows:
<GridLayout rows="*, auto">
    <StackLayout row="0">
       <Label text="content"></Label>
    </StackLayout>
    <BottomNavigation activeColor="red"
                      inactiveColor="yellow"
                      backgroundColor="black"
                      @tabSelected="onBottomNavigationTabSelected"
                      row="1">
        <BottomNavigationTab title="First" icon="ic_home" />
        <BottomNavigationTab title="Second" icon="ic_view_list" />
        <BottomNavigationTab title="Third" icon="ic_menu" />
    </BottomNavigation>
</GridLayout>You can find more information of how to use nativescript plugins with Vue Here!
You can also use your css file to set or change the activeColor, inactiveColor & backgroundColor of the Bottom Navigation.
.botom-nav {
    tab-active-color: green;
    tab-inactive-color: black;
    tab-background-color: blue;
}** properties (bindable) = properties settable thew XML/HTML ** events = event properties settable thew XML/HTML ** properties (internal) = properties settable thew JS/TS instance
| Property | Required | Default | Type | Description | 
|---|---|---|---|---|
| tabs | true | null | Array<BottomNavigationTab> | Array containing the tabs for the BottomNavigation | 
| titleVisibility | false | "selected" | `"selected" | "always" | 
| activeColor | false | "blue" | String | Color of the BottomNavigationTab when it's selected | 
| inactiveColor | false | "gray" | String | Color of the BottomNavigationTab when it's not selected | 
| backgroundColor | false | "white" | String | Color of the BottomNavigation background | 
| Property | Required | Default | Type | Description | 
|---|---|---|---|---|
| tabSelected | false | null | function ($event: OnTabSelectedEventData) {} | Function fired every time the user select a new tab that receive an event object | 
| tabReselected | false | null | function ($event: OnTabReselectedEventData) {} | Function fired every time the user select a tab that is already selected and receive an event object | 
| tabPressed | false | null | function ($event: OnTabPressedEventData) {} | Function fired every time the user tap a tab with selectable: falsethat receive an event object | 
| Property | Required | Default | Type | Description | 
|---|---|---|---|---|
| selectedTabIndex | true | 0 | Number | Index of the selected tab | 
| Property | Type | Description | 
|---|---|---|
| selectTab(index: number) | Void | Select a tab programmatically | 
| createTabs(tabs: BottomNavigationTab[]) | Void | Create the tabs programmatically | 
| Property | Required | Default | Type | Description | 
|---|---|---|---|---|
| title | true | null | String | Title of the tab | 
| icon | true | null | String | Icon of the tab | 
| selectable | false | true | Boolean | Determine if the tab can be selected or not (The tabSelectedevent still be fired) | 
