如何在字母列上显示放大的首字母
当我将字母字母点击到屏幕的右侧时,是否可以在屏幕中间显示大字母?每次用手指做到这一点时,我都看不到我的手指在敲打?
enum class Items(@StringRes val nameId: Int, val typeId: Int) {
Item1(R.string.apple, R.string.fruit),
Item2(R.string.banana, R.string.fruit),
Item3(R.string.cherry, R.string.fruit),
Item4(R.string.date, R.string.fruit),
Item5(R.string.eggplant, R.string.vegetable),
Item6(R.string.fig, R.string.fruit),
Item7(R.string.guava, R.string.fruit),
Item8(R.string.jackfruit, R.string.fruit),
Item9(R.string.kiwi, R.string.fruit),
Item10(R.string.leek, R.string.vegetable),
Item11(R.string.okra, R.string.vegetable),
Item12(R.string.pumpkin, R.string.fruit),
Item13(R.string.rhubarb, R.string.fruit),
Item14(R.string.spinach, R.string.vegetable),
Item15(R.string.turnip, R.string.vegetable),
Item16(R.string.watermelon, R.string.fruit);
}
val items = remember { arrayOf(
Items.Item1,
Items.Item2,
Items.Item3,
Items.Item4,
Items.Item5,
Items.Item6,
Items.Item7,
Items.Item8,
Items.Item9,
Items.Item10,
Items.Item11,
Items.Item12,
Items.Item13,
Items.Item14,
Items.Item15,
Items.Item16).sortedBy { getString(it.nameId) } }
val headers = remember { items.map { getString(it.nameId).first().uppercase() }.toSet().toList() }
Row {
val listState = rememberLazyListState()
LazyColumn(
state = listState,
modifier = Modifier.weight(1f)
) {
items(items) {
Column() {
Text(
text = stringResource(id = it.nameId)
)
Text(
text = stringResource(id = it.typeId)
)
}
}
}
val offsets = remember { mutableStateMapOf<Int, Float>() }
var selectedHeaderIndex by remember { mutableStateOf(0) }
val scope = rememberCoroutineScope()
fun updateSelectedIndexIfNeeded(offset: Float) {
val index = offsets
.mapValues { abs(it.value - offset) }
.entries
.minByOrNull { it.value }
?.key ?: return
if (selectedHeaderIndex == index) return
selectedHeaderIndex = index
val selectedItemIndex = items.indexOfFirst { getString(it.nameId).first().uppercase() == headers[selectedHeaderIndex] }
scope.launch {
listState.scrollToItem(selectedItemIndex)
}
}
Column(
verticalArrangement = Arrangement.SpaceEvenly,
modifier = Modifier
.fillMaxHeight()
.background(Color.Green)
.pointerInput(Unit) {
detectTapGestures {
updateSelectedIndexIfNeeded(it.y)
}
}
.pointerInput(Unit) {
detectVerticalDragGestures { change, _ ->
updateSelectedIndexIfNeeded(change.position.y)
}
}
) {
headers.forEachIndexed { i, header ->
Text(
header,
modifier = Modifier.onGloballyPositioned {
offsets[i] = it.boundsInParent().center.y
}
)
}
}
}
Is it possible to show a large letter in the middle of the screen when I tap an alphabet letter to right hand side of the screen? Every time I do this with my finger, I cannot see what letter my finger is tapping?
enum class Items(@StringRes val nameId: Int, val typeId: Int) {
Item1(R.string.apple, R.string.fruit),
Item2(R.string.banana, R.string.fruit),
Item3(R.string.cherry, R.string.fruit),
Item4(R.string.date, R.string.fruit),
Item5(R.string.eggplant, R.string.vegetable),
Item6(R.string.fig, R.string.fruit),
Item7(R.string.guava, R.string.fruit),
Item8(R.string.jackfruit, R.string.fruit),
Item9(R.string.kiwi, R.string.fruit),
Item10(R.string.leek, R.string.vegetable),
Item11(R.string.okra, R.string.vegetable),
Item12(R.string.pumpkin, R.string.fruit),
Item13(R.string.rhubarb, R.string.fruit),
Item14(R.string.spinach, R.string.vegetable),
Item15(R.string.turnip, R.string.vegetable),
Item16(R.string.watermelon, R.string.fruit);
}
val items = remember { arrayOf(
Items.Item1,
Items.Item2,
Items.Item3,
Items.Item4,
Items.Item5,
Items.Item6,
Items.Item7,
Items.Item8,
Items.Item9,
Items.Item10,
Items.Item11,
Items.Item12,
Items.Item13,
Items.Item14,
Items.Item15,
Items.Item16).sortedBy { getString(it.nameId) } }
val headers = remember { items.map { getString(it.nameId).first().uppercase() }.toSet().toList() }
Row {
val listState = rememberLazyListState()
LazyColumn(
state = listState,
modifier = Modifier.weight(1f)
) {
items(items) {
Column() {
Text(
text = stringResource(id = it.nameId)
)
Text(
text = stringResource(id = it.typeId)
)
}
}
}
val offsets = remember { mutableStateMapOf<Int, Float>() }
var selectedHeaderIndex by remember { mutableStateOf(0) }
val scope = rememberCoroutineScope()
fun updateSelectedIndexIfNeeded(offset: Float) {
val index = offsets
.mapValues { abs(it.value - offset) }
.entries
.minByOrNull { it.value }
?.key ?: return
if (selectedHeaderIndex == index) return
selectedHeaderIndex = index
val selectedItemIndex = items.indexOfFirst { getString(it.nameId).first().uppercase() == headers[selectedHeaderIndex] }
scope.launch {
listState.scrollToItem(selectedItemIndex)
}
}
Column(
verticalArrangement = Arrangement.SpaceEvenly,
modifier = Modifier
.fillMaxHeight()
.background(Color.Green)
.pointerInput(Unit) {
detectTapGestures {
updateSelectedIndexIfNeeded(it.y)
}
}
.pointerInput(Unit) {
detectVerticalDragGestures { change, _ ->
updateSelectedIndexIfNeeded(change.position.y)
}
}
) {
headers.forEachIndexed { i, header ->
Text(
header,
modifier = Modifier.onGloballyPositioned {
offsets[i] = it.boundsInParent().center.y
}
)
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我建议您每次按项目时都会显示烤面包,只要您可以添加onclicklistener。
例如:
I would recommend displaying a toast everytime you press an item, provided you can add an onclicklistener.
For example: