App Inventor 2 图标字体:2000 多个 Material 图标,文字与图标混排

« 返回组件参考

图标字体

不用找图片、不用上传字体:标签、按钮等组件的字体属性选「Material 图标字体」,文字里写图标的英文名(如 home、shopping_cart),就显示成对应的图标。内置 2000 多个 Google Material 图标。

图标本质是文字,所以:

  • 颜色用组件的「文本颜色」,大小用「字体大小」,放大不模糊;
  • 能和中文混排:send 发送 显示成「图标 + 发送」,一个按钮就能做出带图标的按钮;
  • 在代码块里改文字就能换图标,不用准备多张图片;
  • 安卓与鸿蒙都支持,伴侣里直接预览;编译时只有用到图标字体的应用才打包这个字体(约 350KB)。

Material 图标示例

哪些组件能用

组件 能否和文字混排 说明
标签 能 最常用:标题、状态提示、图标 + 说明
按钮、列表选择器、日期选择框、时间选择框、图像选择器、联系人选择框、电话号选择框 等按钮类组件 能 按钮上的文字
复选框、开关 能 选项文字前加图标
列表显示框 能 「字体」管主文字、「列表项字体」管副文字,可以只给主文字用图标
文本输入框、密码输入框、邮箱地址选择框 不能 输入框会整段套用图标字体,用户输入的内容无法正常显示,不要给输入框选图标字体

三步用上

  1. 拖一个标签(或按钮)到屏幕;
  2. 点它的字体属性,选「Material 图标字体」,确定后自动弹出图标选择器;
  3. 在选择器里按分类找,或直接搜中文、英文(如 购物车、返回、home),单击选中、双击使用。

选好后组件的文字就是图标的英文名(如 shopping_cart),设计器里立刻显示成图标。想加说明文字,在后面接着写:shopping_cart 购物车。之后要换图标,再点字体属性,按「选择图标…」。

跑起来看:标签显示一个购物车图标,后面跟着「购物车」三个字;把「文本颜色」改成红色、「字体大小」改成 30,图标和文字一起变红变大。

颜色、大小与代码块里换图标

  • 图标颜色 = 文本颜色,图标大小 = 字体大小,和文字一样设置;
  • 换图标就是改文字。例如收藏按钮在空心和实心之间切换(按钮字体选图标字体,文字初始为 favorite_border):
global 已收藏 = false

when 按钮_收藏.Click() {
  已收藏 = not 已收藏
  if 已收藏 {
    按钮_收藏.Text = "favorite"
  } else {
    按钮_收藏.Text = "favorite_border"
  }
}

跑起来看:点一下变成实心的心,再点一下变回空心。

文本 + 图标混合

混排规则

字体选了图标字体后,组件的文字仍用系统字体显示,只把其中正好是图标名的整词换成图标。「词」指连续的英文字母、数字和下划线;中文、空格、标点都会把词隔开。

文字 显示 原因
send 发送 图标 + 发送 send 是图标名
home首页 图标 + 首页 中文不是英文字母,home 仍是一个整词
shopping_cart×2 图标 + ×2 下划线算在词里,× 把词断开
Chrome homes Chrome homes 词的一部分(Chrome 里的 home)、多一个字母的 homes 都不是图标名
Home Star List Home Star List 图标名都是小写,首字母大写就不转换
shoping_cart shoping_cart 名字拼错,原样显示英文
list、code、start 图标 小写的英文单词本身就是图标名,会变图标
123、360、4k、5g 图标 这些数字和数字字母组合也是图标名

最后两行是混排最容易踩的坑,下面的场景三、场景六专门讲怎么避开。

场景一:带文字的图标按钮

顶栏的「返回」按钮、聊天里的「发送」按钮,最常见的写法是一个按钮里写 图标名 + 空格 + 中文:

  • 返回按钮:字体选图标字体,文字 arrow_back 返回;
  • 标题:标签字体选图标字体,文字 settings 设置;
  • 发送按钮:文字 send 发送。

不需要任何代码块。图标和中文用同一个文本颜色、字体大小;想让图标大、文字小,就拆成两个组件放进水平布局。

场景二:状态提示随状态换图标

网络、蓝牙、电量这类状态,图标和文字一起换,一眼就能看懂。标签字体选图标字体:

global 已连接 = true

when 按钮_切换网络.Click() {
  已连接 = not 已连接
  if 已连接 {
    标签_网络.Text = "wifi 已连接"
    标签_网络.TextColor = &HFF2E7D32
  } else {
    标签_网络.Text = "wifi_off 未连接"
    标签_网络.TextColor = &HFFBF360C
  }
}

跑起来看:标签在「绿色 Wi-Fi 图标 + 已连接」和「红色断开图标 + 未连接」之间切换。

常用的状态图标:wifi / wifi_off、bluetooth / bluetooth_disabled、battery_full / battery_alert、lock / lock_open、visibility / visibility_off、check_circle / error。

场景三:图标 + 动态数字(点赞数、未读数)

数字会变的场景,不要把数字和图标写进同一个用了图标字体的组件:点赞数恰好变成 123 或 360 时,这个数字本身就是图标名,会突然显示成一个图标。

正确做法是图标一个组件、数字一个组件,放进同一个水平布局:

  • 按钮_点赞:字体选图标字体,文字 favorite_border,文本颜色红色;
  • 标签_点赞数:字体保持默认,文字 122。
global 已点赞 = false
global 点赞数 = 122

when 按钮_点赞.Click() {
  已点赞 = not 已点赞
  if 已点赞 {
    按钮_点赞.Text = "favorite"
    点赞数 = 点赞数 + 1
  } else {
    按钮_点赞.Text = "favorite_border"
    点赞数 = 点赞数 - 1
  }
  标签_点赞数.Text = 点赞数
}

跑起来看:点一下,心变实心,数字从 122 变成 123,正常显示成数字;再点一下回到空心和 122。如果把数字也拼进按钮文字(favorite 123),123 会变成一个图标。

场景四:复选框、开关前加图标

复选框和开关的文字同样可以混排。深色模式开关:复选框字体选图标字体,文字 dark_mode 深色模式:

when 复选框_深色.Changed() {
  if 复选框_深色.Checked {
    复选框_深色.Text = "light_mode 浅色模式"
    Screen1.BackgroundColor = &HFF263238
  } else {
    复选框_深色.Text = "dark_mode 深色模式"
    Screen1.BackgroundColor = &HFFF6F8FC
  }
}

跑起来看:勾选后背景变深,复选框变成「太阳图标 + 浅色模式」;取消勾选恢复。

场景五:列表显示框做图标菜单

列表显示框的字体选图标字体,元素里每项写 图标名 + 中文,就是一个带图标的菜单。「列表项字体」(副文字的字体)可以保持默认,副文字里的英文和数字就不会被误转。

设计器里把「元素字串」设为 home 首页,shopping_cart 购物车,person 我的,help 帮助,再放一个字体选了图标字体的标签:

when 列表显示框_菜单.AfterPicking() {
  标签_状态.Text = join("check_circle 你点了:", 列表显示框_菜单.Selection)
}

跑起来看:列表四行,每行一个图标 + 中文;点「购物车」,标签显示「对勾图标 你点了:购物车图标 购物车」——选中项本身带着图标名,交给同样用图标字体的标签就原样显示成图标。

场景六:英文和图标写在一起

图标字体的组件里也要写英文时,记住规则表最后两行:小写英文单词如果本身是图标名(list、code、image、start、map、help、home、star……),会被换成图标。

  • 写英文时首字母大写:Home、Star、List 不会转换;
  • 或者英文放在另一个默认字体的组件里;
  • 用户输入的内容、从网络取回的文字也一样:先显示到默认字体的组件,别直接塞进用了图标字体的组件。

完整 .aia 案例

下载 .aia 源码

一个屏幕把上面的场景放在一起:顶栏「返回 + 设置」、网络状态切换、点赞按钮 + 独立的点赞数、深色模式复选框、图标菜单列表,以及一行首字母大写的英文。导入方法:项目 → 导入项目(.aia)→ 选择下载的 .aia 文件。

操作 预期结果
打开应用 顶栏「返回图标 返回」「设置图标 设置」;网络标签「Wi-Fi 图标 已连接」;列表每行图标 + 中文;最后一行 Home Star List … 保持英文
点「切换网络状态」 网络标签变成红色的「断开图标 未连接」,再点变回
连续点心形按钮 心在空心、实心之间切换,右边数字 122 → 123 → 122,始终显示成数字
勾选深色模式 背景变深,复选框变成「太阳图标 浅色模式」
点列表里的一项 底部标签显示「对勾图标 你点了:」加该项的图标和文字

验证范围:最终归档通过正式编辑器首次载入与保存重开(0 错误)、后台导入、安卓安装包编译、鸿蒙 HAP 编译;本页混排规则表与各场景里「哪些词会变图标」逐条在鸿蒙图标转换上实测通过。图标的实际显示效果尚未在真机上逐一截图核对。

常见问题

现象 原因与处理
写了图标名却显示英文 名字拼错、首字母大写,或组件的「字体」没选图标字体;在图标选择器里搜一下正确的英文名
好好的数字变成了一个图标 123、360、4k、5g 这类是图标名;动态数字放到默认字体的另一个组件(场景三)
英文单词变成了图标 小写单词本身是图标名;首字母大写,或放到默认字体的组件(场景六)
图标和文字想要不同颜色、不同大小 同一个组件只能一种颜色和大小;拆成两个组件放进水平布局
文本输入框里显示乱了 输入框不支持混排,会整段套用图标字体;输入框保持默认字体
用「组件美化」的「设置字体」设图标字体,显示不对 「设置字体」是整段换字体,不做混排,两端效果也不一致;图标字体只用组件的「字体」属性选
安卓 6.0 以下的旧手机上英文显示异常 旧系统无法判断字体里有没有某个图标,所有小写英文词都按图标处理;这类手机上图标组件里只写图标名和中文

平台说明

  • 安卓与鸿蒙规则一致:整词、小写、正好是图标名才转换,其余文字用系统字体正常显示;
  • 字体随应用打包,伴侣自带,不需要上传任何素材;
  • 全部图标名可在图标选择器里按中文搜,也可以到 Google Fonts 图标库 查英文名(用 Material Icons 这一套)。

以前的做法:自己上传字体

内置之前,需要下载 MaterialIcons-Regular.ttf 上传到素材,再把组件字体设成它,详见《使用 Material 图标字体》。已经这样做的项目照常可用;新项目直接用内置的图标字体即可。

文档反馈