除了Android Lollipop(5.0)之外,我的所有Android版本都有用户键盘输入。
我用它来打开软件键盘:
public static void OpenKeyBoard(){
MainActivity._Instance.runOnUiThread(new Runnable() {
public void run() {
InputMethodManager imm = (InputMethodManager) MainActivity._Instance.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(MainActivity._Instance.getWindow().getDecorView(), 0);
}
});
}
我通过标准事件获得用户输入:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
我有这个代码适用于Android的所有Lollipop前版本。当我在Lollipop上使用它时,会出现软件键盘,但当我尝试点击任何字母/数字时,键盘消失,方法“onKeyDown”不会收到任何键码。
有人有这个问题吗?任何意见如何解决这个问题?
谢谢。
答案 0 :(得分:0)
尝试将您的谷歌SDK更新到最新版本,我做了,这解决了我在键盘解雇时遇到的任何问题。
答案 1 :(得分:0)
我也有这个问题。我设法通过覆盖onLayout,onFocusChanged&来解决这个问题。 WebView中的onCheckIsTextEditor方法。这是使其工作的代码(我以编程方式生成webview):
this.webView = new WebView(context)
{
boolean layoutChangedOnce = false;
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b)
{
if (!layoutChangedOnce)
{
super.onLayout(changed, l, t, r, b);
layoutChangedOnce = true;
}
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect)
{
super.onFocusChanged(true, direction, previouslyFocusedRect);
}
@Override
public boolean onCheckIsTextEditor()
{
return true;
}
};
this.webView.setFocusable(true);
this.webView.setFocusableInTouchMode(true);
this.webView.requestFocus(View.FOCUS_DOWN);
addView(this.webView);
答案 2 :(得分:0)
此问题不仅限于Android应用程序,还会在手机浏览器中使用javascript或jquery访问任何键盘相关事件时发生。
例如。我的网站要求用户在某个页面上输入邮政编码(数字字符)。现在的问题是当点击输入框时,会出现数字键盘,但它也允许您在其中粘贴字母数字字符。
到目前为止搜索的原因, 尝试通过桌面以及运行Android OS 5.0+的移动设备访问this并尝试不同的可能击键。
注意:
使用上述移动设备输入任何字母字符时 提到的配置显示了' 229'作为键码。
当您使用桌面输入任何字母字符时,它会显示 适当的密码。
答案 3 :(得分:0)
这对我有用我有一个SurfaceView实现SurfaceHolder.Callback与一个线程来做绘图
@Override
public boolean onTouchEvent(MotionEvent event)
{
synchronized (this)
{
mouse.useEvent(event);
}
return true;
}
@Override
public InputConnection onCreateInputConnection(EditorInfo editorinfo) {
BaseInputConnection bic = new BaseInputConnection(this, false);
editorinfo.actionLabel = null;
editorinfo.inputType = InputType.TYPE_NULL;
editorinfo.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN;
bic.finishComposingText();
return bic;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
input.useEvent(event);
return super.dispatchKeyEvent(event);
}
答案 4 :(得分:0)
我已经使用AlertDialog editText以编程方式解决了这个问题。例如:
public void KeyboardTextField(int id){
if (id == 0){
final String title = getStringResourceByName("profile_title");
final String createP = getStringResourceByName("profile_confirm");
final String cancel = getStringResourceByName("profile_cancel");
MainActivity._Instance.ActivityWillBeShown = true;
MainActivity._Instance.runOnUiThread(new Runnable() {
public void run() {
AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity._Instance);
alert.setCancelable(false);
alert.setTitle(title);
// alert.setMessage(""); // message
// Set an EditText view to get user input
final EditText input = new EditText(MainActivity._Instance);
final int maxLength = 12;
input.setFilters(new InputFilter[] {new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
if (source != null && blockCharacterSet.contains(("" + source))) {
return "";
}
// TODO Auto-generated method stub
return null;
}
} , new InputFilter.LengthFilter(maxLength)});
//input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);
input.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); //turn off txt auto complete
input.setInputType(InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS); // type only text,numbers and some special char
alert.setView(input);
//input.setText("Player");
alert.setPositiveButton(createP, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
// Do something with value!
if (value.isEmpty()){
value = "Player";
}
nativeName(value);
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
}
});
alert.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
}
});
alert.show();
};
});
}
每当你需要键盘时,你只需要调用此功能。它适用于所有Android版本(4.x,5.x,6.0)