Android Jetpack Compose Icons 不包含部分材质图标

Val*_*kov 15 android android-jetpack android-jetpack-compose

androidx.compose.material.icons.Icons 中有许多常用的材质图标,但有些缺失。举个例子,没有打印图标

...

import androidx.compose.material.Icon
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu  // ok
import androidx.compose.material.icons.filled.Print // error, unresolved reference

@Composable
fun IconsExample() {
    Icon(Icons.Filled.Menu, "menu")   // ok
    Icon(Icons.Filled.Print, "print") // error, unresolved reference
}
Run Code Online (Sandbox Code Playgroud)

在应用程序中使用这些缺失图标的最简单方法是什么?

Val*_*kov 26

有一个单独的依赖项material-icons-extended,其中包含完整的材料图标列表,只需将其添加到您的应用程序的build.gradle

dependencies {
  ...
  implementation "androidx.compose.material:material-icons-extended:$compose_version"
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用任何材质图标,例如:

dependencies {
  ...
  implementation "androidx.compose.material:material-icons-extended:$compose_version"
}
Run Code Online (Sandbox Code Playgroud)

关于工件大小的说明:由于工件包含多个主题的所有材质图标,因此它是一个非常大的依赖项,从1.0.0-alpha10. maven repository有个注释建议不要直接使用:

该模块包含所有 Material 图标。它是一个非常大的依赖项,不应直接包含在内。

? 考虑到大多数 Android 项目都为发布版本启用代码收缩,如此大的依赖不会影响发布版本的大小,但会影响您的调试版本和设备上传时间,尽管我不确定影响会很大。实际上,许多撰写示例都使用此依赖项。

如果只需要一些额外的图标并且您决定不使用material-icons-extendedartifact,则可以使用 Android Studio轻松地将这些图标添加到您的项目资源中。您可以像这样使用这样的资源图标:

...

import androidx.compose.material.Icon
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu  // ok
import androidx.compose.material.icons.filled.Print // ok

@Composable
fun IconsExample() {
    Icon(Icons.Filled.Menu, "menu")   // ok
    Icon(Icons.Filled.Print, "print") // ok
}
Run Code Online (Sandbox Code Playgroud)

  • 谷歌似乎建议不要包含[存储库](https://mvnrepository.com/artifact/androidx.compose.material/material-icons-extended)中所述的整套扩展图标。你知道我们是否只能添加那些需要的额外图标吗? (3认同)
  • 例如,即使具有扩展依赖项,我仍然看不到 QuestionMark (https://fonts.google.com/icons?selected=Material%20Icons%20Outlined%3Aquestion_mark%3A)... (3认同)
  • @JesseHill 感谢您的观察。我已经用一些附加信息更新了答案,包括不使用“材料图标扩展”的图标示例,希望它有帮助! (2认同)
  • 很好的答案,谢谢。为了获得几个图标,我制作了一个独立的撰写应用程序,包括“material_icons_extended”,跳转到我想要的图标的定义,并将代码复制到我的项目中。我把它放在我们自己的命名空间中,这样我就可以跟踪使用了哪些内容等。有点麻烦,但开销很小!每个图标只是一个私有和公共财产,仅此而已。 (2认同)