项目中要求进入页面获取指定input的焦点,找了好久才找到了。
上代码!
var autoFocusInput= function(id) {
var nativeWebview, imm, InputMethodManager;
//初始化NativeObject
if(mui.os.android) {
var main = plus.android.runtimeMainActivity();
var Context = plus.android.importClass("android.content.Context");
InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager");
imm = main.getSystemService(Context.INPUT_METHOD_SERVICE);
} else {
nativeWebview = plus.webview.currentWebview().nativeInstanceObject();
}
//获取焦点并调用软键盘
var nativeWebview = plus.webview.currentWebview().nativeInstanceObject();
if(mui.os.android) {
//强制当前webview获得焦点
plus.android.importClass(nativeWebview);
//这步很关键,不写的话获取焦点就无效
nativeWebview.requestFocus();
//imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
} else {
nativeWebview.plusCallMethod({
"setKeyboardDisplayRequiresUserAction": false
});
}
setTimeout(function() {
var inputObj = document.getElementById(id);
inputObj.focus();
//获取当前焦点所在的view并隐藏软件盘
var view = main.getCurrentFocus();
imm.hideSoftInputFromWindow(view.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
}, 200);
}
调用:autoFocusInput("id");
我是将放在plusReady函数里和show监听函数里,不要放在ready函数里面,会报错。为什么放在两个函数里面的,因为一个第一个是初始化,后面那个show监听是后面每次打开才会执行的;也可以在上个页面自定义个fire函数,然后将调用方法放在里面就行了,如果你们有更好的方法,欢迎评论!