我终于让我的图块适用于我的 Android Watch 项目,但我无法让布局正常工作。我试图拥有文本(将根据状态和新鲜度计时器动态更改)和按钮。我本以为这将是一件非常容易做的事情,但由于某种原因,每当我将内容放入列或其他任何内容时,预览中都不会显示任何内容。我不明白出了什么问题......
class TimerTileRenderer(context: Context): SingleTileLayoutRenderer<TimerTileState, Boolean>(context) {
//... code for produce resources for images and stuff omitted.
override fun renderTile(
state: TimerTileState,
deviceParameters: DeviceParametersBuilders.DeviceParameters
): LayoutElementBuilders.LayoutElement {
return timerTileLayout(
context,
deviceParameters,
state,
emptyClick
)
}
}
private fun timerTileLayout(
context: Context,
deviceParameters: DeviceParametersBuilders.DeviceParameters,
state: TimerTileState,
buttonClickable: ModifiersBuilders.Clickable
) = PrimaryLayout.Builder(deviceParameters)
.setContent(
Column.Builder()
.setHeight(expand())
.setWidth(expand())
.addContent(
Text.Builder().setText("Just a TEST").build()
)
.build()
)
.build()
使用上面的代码我只看到黑屏。我在 setContent 调用之后添加了一个 .setPrimaryChipContent 调用,只是为了确保它正常工作,并且我确实在屏幕底部看到了芯片,但没有文本。我什至尝试手动将文本的 fontStyle 设置为白色,但仍然没有文本。
但是,如果我删除该列并仅在其中使用文本,我会看到文本...
private fun timerTileLayout(
context: Context,
deviceParameters: DeviceParameters,
state: TimerTileState,
buttonClickable: ModifiersBuilders.Clickable
) = PrimaryLayout.Builder(deviceParameters)
.setContent(
Text.Builder().setText("Just a TEST").build()
)
.setPrimaryChipContent(...)
.build()
使用该代码我的文本就会显示出来。我的最终目标是有文本,然后在其下面有一个按钮,但每次我尝试使用列时,屏幕上都不会显示任何内容,只是黑屏。是否有某种特殊的方法来使用 Column、Box 或其他东西来在屏幕上获取多个元素?
我知道有像 MultiButtonLayout 这样的东西,但我不想要那种样式,只是一些文本和一个按钮。接下来我可以尝试什么?
好吧,我想通了,这和设置展开的宽度和高度有关。无论出于何种原因,在我删除这两件事后,一切都运行良好。所以,以防万一其他人遇到这个问题,这是解决方案......
private fun timerTileLayout(
context: Context,
deviceParameters: DeviceParametersBuilders.DeviceParameters,
state: TimerTileState,
buttonClickable: ModifiersBuilders.Clickable
) = PrimaryLayout.Builder(deviceParameters)
.setContent(
Column.Builder()
.addContent(
Text.Builder().setText("Just a TEST").build()
)
.build()
)
.build()