@nativescript-community/ui-material-tabs
Material Design 标签页组织不同屏幕、数据集和其他交互的内容。
npm i --save @nativescript-community/ui-material-tabs

NativeScript 材料标签页

为 NativeScript 提供的 Material Design 的 标签页 组件。

npm npm

内容

  1. 安装
  2. 变更日志
  3. 常见问题解答
  4. 使用方法
  5. API

ns plugin add @nativescript-community/ui-material-tabs

确保在添加插件后运行新的构建以避免任何问题。

变更日志

常见问题解答

使用方法

纯 NativeScript

重要:请确保在页面元素上包含 xmlns:mds="@nativescript-community/ui-material-tabs"

XML

<Page xmlns:mdt="@nativescript-community/ui-material-tabs">
<mdt:Tabs selectedIndex="1">
<!-- The bottom tab UI is created via TabStrip (the containier) and TabStripItem (for each tab)-->
<mdt:TabStrip>
<mdt:TabStripItem>
<Label text="Home"></Label>
<Image src="font://&#xf015;" class="fas"></Image>
</TabStripItem>
<mdt:TabStripItem> class="special">
<Label text="Account"></Label>
<Image src="font://&#xf007;" class="fas"></Image>
</mdt:TabStripItem>
<mdt:TabStripItem> class="special">
<Label text="Search"></Label>
<Image src="font://&#xf00e;" class="fas"></Image>
</mdt:TabStripItem>
</mdt:TabStrip>

<!-- The number of TabContentItem components should corespond to the number of TabStripItem components -->
<mdt:TabContentItem>
<GridLayout>
<Label text="Home Page" class="h2 text-center"></Label>
</GridLayout>
</mdt:TabContentItem>
<mdt:TabContentItem>
<GridLayout>
<Label text="Account Page" class="h2 text-center"></Label>
</GridLayout>
</mdt:TabContentItem>
<mdt:TabContentItem>
<GridLayout>
<Label text="Search Page" class="h2 text-center"></Label>
</GridLayout>
</mdt:TabContentItem>
</mdt:Tabs>
</Page>

CSS

Tabs.bottom-nav {
background-color: orangered;
color: gold;
font-size: 18;
}

TabStripItem.tabstripitem-active {
background-color: teal;
}

TabStripItem.tabstripitem-active:active {
background-color: yellowgreen;
}

TabContentItem.first-tabcontent {
background-color: seashell;
color: olive;
}
TabContentItem.second-tabcontent {
background-color: slategray;
color: aquamarine;
}
TabContentItem.third-tabcontent {
background-color: blueviolet;
color: antiquewhite;
}
Tabs MDTabStrip {
highlight-color: red;
}

NativeScript + Angular

import { NativeScriptMaterialTabsModule } from "@nativescript-community/ui-material-tabs/angular";

@NgModule({
imports: [
NativeScriptMaterialTabsModule,
...
],
...
})
    <MDTabs 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://&#xf015;" class="fas"></Image>
</MDTabStripItem>
<MDTabStripItem class="special">
<Label text="Account"></Label>
<Image src="font://&#xf007;" class="fas"></Image>
</MDTabStripItem>
<MDTabStripItem class="special">
<Label text="Search"></Label>
<Image src="font://&#xf00e;" 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>
</MDTabs>

NativeScript + Vue

import TabsPlugin from '@nativescript-community/ui-material-tabs/vue';

Vue.use(TabsPlugin);
<MDTabs 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://&#xf015;" class="fas"></Image>
</MDTabStripItem>
<MDTabStripItem class="special">
<Label text="Account"></Label>
<Image src="font://&#xf007;" class="fas"></Image>
</MDTabStripItem>
<MDTabStripItem class="special">
<Label text="Search"></Label>
<Image src="font://&#xf00e;" 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>
</MDTabs>

NativeScript + React

首先,在您的 React NativeScript 应用渲染之前注册组件。一个不错的放置代码的位置是在您的入口点文件(可能称为 src/app.ts 或类似)中,在调用 ReactNativeScript.start 函数之前。以下是安装方法

import { registerTabNavigationBase } from '@nativescript-community/ui-material-core/tab-navigation-base/react';
import { registerTabs } from '@nativescript-community/ui-material-tabs/react';

registerTabNavigationBase();
registerTabs();

通常最好通过 tabNavigatorFactory() API 使用此组件,该 API 由 React NativeScript Navigation 导出,因为它使嵌套导航变得容易,但这里是如何直接使用它的

import * as React from 'react';

export function Tabs() {
const [selectedIndex, setSelectedIndex] = React.useState(0);

return (
<tabs
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://&#xf015;" className="fas" />
</tabStripItem>
<tabStripItem nodeRole="items">
<label nodeRole="label">Account</label>
<image nodeRole="image" src="font://&#xf007;" className="fas" />
</tabStripItem>
<tabStripItem nodeRole="items">
<label nodeRole="label">Search</label>
<image nodeRole="image" src="font://&#xf00e;" 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>
</tabs>
);
}

故障排除

如果您在写入例如 <tabs> 到您的 JSX 时看到如下错误

属性 'tabs' 不存在于类型 'JSX.IntrinsicElements'.ts(2339)

请确保您已安装以下内容

  1. 安装了 react-nativescript npm 模块。
  2. 安装了 @types/react npm 模块,严格使用在 React NativeScript 入门模板 中提供的确切版本。
  3. 运行 React NativeScript 模板附带的后安装脚本 – npm run postinstall – 以修补 @types/react
  4. 按照上述说明注册组件(即导入并运行 registerTabNavigationBase()registerTabs() 方法)。
  5. 如果使用 Visual Studio Code,选择单击导入 @nativescript-community/ui-material-tabs/react 以跳转到文件;打开文件将强制它加载其提供的类型。

API

属性

名称 类型 描述
items 数组 获取或设置 BottomNavigation 的项目。
selectedIndex 数字 获取或设置 BottomNavigation 的 selectedIndex。
swipeEnabled 布尔值 获取或设置 Tabs 的滑动启用状态。
offscreenTabLimit 数字 获取或设置 Tabs 的预加载非屏幕标签的数量。
tabStrip TabStrip 获取或设置 BottomNavigation 的 tabStrip。
tabsPosition "top", "bottom" 获取或设置 Tabs 的位置状态。默认值:顶部

事件

名称 描述
selectedIndexChanged 当 selectedIndex 属性更改时发出。
loaded 当视图加载时发出。
unloaded 当视图卸载时发出。
layoutChanged 当视图的布局边界由于布局处理而更改时发出。