Android Jetpack合成图标不包含某些材质图标

plupiseo  于 2023-01-28  发布在  Android
关注(0)|答案(2)|浏览(185)

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
}

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

i5desfxk

i5desfxk1#

有一个单独的依赖项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的aar为18MB,有note on maven repository建议不要直接使用:

此模块包含所有材料图标。它是一个非常大的依赖项,不应直接包含。
考虑到大多数Android项目都支持针对发布版本的代码缩减,如此大的依赖不会影响发布版本的大小,但会影响调试版本和设备上传时间,尽管我不确定影响是否显著。实际上,许多compose samples都使用这种依赖。
如果只需要几个额外的图标,并且您决定不使用material-icons-extended工件,则可以使用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"
    )
}
t9eec4r0

t9eec4r02#

我将在前面的注解中添加一点,即您不仅可以使用painterResource,还可以使用ImageVector。这样,您就可以在可组合函数中使用相同的类型参数。ImageBitmap vs ImageVector

val imageVector = ImageVector.vectorResource(id = R.drawable.baseline_shopping_cart_24)

相关问题