ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何从本机代码强制打开Android软键盘?

2019-09-03 01:25:42  阅读:229  来源: 互联网

标签:android android-ndk android-softkeyboard


我有一个游戏,它使用来自C的Java回调来强制打开用户触摸屏幕时的软键盘. Java代码就是这样的:

this._inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

这已经好了一段时间,但最近我们收到一些摩托罗拉Droid用户的抱怨,软键盘无法为他们打开.由于我们最近才开始接受这些投诉,而且我认为这是对这些设备进行某种更新.

有没有更好的方法可以强制键盘打开?我在网上找到的所有链接都谈到了使用文本框控件等,但我的应用程序主要是C并且根本不使用标准控件.

解决方法:

我不知道这是否与您的问题有关,但是当设备有时会“不同步”并且在我想要显示时隐藏,反之亦然时,我只使用InputMethodManager.toggleSoftInput()遇到了一些问题.

我已经取得了一些成功,因为虽然IMM.showSoftInput()不会显示键盘,IMM.hideSoftInputFromWindow()将可靠地关闭一个,所以当我想显示键盘时,我现在调用IMM.hideSoftInputFromWindow ()后跟IMM.toggleSoftInput(),并使用IMM.hideSoftInputFromWindow()自行隐藏一个.

[一天后……]

昨天写上面的内容让我重新思考我是如何处理软键盘的(我的意思是,showSoftinput()确实有效,而不是我们预期的方式)所以这是一个更好的方法:

首先,您需要设置视图,以便Android知道它可以有一个软键盘 – 在InputMethodManager的文档中有描述.在我的情况下,我有一个从GLSurfaceView派生的视图,所以我添加了:

setFocusable(true);
setFocusableInTouchMode(true);

到构造函数,然后是以下2个覆盖:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs)
{
    outAttrs.actionLabel = "";
    outAttrs.hintText = "";
    outAttrs.initialCapsMode = 0;
    outAttrs.initialSelEnd = outAttrs.initialSelStart = -1;
    outAttrs.label = "";
    outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI;        
    outAttrs.inputType = InputType.TYPE_NULL;        

    return  new BaseInputConnection(this, false);       
}     

@Override
public boolean onCheckIsTextEditor ()
{
    return true;
}

现在我可以用键盘显示:

InputMethodManager mgr = (InputMethodManager)mActivity.getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(mView, 0);

并通过视图的onKeyUp()和onKeyDown()方法报告按键.

隐藏它仍然使用hideSoftInputFromWindow()完成

标签:android,android-ndk,android-softkeyboard
来源: https://codeday.me/bug/20190903/1794576.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有