Android Watch 中磁贴中的列布局

问题描述 投票:0回答:1

我终于让我的图块适用于我的 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 这样的东西,但我不想要那种样式,只是一些文本和一个按钮。接下来我可以尝试什么?

android android-jetpack-compose wear-os
1个回答
2
投票

好吧,我想通了,这和设置展开的宽度和高度有关。无论出于何种原因,在我删除这两件事后,一切都运行良好。所以,以防万一其他人遇到这个问题,这是解决方案......

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()
© www.soinside.com 2019 - 2024. All rights reserved.