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

时间:2021-01-11 10:55:32

标签: android android-jetpack android-jetpack-compose

material icons 中有许多经常使用的 androidx.compose.material.icons.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 个答案:

答案 0 :(得分:13)

有一个单独的依赖项 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"
    )
}