android 使用D-PAD编辑电视滚动

llycmphe  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(216)

我有这个密码

  1. LazyVerticalStaggeredGrid(
  2. columns = StaggeredGridCells.Fixed(2),
  3. modifier = modifier.fillMaxSize(),
  4. contentPadding = PaddingValues(
  5. top = 16.dp,
  6. end = 12.dp,
  7. bottom = 16.dp,
  8. ),
  9. horizontalArrangement = Arrangement.spacedBy(16.dp),
  10. verticalItemSpacing = 16.dp,
  11. userScrollEnabled = true,
  12. ) {
  13. item {
  14. data.moreInformationText?.let { morInformationText ->
  15. Text(
  16. text = morInformationText,
  17. style = MaterialTheme.typography.bodyMedium.copy(
  18. color = Color(context.partnerTheme.themePrimaryTint0),
  19. ),
  20. )
  21. }
  22. }

字符串
问题是,滚动与鼠标是工作,但因为这是一个电视滚动与D-垫不工作。
morinformationText真的很长,所以我们需要滚动它。
我试着用一个简单的

  1. Column {
  2. Text(
  3. text = data.moreInformationText!!,
  4. modifier = Modifier.verticalScroll(rememberScrollState())
  5. )
  6. }


没有任何网格,但仍然没有工作。

34gzjxbg

34gzjxbg1#

在电视上,用户主要使用D-PAD进行交互。使用D-PAD,您可以将焦点从一个项目移动到另一个项目。因为您的文本不可聚焦,D-PAD无法将焦点移动到任何地方,因此没有滚动。您可能希望在屏幕上添加一些可聚焦的项目,如按钮,卡片等。顺便说一下,在电视上显示很长的文字不是一个好的用户体验。你应该寻找一些替代的设计。
如果您仍然希望有较长的文本块,您可以选择执行以下操作:
1.将文本分解为更小的块,并将每个块作为单独的可聚焦文本组件。将其 Package 在可滚动容器中。

  1. LazyColumn {
  2. item {
  3. Text("Chunk 1", Modifider.focusable())
  4. }
  5. item {
  6. Text("Chunk 2", Modifider.focusable())
  7. }
  8. ...
  9. }

字符串
1.使用onKeyEvent修饰符来监听长文本块上的按键事件,并使用该修饰符以编程方式滚动容器,如下所示。

  1. @OptIn(ExperimentalTvMaterial3Api::class)
  2. @Composable
  3. fun App() {
  4. val someHugeText = (1..10000).joinToString(" ")
  5. val scrollAmount = 100f
  6. val scrollState = rememberScrollState()
  7. val cs = rememberCoroutineScope()
  8. fun scroll(reverse: Boolean = false) {
  9. cs.launch {
  10. scrollState.scrollBy(if (reverse) -scrollAmount else scrollAmount)
  11. }
  12. }
  13. Box(
  14. modifier = Modifier
  15. .fillMaxSize()
  16. .verticalScroll(scrollState)
  17. .onKeyEvent {
  18. if (it.nativeKeyEvent.action == ACTION_DOWN) {
  19. return@onKeyEvent KeyEventPropagation.ContinuePropagation
  20. }
  21. if (it.nativeKeyEvent.keyCode == KEYCODE_DPAD_DOWN) {
  22. scroll(false)
  23. return@onKeyEvent KeyEventPropagation.StopPropagation
  24. }
  25. if (it.nativeKeyEvent.keyCode == KEYCODE_DPAD_UP) {
  26. scroll(true)
  27. return@onKeyEvent KeyEventPropagation.StopPropagation
  28. }
  29. return@onKeyEvent KeyEventPropagation.ContinuePropagation
  30. }
  31. .background(Color.Yellow)
  32. .clickable {
  33. println("Pikachu: scrollState value=${scrollState.value} maxValue=${scrollState.maxValue}")
  34. }
  35. ,
  36. ) {
  37. Text(text = someHugeText)
  38. }
  39. }
  40. internal object KeyEventPropagation {
  41. const val StopPropagation = true
  42. const val ContinuePropagation = false
  43. }

展开查看全部

相关问题