3x4 Android _best_ | Keyboard

| Row | Col 0 | Col 1 | Col 2 | |-----|-------|-------|-------| | 0 | 1 | 2 | 3 | | 1 | 4 | 5 | 6 | | 2 | 7 | 8 | 9 | | 3 | * | 0 | # |

var lastKey = "" var lastTapTime = 0L var tapCount = 0 val keyMap = mapOf( "2" to listOf('a','b','c'), "3" to listOf('d','e','f'), ... ) fun onKeyPress(key: String) if (key == lastKey && System.currentTimeMillis() - lastTapTime < 800) tapCount++ else tapCount = 1 keyboard 3x4 android

lastKey = key lastTapTime = System.currentTimeMillis() val letterIndex = (tapCount - 1) % keyMap[key]?.size ?: 0 // replace last character with current selection | Row | Col 0 | Col 1

Would you like a working code sample (XML or Compose) for a specific use case (dialer / PIN / T9 text)? "3" to listOf('d'

@Composable fun Grid3x4Keyboard(onKey: (String) -> Unit) val keys = listOf( listOf("1", "2", "3"), listOf("4", "5", "6"), listOf("7", "8", "9"), listOf("*", "0", "#") ) Column keys.forEach row -> Row row.forEach key -> Button(onClick = onKey(key) ) Text(key)