- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的应用程序中使用键盘时遇到问题,该应用程序是一个纯 native 应用程序(基于 Android NDK 中提供的native-activity 示例
)。
我有这段 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 中正常工作,但今天我有一个 Nexus 4 和 Android 4.2.2,我无法删除我写的文本。
所以我想知道处理键盘输入的最佳方式是什么,假设:
我也会考虑是否可以将 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) {
}
};
最佳答案
我还在我的项目中使用 NativeActivity。关键事件方法 -
public boolean dispatchKeyEvent(KeyEvent event) { ... }
只在一开始为我工作,直到有一天,在 4.4 下,存在退格键(删除)键事件根本没有发送到事件处理程序的错误。看起来它是基本 android 键盘的已知错误。所以我从原始按键处理转向“隐藏的 EditText”解决方案。
隐藏的 EditText 为您提供了消除错误和处理预测输入的方法。为此,您需要实现自己的 InputConnectionWrapper(或者也可以是 BaseInputConnection)。在 EditText 内部覆盖 onCreateInputConnection:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
// We set manual input connection to catch all keyboard interaction
return new MyInputConnection(super.onCreateInputConnection(outAttrs), true);
}
@Override
public boolean onCheckIsTextEditor() {
return true;
}
现在我们可以在里面捕获很多输入事件了:
class MyInputConnection extends InputConnectionWrapper {
public MyInputConnection(InputConnection target, boolean mutable) {
super(target, mutable);
}
@Override
public boolean setComposingText(CharSequence text, int newCursorPosition)
{
Log.d(TAG, "setComposingText " + text);
return super.setComposingText(text, newCursorPosition);
}
@Override
public boolean commitText(CharSequence text, int newCursorPosition)
{
Log.d(TAG, "commitText " + text);
return super.commitText(text, newCursorPosition);
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
return super.sendKeyEvent(event);
}
@Override
public boolean deleteSurroundingText(int beforeLength, int afterLength) {
if (beforeLength == 1 && afterLength == 0) {
Log.d(TAG, "DELETE!");
}
return super.deleteSurroundingText(beforeLength, afterLength);
}
}
有关详细信息,请参阅 InputConnectionWrapper 类。据我了解,从软件键盘捕获所有事件的唯一方法是覆盖此接口(interface)提供的所有方法。
关于android - 在 Android NativeActivity 中管理键盘输入的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23937968/
我有一个单独运行的 NativeActivity,我尝试添加一些 SDK(更准确地说是 Admob/Chartboost/Facebook)。 另一方面,只有当我们在参数中传递一个 Activity
Android NDK刚刚得到显着扩展,包括支持完全使用 native C/C++ 代码编写 Android 应用程序。现在可以使用 native 代码捕获键盘和触摸屏上的输入事件,还可以使用新的 N
在我的 Android 设备(使用 JellyBean 4.1.2)上有一个错误: 当我启动特定的 NativeActivity(从我的应用程序加载游戏的 libretroarch-activity)
有什么方法可以从 Execute 中看到 NativeActivity 的父事件的类型?方法 ? 最佳答案 是的,您可以执行以下代码块,它会返回内部的值 Parent属性(property)——这将是
我从 JavaActivity 调用 NativeActivity。我的 NativeActivity 的入口点是 android_main(struct android_app* state) 最
要使用 gdb 在 android 应用程序中调试 native 代码,首先我需要启动基于 sdk 的应用程序并在使用 native 代码加载库之前将其停止在断点处,之后我需要启动 gdb,依此类推.
我有一个原生android应用,那么入口main就是android_main。我的问题:是否可以使用 NativeActivity 生成另一个 Activity ?我必须只插入代码 java con
我正在将纯 C++ 游戏移植到 Android,由于我的目标是 Android 3.0+ 平板电脑,因此我选择使用 NativeActivity 以完全避免使用 Java。但是,我看不到任何允许我写入
环境…… 我有一个全新的 Visual Studio 2015 Android NDK 解决方案。这包含 2 个项目(由 visual studio 生成的默认模板代码): 原生 Activity 。
我正在 NativeActivity 上开发应用程序(仅限 C/C++)。 我想禁用屏幕超时。 你知道怎么做吗? 最佳答案 如果 OP 仍在寻找答案,或者像我这样的人在搜索时发现了这个主题,请按以下步
我有一个使用 NativeActivity 的应用程序。我想调用 Java 来做一些需要上下文的事情(例如,访问 TelephonyManager 以查询 IMEI)。 如何为我的 Activity
我在我的应用程序中使用键盘时遇到问题,该应用程序是一个纯 native 应用程序(基于 Android NDK 中提供的native-activity 示例)。 我有这段 Java 代码来显示键盘:
我尝试仅使用 C++ 将我的所有应用程序从 IOS 和 ANDROID 与 JAVA EGL 移植到 Android 设备上。 我刚刚遇到的一件事是“ fatal error :android_nat
我想要一个使用 NativeActivity 的真正的全屏 android 应用程序。我在 AndroidManifest.xml 中设置主题“Theme.Black.NoTitleBar.Fulls
有什么方法可以将我的源代码(包括所有 .h .cpp 和 .mk 文件)移出项目文件夹?换句话说,我想将 jni 文件夹的内容移出 android 项目文件夹。现在,我的项目的物理结构如下所示: ..
NativeActivity 是否可以访问 GestureDetector 并将事件绑定(bind)到它? 我认为这可能必须通过 JNI,很痛苦。 最佳答案 是的,您必须使用 JNIEnv 来访问 G
我正在使用带有 native_app_glue 的 NativeActivty 为 Android 编写一个 OpenGL 游戏。很难确定何时是删除堆分配对象和 OpenGL 分配对象的最佳时机。 在
有谁知道我在哪里可以找到用于 android NativeActivity 的所有 native c/c++ 方法和函数的列表。我似乎无法在 google/android 网站上的任何地方找到列表,过
我正在尝试在 NativeActivity 中使用自定义 C# 表达式 它可以很好地处理像 Condition = new CSharpValue("1 == 1") 这样的简单表达式 它不适用于这样
我有一个事件将操作安排到外部 API,然后只有在此外部 API 完成时才必须继续,这由事件指示。我目前使用 NativActitivy。 我的想法是设置一个书签,然后注册一个触发书签的事件处理程序。可
我是一名优秀的程序员,十分优秀!