Android Jetpack Compose Icons 不包含某些素材图标

Posted

技术标签:

【中文标题】Android Jetpack Compose Icons 不包含某些素材图标【英文标题】:Android Jetpack Compose Icons doesn't contain some of the material icons 【发布时间】:2021-04-16 07:39:39 【问题描述】:

androidx.compose.material.icons.Icons 中有许多常用的material icons,但有些缺失。举个例子,没有print icon。

...

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

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

【问题讨论】:

【参考方案1】:

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

dependencies 
  ...
  implementation "androidx.compose.material:material-icons-extended:$compose_version"

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

...

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

关于工件大小的说明: 由于工件包含多个主题的所有材质图标,因此它是一个相当大的依赖项,截至1.0.0-alpha10 为 18MB aar。有note on maven repository建议不要直接使用:

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

考虑到大多数 Android 项目启用 code shrinking 进行发布构建,如此大的依赖不会影响发布构建大小,但它会影响您的调试构建和设备上传时间,尽管我不确定影响会很重要。实际上很多compose samples 都使用了这个依赖。

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

...

import com.mycompany.myproject.R
import androidx.compose.ui.res.painterResource

@Composable
fun ResourceIconExample() 
    Icon(
        painter = painterResource(R.drawable.ic_baseline_print_24),
        contentDescription = "print"
    )

【讨论】:

Google 似乎不建议包含repository 中所述的整个扩展图标集。你知道我们是否只能添加那些需要的额外图标吗? @JesseHill 感谢您的观察。我已经用一些附加信息更新了答案,包括不使用material-icons-extended 的图标示例,希望对您有所帮助! 请将此答案标记为可接受的答案 即使有扩展依赖,我仍然看不到 QuestionMark (fonts.google.com/…)...

以上是关于Android Jetpack Compose Icons 不包含某些素材图标的主要内容,如果未能解决你的问题,请参考以下文章

Android Jetpack Compose学习—— Jetpack compose基础布局

Android Jetpack Compose学习—— Jetpack compose入门

Android Jetpack Compose学习—— Jetpack compose入门

Jetpack Compose 到底适合什么架构?

Android Kotlin Jetpack Compose 使用

Jetpack Compose 和 Compose Navigation 如何处理 Android 活动?