@nativescript-community/ui-material-tabs
Material Design 标签页组织不同屏幕、数据集和其他交互的内容。
npm i --save @nativescript-community/ui-material-tabs
- 版本:7.2.62
- GitHub: https://github.com/nativescript-community/ui-material-components/tree/master
- NPM: https://npmjs.net.cn/package/%40nativescript-community%2Fui-material-tabs
- 下载
- 昨天: 792
- 上周: 5058
- 上个月: 19968
NativeScript 材料标签页
为 NativeScript 提供的 Material Design 的 标签页 组件。
内容
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://" class="fas"></Image>
</TabStripItem>
<mdt:TabStripItem> class="special">
<Label text="Account"></Label>
<Image src="font://" class="fas"></Image>
</mdt:TabStripItem>
<mdt:TabStripItem> class="special">
<Label text="Search"></Label>
<Image src="font://" 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://" 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>
</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://" 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>
</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://" 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>
</tabs>
);
}
故障排除
如果您在写入例如 <tabs>
到您的 JSX 时看到如下错误
属性 'tabs' 不存在于类型 'JSX.IntrinsicElements'.ts(2339)
请确保您已安装以下内容
- 安装了
react-nativescript
npm 模块。 - 安装了
@types/react
npm 模块,严格使用在 React NativeScript 入门模板 中提供的确切版本。 - 运行 React NativeScript 模板附带的后安装脚本 –
npm run postinstall
– 以修补@types/react
。 - 按照上述说明注册组件(即导入并运行
registerTabNavigationBase()
和registerTabs()
方法)。 - 如果使用 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 | 当视图的布局边界由于布局处理而更改时发出。 |