gpt4 book ai didi

custom-keyboard - 不推荐使用键盘后如何为键盘实现自定义 View ?

转载 作者:行者123 更新时间:2023-12-03 07:36:49 25 4
gpt4 key购买 nike

我正在使用最新的 Android Studio 和 Kotlin 为 Android(API 100% 用户)制作系统键盘。我正在尝试关注 IME life cycle .

有关于覆盖 onCreateInputView() 的指南

override fun onCreateInputView(): View {
return layoutInflater.inflate(R.layout.input, null).apply {
if (this is MyKeyboardView) {
setOnKeyboardActionListener(this@MyInputMethod)
keyboard = latinKeyboard
}
}
}

其中 MyKeyboardView 是呈现键盘的 KeyboardView 的自定义实现的实例。

问题只出现在 android.inputmethodservice.KeyboardView自 API 级别 29 以来已被弃用。该文档说

This class is deprecated because this is just a convenient UI widget class that application developers can re-implement on top of existing public APIs.



我不想使用已弃用的功能,但该指南尚未针对此更改进行更新。制作我自己的残酷方法只是在约束布局中制作大量按钮。这是正确的方法吗?作为一个完整的初学者,一旦我无法遵循指南,我就会迷失方向。

最佳答案

很明显,来自文档 here :

This class was deprecated in API level 29. This class is deprecatedbecause this is just a convenient UI widget class that applicationdevelopers can re-implement on top of existing public APIs. If youhave already depended on this class, consider copying theimplementation from AOSP into your project or re-implementing asimilar widget by yourselves


这意味着您必须创建 您对所有键的看法 ,这也意味着 处理所有的点击事件,如输入、删除和切换键盘,例如。自己去符号等 .
其实有很多方法可以做到。但是我会尝试给您一个简单的想法,您将遵循在使用已弃用的 KeyboardView 时使用的大部分步骤。 :
首先创建您的自定义键盘布局,您可以根据自己的方便使用任何布局 LinearLayout , RelativeLayoutButton s 用于键等。我使用了 GridLayoutButton s。
然后创建InputMethodService的子类像往常一样:
public class MyIMService extends InputMethodService implements View.OnClickListener {

private static String TAG = "MyIMService";

@Override
public View onCreateInputView() {
View myKeyboardView = getLayoutInflater().inflate(R.layout.key_layout, null);
Button btnA = myKeyboardView.findViewById(R.id.btnA);
btnA.setOnClickListener(this);
//ADD ALL THE OTHER LISTENERS HERE FOR ALL THE KEYS
return myKeyboardView;
}

@Override
public void onClick(View v) {
//handle all the keyboard key clicks here

InputConnection ic = getCurrentInputConnection();
if (v instanceof Button) {
String clickedKeyText = ((Button) v).getText().toString();
ic.commitText(clickedKeyText, 1);
}
}
}
正如我之前所说,您可以尝试不同的方式来处理所有的点击事件。但这应该给你基本的想法。
就是这样。您必须像往常一样在 list 文件中添加此服务,其他步骤也像往常一样。这现在应该可以工作了。
更新 Kotlin 版本:
class MyIMService : InputMethodService(), View.OnClickListener {
override fun onCreateInputView(): View {
val myKeyboardView: View = layoutInflater.inflate(R.layout.key_layout, null)
val btnA: Button = myKeyboardView.findViewById(R.id.btnA)
btnA.setOnClickListener(this)
//ADD ALL THE OTHER LISTENERS HERE FOR ALL THE KEYS
return myKeyboardView
}

override fun onClick(v: View) {
//handle all the keyboard key clicks here
val ic = currentInputConnection
if (v is Button) {
val clickedKeyText: String = (v as Button).getText().toString()
ic.commitText(clickedKeyText, 1)
}
}

companion object {
private const val TAG = "MyIMService"
}
}

关于custom-keyboard - 不推荐使用键盘后如何为键盘实现自定义 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57634572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com