@nativescript-community/ui-material-bottom-navigation
Material Design 底部导航栏允许在应用的主要目的地之间进行切换。点击底部导航图标可以直接跳转到相关视图或刷新当前活动视图。
npm i --save @nativescript-community/ui-material-bottom-navigation
- 版本:7.2.62
- GitHub: https://github.com/nativescript-community/ui-material-components/tree/master
- NPM: https://npmjs.net.cn/package/%40nativescript-community%2Fui-material-bottom-navigation
- 下载
- 昨天: 884
- 上周: 4470
- 上个月: 16776
NativeScript Material 底部导航
为 NativeScript 提供的 Material Design 底部导航组件。
内容
安装
ns plugin add @nativescript-community/ui-material-bottom-navigation
请确保在添加插件后运行新的构建以避免任何问题。
变更日志
常见问题解答
用法
原生 NativeScript
重要: 请确保在 Page 元素上包含 xmlns:mds="@nativescript-community/ui-material-bottom-navigation"
。
XML
<Page xmlns:mdt="@nativescript-community/ui-material-bottom-navigation">
<mdt:BottomNavigation width="100%" id="main-tabview" class="main-tabview"
selectedIndexChanged="{{onSelectedIndexChanged}}"
iosOverflowSafeArea="true" selectedIndex="0" tabsPosition="bottom" swipeEnabled="false">
<!-- The bottom tab UI is created via TabStrip (the containier) and TabStripItem (for each tab)-->
<mdt:TabStrip backgroundColor="{{ color('dark')}}" color="{{ color('blue')}}">
<mdt:TabStripItem class="tab-item">
<Image src="font://" class="fal"></Image>
<Label text="Home" ios:fontSize="10" android:fontSize="12"></Label>
</mdt:TabStripItem>
<mdt:TabStripItem class="tab-item">
<Label text="{{ L('search') }}" ios:fontSize="10" android:fontSize="12"></Label>
<Image src="font://" class="fal"></Image>
</mdt:TabStripItem>
<mdt:TabStripItem class="tab-item">
<Label text="{{ L('trips') }}" ios:fontSize="10" android:fontSize="12"></Label>
<Image src="font://" class="fal"></Image>
</mdt:TabStripItem>
<mdt:TabStripItem class="tab-item">
<Label text="{{ L('inbox') }}" ios:fontSize="10" android:fontSize="12"></Label>
<Image src="font://" class="fal" id="tab-inbox-icon-fal"></Image>
</mdt:TabStripItem>
</mdt:TabStrip>
<!-- The number of TabContentItem components should corespond to the number of TabStripItem components -->
<mdt:TabContentItem>
<GridLayout>
<Label text="Home" class="h2 text-center"></Label>
</GridLayout>
</mdt:TabContentItem>
<mdt:TabContentItem>
<GridLayout>
<Label text="Search Page" class="h2 text-center"></Label>
</GridLayout>
</mdt:TabContentItem>
<mdt:TabContentItem>
<GridLayout>
<Label text="TRansactions" class="h2 text-center"></Label>
</GridLayout>
</mdt:TabContentItem>
<mdt:TabContentItem>
<GridLayout>
<Label text="Inbox" class="h2 text-center"></Label>
</GridLayout>
</mdt:TabContentItem>
</mdt:BottomNavigation>
</Page>
CSS
BottomNavigation.bottom-nav {
background-color: orangered;
color: gold;
font-size: 18;
}
MDTabStripItem.tabstripitem-active {
background-color: teal;
}
MDTabStripItem.tabstripitem-active:active {
background-color: yellowgreen;
}
MDTabContentItem.first-tabcontent {
background-color: seashell;
color: olive;
}
MDTabContentItem.second-tabcontent {
background-color: slategray;
color: aquamarine;
}
MDTabContentItem.third-tabcontent {
background-color: blueviolet;
color: antiquewhite;
}
BottomNavigation TabStrip {
highlight-color: red;
}
NativeScript + Angular
import { NativeScriptMaterialTabsModule } from "@nativescript-community/ui-material-bottom-navigation/angular";
@NgModule({
imports: [
NativeScriptMaterialBottomNavigationModule,
...
],
...
})
<MDBottomNavigation selectedIndex="1">
<!-- The bottom tab UI is created via TabStrip (the containier) and TabStripItem (for each tab)-->
<MDTabStrip>
<MDTabStripItem>
<Label text="Home"></Label>
<Image src="font://" class="fas"></Image>
</MDTabStripItem>
<MDTabStripItem class="special">
<Label text="Account"></Label>
<Image src="font://" class="fas"></Image>
</MDTabStripItem>
<MDTabStripItem class="special">
<Label text="Search"></Label>
<Image src="font://" class="fas"></Image>
</MDTabStripItem>
</MDTabStrip>
<!-- The number of TabContentItem components should corespond to the number of TabStripItem components -->
<MDTabContentItem>
<GridLayout>
<Label text="Home Page" class="h2 text-center"></Label>
</GridLayout>
</MDTabContentItem>
<MDTabContentItem>
<GridLayout>
<Label text="Account Page" class="h2 text-center"></Label>
</GridLayout>
</MDTabContentItem>
<MDTabContentItem>
<GridLayout>
<Label text="Search Page" class="h2 text-center"></Label>
</GridLayout>
</MDTabContentItem>
</MDBottomNavigation>
NativeScript + Vue
import BottomNavigation from '@nativescript-community/ui-material-bottom-navigation/vue';
Vue.use(BottomNavigation);
<MDBottomNavigation selectedIndex="1">
<!-- The bottom tab UI is created via TabStrip (the containier) and TabStripItem (for each tab)-->
<MDTabStrip>
<MDTabStripItem>
<Label text="Home"></Label>
<Image src="font://" class="fas"></Image>
</MDTabStripItem>
<MDTabStripItem class="special">
<Label text="Account"></Label>
<Image src="font://" class="fas"></Image>
</MDTabStripItem>
<MDTabStripItem class="special">
<Label text="Search"></Label>
<Image src="font://" class="fas"></Image>
</MDTabStripItem>
</MDTabStrip>
<!-- The number of TabContentItem components should corespond to the number of TabStripItem components -->
<MDTabContentItem>
<GridLayout>
<Label text="Home Page" class="h2 text-center"></Label>
</GridLayout>
</MDTabContentItem>
<MDTabContentItem>
<GridLayout>
<Label text="Account Page" class="h2 text-center"></Label>
</GridLayout>
</MDTabContentItem>
<MDTabContentItem>
<GridLayout>
<Label text="Search Page" class="h2 text-center"></Label>
</GridLayout>
</MDTabContentItem>
</MDBottomNavigation>
NativeScript + React
首先,在您的 React NativeScript 应用渲染之前注册组件。一个好的放置代码的位置是在您的入口点文件(可能被称为 src/app.ts
或类似),在调用 ReactNativeScript.start
函数之前。以下是安装方法
import { registerTabNavigationBase } from '@nativescript-community/ui-material-core/tab-navigation-base/react';
import { registerBottomNavigation } from '@nativescript-community/ui-material-bottom-navigation/react';
registerTabNavigationBase();
registerBottomNavigation();
当可用时(我在写作时尚未实现,但打算在不久的将来实现),最好通过 React NativeScript Navigation 导出的 bottomNavigationNavigatorFactory()
API 使用此组件,因为它使嵌套导航变得容易,但以下是直接使用它的方法
import * as React from 'react';
export function BottomNavigation() {
const [selectedIndex, setSelectedIndex] = React.useState(0);
return (
<bottomNavigation
selectedIndex={selectedIndex}
onSelectedIndexChanged={(args) => {
setSelectedIndex(args.newIndex);
}}
style={{ backgroundColor: 'orange' }}
>
{/* The bottomTab UI is created via tabStrip (the container) and tabStripItem (for each tab) */}
<tabStrip nodeRole="tabStrip" style={{ backgroundColor: 'red' }}>
<tabStripItem nodeRole="items">
<label nodeRole="label">Home</label>
<image nodeRole="image" src="font://" className="fas" />
</tabStripItem>
<tabStripItem nodeRole="items">
<label nodeRole="label">Account</label>
<image nodeRole="image" src="font://" className="fas" />
</tabStripItem>
<tabStripItem nodeRole="items">
<label nodeRole="label">Search</label>
<image nodeRole="image" src="font://" className="fas" />
</tabStripItem>
</tabStrip>
{/* The number of tabContentItem components should corespond to the number of TabStripItem components */}
<tabContentItem nodeRole="items">
<gridLayout style={{ backgroundColor: 'blue' }}>
<label style={{ color: 'white' }}>Home Page</label>
</gridLayout>
</tabContentItem>
<tabContentItem nodeRole="items">
<gridLayout style={{ backgroundColor: 'cyan' }}>
<label style={{ color: 'black' }}>Account Page</label>
</gridLayout>
</tabContentItem>
<tabContentItem nodeRole="items">
<gridLayout style={{ backgroundColor: 'magenta' }}>
<label style={{ color: 'black' }}>Search Page</label>
</gridLayout>
</tabContentItem>
</bottomNavigation>
);
}
故障排除
如果您在写入例如 <bottomNavigation>
时看到此类错误
属性 'bottomNavigation' 在类型 'JSX.IntrinsicElements' 上不存在.ts(2339)
请确保您有
- 已安装
react-nativescript
npm 模块。 - 已安装
@types/react
npm 模块,严格使用在 React NativeScript 启动模板 中提供的确切版本。 - 运行与 React NativeScript 模板一起提供的 postinstall 脚本 –
npm run postinstall
– 以修复@types/react
。 - 如上所述注册组件(即导入并运行
registerTabNavigationBase()
和registerBottomNavigation()
方法)。 - 如果使用 Visual Studio Code,请单击导入
@nativescript-community/ui-material-bottom-navigation/react
以跳转到文件;打开文件将强制它加载其提供的类型定义。
API
属性
名称 | 类型 | 描述 |
---|---|---|
items | 数组 |
获取或设置 BottomNavigation 的项目。 |
selectedIndex | 数字 | 获取或设置 BottomNavigation 的 selectedIndex。 |
swipeEnabled | 布尔值 | 获取或设置 Tabs 的 swipe 启用状态。 |
offscreenTabLimit | 数字 | 获取或设置 Tabs 的预加载标签数量。 |
tabStrip | TabStrip | 获取或设置 BottomNavigation 的 tabStrip。 |
tabsPosition | "top", "bottom" | 获取或设置 Tabs 的位置状态。默认值:top |
iOSTabBarItemsAlignment | "leading", "justified", "center", "centerSelected" | 仅限 iOS:获取或设置 iOS 中标签栏图标的 MDCTabBarAlignment。默认值:justified |
事件
名称 | 描述 |
---|---|
selectedIndexChanged | 当selectedIndex属性更改时发出。 |
loaded | 当视图加载时发出。 |
unloaded | 当视图卸载时发出。 |
layoutChanged | 当视图的布局边界由于布局处理而更改时发出。 |