【发布时间】:2014-05-29 16:16:59
【问题描述】:
我在纯本机应用程序(基于 Android NDK 中提供的native-activity sample)应用程序中使用键盘时遇到问题。
我有这个 Java 代码来显示键盘:
mApplicationActivity.runOnUiThread(new Runnable(){
@Override
public void run() {
if(mTextEdit != null)
mTextEdit.setVisibility(View.GONE);
mTextEdit = new EditText(mApplicationActivity);
InputMethodManager m = (InputMethodManager) mApplicationActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
mTextEdit.setText(mTextEditValue);
mEditTextLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
mEditTextLayoutParams.gravity = Gravity.TOP;
mEditTextLayoutParams.setMargins(left, top, right, bottom);
mTextEdit.setLayoutParams(mEditTextLayoutParams);
mTextEdit.setVisibility(View.VISIBLE);
mTextEdit.addTextChangedListener(mTextWatcher);
mApplicationActivity.addContentView(mTextEdit, mEditTextLayoutParams);
mTextEdit.bringToFront();
mTextEdit.setSelection(mTextEdit.getText().length());
mTextEdit.requestFocus();
m.showSoftInput(mTextEdit, InputMethodManager.SHOW_FORCED);
}
});
我使用 textWatcher 检测输入更改以通知我的 C++ 代码并更新 OpenGL UI。它似乎在我的 Nexus 4 和 Android 4.4.2 中正常工作,但今天我有一个 Android 4.2.2 的 Nexus 4,我无法删除我写的文字。
所以我想知道处理键盘输入的最佳方法是什么:
- 我使用 OpenGL 渲染自己的 UI,EditText 在屏幕之外。
- 使用按键事件是个坏主意(如在此解释:https://code.google.com/p/android/issues/detail?id=42904“它无法正常使用手势输入、语音输入或切换输入,或者开发人员可能想出的任何新的输入法未来。”)
我也会考虑是否可以将 Java EditText 放在我的 OpenGL 上,但我不知道该怎么做。
这是 textWatcher 代码:
TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Call to C++ code
SendChangedText(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
};
【问题讨论】:
-
textwathcer 是要走的路,你能显示 mtextwatcher 的代码吗??
-
是的,我已将其添加到问题中。它没有什么特别的,只是调用我的 C++ 代码来更新 UI。调试我注意到在 Android 4.2.2 上按退格键时根本不会调用 textwatcher 事件。
标签: android android-ndk keyboard