栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Android】【UI】软键盘弹出隐藏,兼容弹窗

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Android】【UI】软键盘弹出隐藏,兼容弹窗

InputMethodManager和Window

关于软键盘的博客网上很多,但是很多没有提及一点

就是输入法的布局是绑定在Window上的

当我们的界面只有ActivityWindow时,网上的博客都是没问题的

但是如果界面布局是展示在Dialog,DialogFragment,PopupWindow里面的

网上的很多博客,其实是不生效的,正规的方法如下

代码

    //打开软键盘
    public static void openKeyboard(EditText edit) {
        MainThread.postLater(() -> {
            InputMethodManager manager = edit.getContext().getSystemService(InputMethodManager.class);
            manager.toggleSoftInputFromWindow(edit.getWindowToken(), 0, 0);
        }, 200);
    }

    //关闭软键盘
    public static void closeKeyboard(EditText edit) {
        InputMethodManager manager = edit.getContext().getSystemService(InputMethodManager.class);
        manager.toggleSoftInputFromWindow(edit.getWindowToken(), 0, 0);
    }

	//监听窗口绑定状态
	contentEdit.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
	    @Override
	    public void onViewAttachedToWindow(View v) {
	        contentEdit.requestFocus();
	        contentEdit.setSelection(contentEdit.getText().length());
	        Services.openKeyboard(contentEdit);
	    }
	
	    @Override
	    public void onViewDetachedFromWindow(View v) {
	        contentEdit.clearFocus();
	        Services.closeKeyboard(contentEdit);
	    }
	});

由于onViewAttachedToWindow,比Window实际显示,会早一点点

所以openKeyboard需要通过Handler延时几百毫秒再执行

openKeyboard方法一定要确保Window已经显示了,才会执行生效

getWindowToken方法可以获取到View所在Window对应的Binder

通过这个Binder,就可以控制当前Window的输入法布局

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340518.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号