我想以这样一种方式应用修饰符,即如果提供了宽度,它应该使用提供的宽度,否则使用可用的最大宽度。
我正在应用修改器在下面的时尚,但结果并不像预期的那样。视图宽度是去乱糟糟的。请求指导这里。
val myModifier = Modifier.padding(
start = 4.dp, end = 4.dp, top = 8.dp, bottom = 8.dp
)
if (viewWidth == null)
myModifier.then(Modifier.fillParentMaxWidth(1f))
else
myModifier.then(Modifier.width(viewWidth))
myModifier.then(
Modifier.height(viewHeight ?: 100.dp)
.clickable(onClick = { listener.onItemClick(item) })
)
字符串
7条答案
按热度按时间xpcnnkqh1#
您可以通过扩展函数创建条件修改器:
字符串
这让你可以像这样在
conditional
块中链接一个修改器:型
它只会在条件为
true
时应用条件修饰符。如果你需要为
false
情况添加一个修饰符,只需链接第二个否定条件。型
如果你觉得自己很棒,你还可以在扩展函数中添加一个可选的否定大小写。
型
这将为您的条件为false的情况提供给予一个单独的参数:
型
上一个实现中的大thanks to mtotschnig for pointing out a critical bug!
euoag5mw2#
Modifier
有一个then
函数来连接当前修饰符和另一个修饰符。这个then
函数返回一个你没有使用过的新修饰符。你必须用返回的修饰符重新初始化myModifier
变量。检查下面的代码:
字符串
5lwkijsr3#
您也可以以更紧凑的方式使用
Modifier.then
:字符串
请参阅:https://jetc.dev/slack/2020-12-13-conditional-modifiers.html
ruarlubt4#
以上所有的答案都很好,但我想补充我的一分钱。我发现这个片段更可读和干净。
字符串
new9mtju5#
只是以防万一,如果你需要运行组合
字符串
uttx8gqw6#
我是根据自己基于https://proandroiddev.com/jetpack-compose-tricks-conditionally-applying-modifiers-for-dynamic-uis-e3fe5a119f45的实现给出答案的
这里没有
Modifier
特定的东西,这个思想可以推广到任何类。泛型函数
字符串
用法
型
tkclm6bt7#
找到了另一个我觉得更简洁的方法。假设你想根据一个条件向修饰符添加一个“invoke”,你可以使用-
字符串