react-native-vector-icons
@amazon-devices/react-native-vector-icons在Vega上提供对react-native-vector-icons的支持。该库提供可自定义的矢量图标,非常适合装饰按钮、标志和导航栏或选项卡栏,可以无缝集成到您的项目中。它们的多功能性使扩展和样式设定都很轻松。
这是一个系统部署的库,可供适用于Vega的React Native应用使用,无需单独的安装过程。它作为自动链接库进行部署,您的应用在运行时会链接到该库。只能在库和为其构建的适用于Vega的React Native版本之间保证兼容性。
当您升级用于构建应用的适用于Vega的React Native版本时,最佳实践是同时升级它所依赖的库的版本。
有关此库及其API的更多信息,请参阅GitHub存储库中的README.md(仅提供英文版)。
安装
- 在package.json文件中添加JavaScript库依赖项。
"dependencies": { ... "@amazon-devices/react-native-vector-icons": "~2.0.0" } -
使用
npm install命令重新安装依赖项。 - 将您的字体文件添加到
<应用程序包根目录>/assets/fonts
升级
升级此程序包通常也需要更新链接到您的项目的字体文件。如果自动链接对您有用,再次运行它应该会更新字体。否则,您需要按照安装部分中概述的步骤进行操作。
示例
IconExplorer
在GitHub react-native-vector-icons存储库的packages/icon-explorer中试用IconExplorer项目。您还可以在那里搜索任何图标。

基本示例
下面显示了返回图标的基本示例:
import Icon from '@amazon-devices/react-native-vector-icons/Ionicons';
function ExampleView(props) {
return <Icon name="ios-person" size={30} color="#4F8EF7" />;
}
TabBar
下面的示例显示了如何实现TabBar。
下面的示例取自react-navigation:
import { createBottomTabNavigator } from '@amazon-devices/react-navigation/bottom-tabs';
import MaterialCommunityIcons from '@amazon-devices/react-native-vector-icons/MaterialCommunityIcons';
const Tab = createBottomTabNavigator();
function MyTabs() {
return (
<Tab.Navigator
initialRouteName="Feed"
screenOptions={{
activeTintColor: '#e91e63',
}}
>
<Tab.Screen
name="Feed"
component={Feed}
options={{
tabBarLabel: 'Home',
tabBarIcon: ({ color, size }) => (
<MaterialCommunityIcons name="home" color={color} size={size} />
),
}}
/>
<Tab.Screen
name="Notifications"
component={Notifications}
options={{
tabBarLabel: 'Updates',
tabBarIcon: ({ color, size }) => (
<MaterialCommunityIcons name="bell" color={color} size={size} />
),
tabBarBadge: 3,
}}
/>
<Tab.Screen
name="Profile"
component={Profile}
options={{
tabBarLabel: 'Profile',
tabBarIcon: ({ color, size }) => (
<MaterialCommunityIcons name="account" color={color} size={size} />
),
}}
/>
</Tab.Navigator>
);
}
API支持
Icon组件
您可以使用库自带的图标之一(例如,下面的示例使用FontAwesome.js中的图标),也可以创建自己的自定义字体。
import Icon from '@amazon-devices/react-native-vector-icons/FontAwesome';
const myIcon = <Icon name="rocket" size={30} color="#900" />;
属性
任何Text属性以及以下属性:
| 属性 | 描述 | 默认值 |
|---|---|---|
size |
图标的大小,也可以在样式对象中作为fontSize传递。 |
12 |
name |
要显示什么图标,请参阅Icon Explorer应用或上面的链接之一。 | (无) |
color |
图标的颜色 | (继承) |
静态方法
| 属性 | 描述 |
|---|---|
getFontFamily |
返回当前用于以文本形式检索图标的字体系列。用法:const fontFamily = Icon.getFontFamily() |
getImageSource |
返回一个承诺,该承诺解析为图标的位图版本的源,以供Image组件等使用。用法:const source = await Icon.getImageSource(name, size, color) |
getImageSourceSync |
与getImageSource相同,不过为同步进行。用法:const source = Icon.getImageSourceSync(name, size, color) |
getRawGlyphMap |
返回图标集的原始字形映射。用法:const glyphMap = Icon.getRawGlyphMap() |
hasIcon |
检查该名称在当前图标集中是否有效。用法:const isNameValid = Icon.hasIcon(name) |
样式
由于Icon基于Text组件构建,因此大多数样式属性将按预期运行,您可能会发现尝试使用这些属性很有用:
backgroundColorborderWidthborderColorborderRadiuspaddingmargincolorfontSize
通过组合其中一些您可以创建如下所示的内容:

Icon.Button 组件
一个方便的组件,用于创建左侧带有图标的按钮。
import Icon from '@amazon-devices/react-native-vector-icons/FontAwesome';
const myButton = (
<Icon.Button
name="facebook"
backgroundColor="#3b5998"
onPress={this.loginWithFacebook}
>
Login with Facebook
</Icon.Button>
);
const customTextButton = (
<Icon.Button name="facebook" backgroundColor="#3b5998">
<Text style={{ fontFamily: 'Arial', fontSize: 15 }}>
Login with Facebook
</Text>
</Icon.Button>
);

属性
除以下属性之外的任何Text、TouchableHighlight或TouchableWithoutFeedback属性:
| 属性 | 描述 | 默认值 |
|---|---|---|
color |
文本和图标颜色,如果您需要不同的颜色,可使用iconStyle或嵌套Text组件。 |
white |
size |
图标大小。 | 20 |
iconStyle |
样式仅适用于图标,适合设置边距或不同的颜色。注意:对边距使用iconStyle,否则会出现不稳定的行为。 |
{marginRight: 10} |
backgroundColor |
按钮的背景颜色。 | #007AFF |
borderRadius |
按钮的边框半径,设置为0可将其禁用。 |
5 |
onPress |
按下按钮时调用的函数。 | (无) |
用作PNG图像/源对象
这是将此项插入依赖位图图像而不是可缩放矢量图标的其他组件的便捷方法。采用上述参数name、size和color。
Icon.getImageSource('user', 20, 'red').then(source =>
this.setState({ userIcon: source })
);
或者,您可以使用同步方法Icon.getImageSourceSync来避免出现故障。请记住,此方法会产生阻塞并可能导致性能损失。但是,后续调用将使用缓存。
多样式字体
如今的某些字体使用多种样式,例如该库支持样式FontAwesome 5。其用法与标准Icon组件几乎相同:
import Icon from '@amazon-devices/react-native-vector-icons/FontAwesome5';
const myIcon1 = <Icon name="comments" size={30} color="#900" />; // 默认为常规
const myIcon2 = <Icon name="comments" size={30} color="#900" solid />;
const myIcon3 = <Icon name="comments" size={30} color="#900" light />; // 仅在FA5 Pro中
静态方法
多样式字体支持Icon中的所有静态方法。
| 属性 | 描述 |
|---|---|
getFontFamily |
返回当前用于以文本形式检索图标的字体系列。用法:const fontFamily = Icon.getFontFamily(style) |
getImageSource |
返回一个承诺,该承诺解析为图标的位图版本的源,以供Image组件等使用。用法:const source = await Icon.getImageSource(name, size, color) |
getImageSourceSync |
与getImageSource相同,不过为同步进行。用法:const source = Icon.getImageSourceSync(name, size, color) |
getRawGlyphMap |
返回图标集的原始字形映射。用法:const glyphMap = Icon.getRawGlyphMap(style) |
hasIcon |
检查该名称在当前图标集中是否有效。用法:const isNameValid = Icon.hasIcon(name, style) |
getStyledIconSet |
使用此项来获取单一样式的Icon组件。用法:const StyledIcon = Icon.getStyledIconSet(style) |
如果没有传递任何样式参数(或者它无效),则这些方法将默认设置为预定义的回退。
组件
支持Icon.Button,用法和Icon一样:
import Icon from '@amazon-devices/react-native-vector-icons/FontAwesome5';
const myButton = (
<Icon.Button name="facebook" onPress={this.loginWithFacebook} solid>
Login with Facebook
</Icon.Button>
);
自定义字体
createIconSet(glyphMap, fontFamily[, fontFile])
根据glyphMap返回您自己的自定义字体,其中键是图标名称,值是UTF-8字符或其字符代码。fontFamily是字体的名称,而非文件名。在Font Book应用或类似应用中打开字体以了解名称。
import { createIconSet } from '@amazon-devices/react-native-vector-icons';
const glyphMap = { 'icon-name': 1234, test: '∆' };
const Icon = createIconSet(glyphMap, 'FontName', 'font-name.ttf');
createIconSetFromFontello(config[, fontFamily[, fontFile]])
这是基于fontello配置文件创建自定义字体的便捷方法。别忘了如上所述导入字体,然后将config.json拖放到项目中便利的位置。
import { createIconSetFromFontello } from '@amazon-devices/react-native-vector-icons';
import fontelloConfig from './config.json';
const Icon = createIconSetFromFontello(fontelloConfig);
createIconSetFromIcoMoon(config[, fontFamily[, fontFile]])
import { createIconSetFromIcoMoon } from '@amazon-devices/react-native-vector-icons';
import icoMoonConfig from './selection.json';
const Icon = createIconSetFromIcoMoon(
icoMoonConfig,
'LineAwesome',
'line-awesome.ttf'
);
确保您使用的是IcoMoon中的Download(下载)选项,并使用您下载的.zip中包含的.json文件。您还需要按照上述说明将.ttf字体文件导入您的项目中。
createMultiStyleIconSet(styles [, options])
import { createMultiStyleIconSet } from '@amazon-devices/react-native-vector-icons';
/*
* 这只是示例代码,您可以自由地
* 根据自己的喜好设计字形映射和样式
*/
import glyphmap from './glyphmap.json';
/*
* glyphmap = {
* "style1": [
* "hello",
* "world"
* ],
* "style2": [
* "foo",
* "bar"
* ]
* }
*/
const glyphKeys = Object.keys(glyphmap); /* ["style1", "style2"] */
const options = {
defaultStyle: 'style1',
glyphValidator: (name, style) => glyphKeys.indexOf(name) !== -1,
fallbackFamily: (name) => {
for (let i = 0; i < glyphKeys.length; i++) {
const style = glyphKeys[i];
if (glyphmap[style].indexOf(name) !== -1) {
return style;
}
}
/* 始终返回一些系列 */
return glyphKeys[0];
}
};
/*
* 样式对象由键(将在以后
* 用作样式)和对象(将用作
* 字体的样式对象)组成。样式
* 应当对每种字体具有独特的特征,
* 以便确保选择正确的
* 字体。自从版本5.7.0之后,FontAwesome 5
* 使用字体粗细,以便于区分样式,
* 但是可以使用其他属性(如fontFamily)。
* 它只是一个标准RN样式对象。
*/
const styles = {
style1: {
fontWeight: '700'
},
style2: {
fontWeight: '100'
}
};
const Icon = createMultiStyleIconSet(styles, options);
/* 使用默认样式 (style1) */
<Icon name={'hello'} />
<Icon name={'world'} style1 />
/* 默认样式为style1,但这样将回退到style2 */
<Icon name={'foo'} />
/* 这样也会回退到style2* /
<Icon name={'foo'} style1 />
/* 常规使用style2 */
<Icon name={'bar'} style2 />
| 选项 | 描述 | default |
|---|---|---|
| defaultStyle | 在呈现期间未提供样式时使用的样式的名称。 | Object.keys(styles)[0] |
| fallbackFamily | 用于在字形不可用时选择系列的函数。该函数应接受将字形的name作为参数。返回系列的名称 |
(name) => Object.keys(styles)[0] |
| glyphValidator | 用于验证字形是否可用于所选样式的函数。它有name和style作为参数,并采用该顺序。如果字形有效,则返回true;如果无效,则返回false。 |
(name, style) => true |
动画
React Native自带了一个名为Animated的动画库。要将其与图标一起使用,只需使用以下行创建动画组件即可:const AnimatedIcon = Animated.createAnimatedComponent(Icon)
支持的版本
| 程序包名称 | 亚马逊NPM库版本 | Vega OS内部版本号 | Vega SDK版本 | 发行说明 |
|---|---|---|---|---|
@amazon-devices/react-native-vector-icons |
2.0.1+9.2.0 | OS 1.1 (201010438050) |
0.20 |
Last updated: 2025年9月30日

