- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Jetpack Compose 中构建一个简单的键盘相当简单明了。
我使用这个构建了一个非常简单的 KeyRow:
key .kt
@Composable
fun Key(modifier: Modifier = Modifier, label: String, onClick: () -> Unit) {
val shape = RoundedCornerShape(4.dp)
//TODO: make clickable outside but don't show ripple
Box(modifier = modifier
.padding(2.dp)
.clip(shape)
.clickable(onClick = onClick)
.background(Color.White)
.padding(vertical = 12.dp, horizontal = 4.dp), contentAlignment = Alignment.Center) {
Text(text = label, fontSize = 20.sp)
}
}
key 行.kt
@Composable
fun KeyRow(keys: List<String>) {
Row(modifier = Modifier.fillMaxWidth().background(color = grey200)) {
keys.forEach {
Key(modifier = Modifier.weight(1f), label = it, onClick = { })
}
}
}
这就是它的样子:
-Keyboard
--KeyRow
---KeyLayout
----Key
----KeyPressedOverlay (only visible when pressed)
我的主要问题是我不知道如何显示 KeyPressedOverlay Composale(大于 Key Composable)
不使父布局变大 .结果,我需要以某种方式溢出父布局。
最佳答案
不确定这是否是最好的方法(可能不是),但我找到了使用 ConstraintLayout
的解决方案...
val keys = listOf("A", "B", "C", "D")
ConstraintLayout(
modifier = Modifier.graphicsLayer(clip = false)
) {
val refs = keys.map { createRef() }
refs.forEachIndexed { index, ref ->
val modifier = when (index) {
0 -> Modifier.constrainAs(ref) {
start.linkTo(parent.start)
}
refs.lastIndex -> Modifier.constrainAs(ref) {
start.linkTo(refs[index - 1].end)
end.linkTo(parent.end)
}
else -> Modifier.constrainAs(ref) {
start.linkTo(refs[index - 1].end)
end.linkTo(refs[index + 1].start)
}
}
val modifierPressed = Modifier.constrainAs(createRef()) {
start.linkTo(ref.start)
end.linkTo(ref.end)
bottom.linkTo(ref.bottom)
}
KeyboardKey(
keyboardKey = keys[index],
modifier = modifier,
modifierPressed = modifierPressed,
pressed = { s -> /* Do something with the key */}
)
}
}
这里的一个重要细节是
graphicLayer(clip = false)
(类似于 View Toolkit 中的
clipChildren
)。然后,我为每个键和按下的键创建一个修饰符。注意到
modifierPressed
与另一个修饰符的中心/底部对齐。
KeyboardKey
如下所述。
@Composable
fun KeyboardKey(
keyboardKey: String,
modifier: Modifier,
modifierPressed: Modifier,
pressed: (String) -> Unit
) {
var isKeyPressed by remember { mutableStateOf(false) }
Text(keyboardKey, Modifier
.then(modifier)
.pointerInput(Unit) {
detectTapGestures(onPress = {
isKeyPressed = true
val success = tryAwaitRelease()
if (success) {
isKeyPressed = false
pressed(keyboardKey)
} else {
isKeyPressed = false
}
})
}
.background(Color.White)
.padding(
start = 12.dp,
end = 12.dp,
top = 16.dp,
bottom = 16.dp
),
color = Color.Black
)
if (isKeyPressed) {
Text(
keyboardKey, Modifier
.then(modifierPressed)
.background(Color.White)
.padding(
start = 16.dp,
end = 16.dp,
top = 16.dp,
bottom = 48.dp
),
color = Color.Black
)
}
}
这是我得到的结果:
关于android - 使用 Jetpack Compose 构建软件键盘 - 使用 Jetpack Compose 的 IME 输入法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65570024/
是否需要实现任何输入法接口(interface)才能使 ime 候选窗口显示在光标位置? Windows 默认 ime 似乎显示在正确的位置,但 google ime 和 RedHat ime 则不然
此问题最初由我在 Microsoft 社区中发布: https://answers.microsoft.com/en-us/windows/forum/windows_10-other_setting
我正在使用 AlertDialog.Builder 创建一个对话框 fragment 。我希望它只有一个 EditText 来获取一些用户文本输入。它工作正常,但 IME 键盘不会在显示对话框后立即弹
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
我想在选择输入法选择器对话框中显示我自己的 IME,例如日语 IME 和中文 IME。我怎样才能做到这一点? 我是 Android 新手。我已经测试了希腊语 IME 和其他 IME。虽然.apk上传成
假设我想使用自定义 Android IME 编写一个字符“暂”。如果我想在按下“G”键后跟“E”键时显示上述字形,我该怎么做(G 本身被分配给另一个代码)。 我知道我可以将许多字符分配给同一个标签,如
http://developer.android.com/guide/topics/text/creating-input-method.html#GeneralDesign阅读: 由于设备上可能安装
在我的游戏代码中,我通过处理 WM_KEYDOWN 消息来处理按键输入。wParam 给了我我需要的键码。 问题出在 IME 上,尤其是 KoreanIME。我得到 WM_IME_COMPOSITIO
我正在尝试为 android ime 选项设置一个监听器,它将 EditText 的值存储在共享首选项中。我已经这样设置了,但是当我按下键盘上的“return”键时,什么也没有发生,它也永远不会进入监
我有一个自定义 View ,我希望用户能够从应用定义的字符集中输入字符。为此,据我了解,我需要编写一个输入法服务。用户不仅需要安装它,还需要在设置 > 语言和键盘中启用 IME,然后选择自定义 IME
我想在用户键入时使用 javascript 将光标移动到另一个文本输入字段。当部首组成时(韩文、日文、中文),它会导致意想不到的行为。 例如如果用户在第一个文本框中键入 나,光标应该移动到第二个。但是
为什么 Windows 微软拼音输入法会自动从中文模式切换到英文模式?如何预防? 最佳答案 Windows 应用程序可以通过编程为自己选择输入语言和 IME 模式,这就是为什么拼音输入法会自动切换到英
为什么 Windows 微软拼音输入法会自动从中文模式切换到英文模式?如何预防? 最佳答案 Windows 应用程序可以通过编程为自己选择输入语言和 IME 模式,这就是为什么拼音输入法会自动切换到英
我的 Google 登录模板有误。我使用登录 Activity ,但在渲染/设计屏幕中总是出现以下错误: The following classes could not be found: - Edi
我们需要我们的应用程序能够接受韩语/日语等语言作为输入。 但是,如果我将键盘语言设置为韩语,那么在任务栏的右下角我会看到: 如果我尝试输入任何内容,它只是普通的英文字符。 在任何其他 Windows
我尝试获取软键盘状态(显示或隐藏)使用 onConfigurationChanged(此处:http://developer.android.com/guide/topics/resources/ru
我正在设置 CSS“ime-mode: active;”在页面加载时将输入文本框设置为韩语。 我尝试像吹代码一样设置 css ime-mode。 input[type='text'] { -w
在 Xcode 中,我总是试图找出要传递的参数类型,例如:对于此代码中给出的“属性”: NSLayoutConstraint( item: someView, attribute: .
在我的 C# 表单中,我有一个数据 GridView ,我想在其中输入单词或句子的汉字和假名版本,并将它们放在不同的列中。例如: 転寝 | うたたね 寝坊 | ねぼう 我想要实现的是在我提交第一列时自
当我们开始在 TextView 编辑器中输入时,基于词典的建议会显示在 IME 的候选 View 中。例如,如果我们在 TextView 中键入“th”,则会显示“this”、“that”、“the”
我是一名优秀的程序员,十分优秀!