博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中检测软键盘的弹出和关闭
阅读量:6705 次
发布时间:2019-06-25

本文共 1918 字,大约阅读时间需要 6 分钟。

Android系统并没有提供明显的API来监听软键盘的弹出和关闭,但是在某些情况下我们还是有办法来检测软键盘的弹出和关闭。
从StackOverflow找到了一个不错的方法。但是这种只适用于在manifest中目标Activity设置android:windowSoftInputMode=”adjustResize”的情况。
adjustResize表示The activity’s main window is always resized to make room for the soft keyboard on screen.
然后我们需要设置Activity的根视图的id,用来判断对话框弹出关闭使用。

布局的示例代码:

 

 
 
 

判断对话框出现或者关闭的逻辑代码如下:

 

 

@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        final View activityRootView = findViewById(R.id.root_layout);        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {			private int preHeight = 0;			@Override			public void onGlobalLayout() {		        int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();		        System.out.println("height differ = " + heightDiff);		        //在数据相同时,减少发送重复消息。因为实际上在输入法出现时会多次调用这个onGlobalLayout方法。		        if (preHeight == heightDiff) {					return;		        }		        preHeight = heightDiff;		        if (heightDiff > 100 ) {//		        	System.out.println("input method shown!");		        	Toast.makeText(getApplicationContext(), "keyboard is  shown", Toast.LENGTH_SHORT).show();		        } else {		        	Toast.makeText(getApplicationContext(), "keyboard is hidden ", Toast.LENGTH_SHORT).show();		        }			}         });    }

 

give your activity’s root view a known ID, say ‘@+id/activityRoot’, hook a GlobalLayoutListener into the ViewTreeObserver,

and from there calculate the size diff between your activity’s view root and the window size

给你的Activity的根视图设置一个id,比如说”@+id/activityRoot”,在ViewTreeObserver上设置一个GlobalLayoutListener。然后计算你的Activity的根视图和Window尺寸的差值

如果插值大于 100 (这是一个相对比较合理的值),就认为是对话框弹出,否则为对话框隐藏。

相关链接:http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android

转载地址:http://geflo.baihongyu.com/

你可能感兴趣的文章
算法笔记_069:Floyd算法简单介绍(Java)
查看>>
dubbo常见错误
查看>>
java-信息安全(十四)-初探SSL
查看>>
1497 取余运算
查看>>
ElasticSearch 应用场景
查看>>
关于haproxy负载均衡的算法整理
查看>>
CentOS 6.x安装配置MongoDB 3.4.x
查看>>
微信小程序,创业新选择
查看>>
Android -- 从源码带你从EventBus2.0飚到EventBus3.0
查看>>
洛谷4月月赛R2
查看>>
innobackupex不停库的数据备份并恢复到别的服务器上【转】
查看>>
php将汉字转换为拼音和得到词语首字母(三)
查看>>
Strut2------源码下载
查看>>
UI 经常用法总结之--- UILabel UITextField (不断更新中)
查看>>
FastJson和Gson和Json数据解析分析和用法
查看>>
算法笔记_186:历届试题 高僧斗法(Java)
查看>>
css3 position fixed居中的问题
查看>>
Android之——AIDL深入
查看>>
new BigDecimal(0.01) 与 new BigDecimal(String.valueOf(0.01))的区别 (转)
查看>>
Google 最新的 Fuchsia OS【科技讯息摘要】
查看>>