Jetpack Compose中的Material图标大小调整?

33

Jetpack Compose 提供了一个不错的 Icon() 对象来显示接受向量资源的图标。通常,您可以通过修饰符设置大小:

Icon(Icons.Filled.PersonPin, Modifier.preferredSize(64.dp)) 

我的问题是,当我使用提供的系统矢量资源(例如Icons.Filled.或Icons.Default.等)时,似乎无法影响显示的图标大小。当我使用自己的资源时,一切正常。使用系统资源时,修改器只增加了包围“框”的UI占用空间,而图标在其中仍然很小:

来自IDE预览的示例

使用“then”应用修饰符会导致相同的行为:

    Icon(Icons.Filled.PersonPin,Modifier.then(Modifier.preferredSize(128.dp)))

本地图标是否有什么问题?我以为作为矢量资源,它们应该也能够调整大小。

5个回答

33

对于 1.0.x 版本,只需使用 Modifier.size(xx.dp)

Icon(Icons.Filled.Person,
    "contentDescription",
    modifier = Modifier.size(128.dp))

13
接受的答案在1.0.0-alpha11版本中已不再适用。是相关的错误报告。根据错误报告的评论,从alpha12版本开始,新的做法如下:
Icon(Icons.Filled.Person, modifier = Modifier.size(128.dp)) 

谢谢。这应该是被接受的答案。 - Duncan Lukkenaer

12

Material图标内部大小为24.dp

// All Material icons (currently) are 24dp by 24dp, with a viewport size of 24 by 24.
@PublishedApi
internal const val MaterialIconDimension = 24f

使用大小修饰符并不能起作用,因此我们可以通过复制图标并更改默认高度和宽度来更改图标。

Icon(Icons.Filled.Person.copy(defaultHeight = 128.dp, defaultWidth = 128.dp))

注意:这并不是官方推荐设置图标大小的方法, 只是一种改变图标大小的hack方法。


非常好,谢谢!这正是我在寻找的。感谢您的解释 - 我看到了大小,但没有想到它们是固定的,也不知道.copy()! - Andy
4
1.0.0-alpha11 中此方法已不再适用(请参阅错误报告)。根据错误报告的评论,从 alpha12 开始实现此操作的新方法应为 Icon(Icons.Filled.Person, modifier = Modifier.size(128.dp)) - noe

7
我使用的方法是使用 Modifier.fillMaxSize(...)),例如。
Icon(Icons.Filled.Person, contentDescription = "Person", modifier = Modifier.fillMaxSize(0.5F))

0.5

Icon(Icons.Filled.Person, contentDescription = "Person", modifier = Modifier.fillMaxSize(0.75F))

0.75

Icon(Icons.Filled.Person, contentDescription = "Person", modifier = Modifier.fillMaxSize(1.0F))

1.0


1
为了让上面的答案更易理解,定义一些扩展函数:
fun VectorAsset.resize(size: Int) = this.resize(size.dp)
fun VectorAsset.resize(size: Dp) = this.resize(size, size)
fun VectorAsset.resize(width: Int, height: Int) = this.resize(width.dp, height.dp)
fun VectorAsset.resize(width: Dp, height: Dp) =
  this.copy(defaultWidth = width, defaultHeight = height)

对于较新的版本,请使用ImageVector替换VectorAsset。 - 2jan222
这在1.0.0-alpha11中不再起作用(请参见错误报告)。根据错误报告的评论,从alpha12开始执行此操作的新方法将是Icon(Icons.Filled.Person, modifier = Modifier.size(128.dp))。 - noe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接