text=(EditText)findViewById(RidediTtext);
if (androidosBuildVERSIONSDK_INT <= 10) {
textsetInputType(InputTypeTYPE_NULL);
} else {
getWindow()setSoftInputMode(WindowManagerLayoutParamsSOFT_INPUT_STATE_ALWAYS_HIDDEN);
try {
Class<EditText> cls = EditTextclass;
Method setSoftInputShownOnFocus;
setSoftInputShownOnFocus = clsgetMethod("setSoftInputShownOnFocus", booleanclass);
setSoftInputShownOnFocussetAccessible(true);
setSoftInputShownOnFocusinvoke(text, false);
} catch (Exception e) {
eprintStackTrace();
}
}加上这个试试
亲测可行:
et_nicnamesetFocusable(true);
et_nicnamesetFocusableInTouchMode(true);
et_nicnamerequestFocus();
Timer timer = new Timer();
timerschedule(new TimerTask() { //让软键盘延时d出,以更好的加载Activity
public void run() {
InputMethodManager inputManager =
(InputMethodManager)et_nicnamegetContext()
getSystemService(ContextINPUT_METHOD_SERVICE);
inputManagershowSoftInput(et_nicname, 0);
}
}, 800);
为了引出下面遇到的问题,提一下密码框删除的思路
删除细节:已输入密码删除移动焦点 ,和无输入内容时移动焦点
密码删除思路:拦截 DELETE 事件,清除输入框并取消焦点,让前一个输入框获取焦点。
测试妹子在使用华为P10 测试到这里的时候,发现删除键没用,她以为手机坏了。因为其他手机包括华为P9都可以响应删除并前移焦点。
开发手机我用的搜狗键盘没有问题,我切换回原生键盘再测发现——我勒个皮皮虾,毛反应都没有。测试妹子发现不是手机坏的,一个眼神光波差点把我炸到五米外。
这种奇葩坑必须深度挖一挖,不然还会被他的同类绊倒
设备:华为 ALT-TL00 501
因为这里是纯数字密码,设置属性 inputType 值为 numberPassword 。
测试日志发现,发现 ACTION_DOWN 、 ACTION_DOWN 、 DELETE 都没有获取到。
为了去除意外,我又测试了不设置 inputType ,果不其然全GG。
此时我真的感觉到了蛋疼 FUCK! 这是个锤子手机,心里默默吐槽了开发这个键盘的程序员兄弟。
翻了一下老司机的博客,和国外论坛。发现还有非常普遍的bug
在输入框,没有内容时不会传递 DELETE 相关事件
而我测试发现,这个华为手机上。无论输入框有无内容都没有传递出 DELETE 事件。
1自定义开发一个键盘,这样就不用再测试其他机型或者其他厂牌的输入法。统一解决了这个问题。简单暴力,还可以附加密码输入安全策略。
但是项目已经快到尾声了,全局需要替换密码键盘。还要跟在国外的开发小伙伴沟通。
站在这两点上,项目经理否定了。让我先针对性的解决一下。
于是就有了下面的解决办法。
2着手 EditText 对键盘事件的关联使用,覆盖事件监听接口为我们自定义的,只传递需要的 ACTION_DOWN 和 DELETE 事件。
这里我就不贴源码分析了,因为用到的方法只有两个,接口名字也是一读就懂。有兴趣的小伙伴可以去翻阅源码。
参考博客: Android 获取软键盘的删除delete事件
以上就是关于Android EditText怎样显示光标闪动和不显示键盘全部的内容,包括:Android EditText怎样显示光标闪动和不显示键盘、EditText自动获得了焦点但没有d出输入法软键盘、Android 输入法没有传递键盘DELETE事件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)