监听手机软键盘是否弹出
手机 是否 监听 软键盘
2023-09-14 09:00:42 时间
方案一:通过判断根视图的高度
import android.app.Activity;
import android.graphics.Rect;
import android.view.View;
import android.view.ViewTreeObserver;
/**
* Created by Administrator on 2016/12/2.
*/
public class SoftKeyBoardListener {
private View rootView;//activity的根视图
int rootViewVisibleHeight;//纪录根视图的显示高度
private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener;
public SoftKeyBoardListener(Activity activity) {
//获取activity的根视图
rootView = activity.getWindow().getDecorView();
//监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//获取当前根视图在屏幕上显示的大小
Rect r = new Rect();
rootView.getWindowVisibleDisplayFrame(r);
int visibleHeight = r.height();
if (rootViewVisibleHeight == 0) {
rootViewVisibleHeight = visibleHeight;
return;
}
//根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变
if (rootViewVisibleHeight == visibleHeight) {
return;
}
//根视图显示高度变小超过200,可以看作软键盘显示了
if (rootViewVisibleHeight - visibleHeight > 200) {
if (onSoftKeyBoardChangeListener != null) {
onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight - visibleHeight);
}
rootViewVisibleHeight = visibleHeight;
return;
}
//根视图显示高度变大超过200,可以看作软键盘隐藏了
if (visibleHeight - rootViewVisibleHeight > 200) {
if (onSoftKeyBoardChangeListener != null) {
onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight);
}
rootViewVisibleHeight = visibleHeight;
return;
}
}
});
}
private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {
this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener;
}
public interface OnSoftKeyBoardChangeListener {
void keyBoardShow(int height);
void keyBoardHide(int height);
}
public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {
SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity);
softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener);
}
}
然后再需要的页面调用即可
SoftKeyBoardListener.setListener(getActivity(), new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {
@Override
public void keyBoardShow(int height) {
((MainActivity) getActivity()).main_menu.setVisibility(View.GONE);
((MainActivity) getActivity()).layoutCommunity.setVisibility(View.GONE);
}
@Override
public void keyBoardHide(int height) {
((MainActivity) getActivity()).main_menu.setVisibility(View.VISIBLE);
((MainActivity) getActivity()).layoutCommunity.setVisibility(View.VISIBLE);
}
});
方案二:通过输入框焦点判断
//每次启动都清除焦点
myCourse_roomId_input.setText("");
myCourse_roomId_input.clearFocus();
//判断是否获取焦点
boolean focus = myCourse_roomId_input.hasFocus();
if(focus){
//弹出软键盘
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(getActivity().INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.RESULT_SHOWN);
}else{
//隐藏软键盘
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(getActivity().INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
相关文章
- 想让好友不停地擦手机屏幕?微信头像这样设置就行了!
- iOS 检测手机是否安装SIM卡详解手机开发
- iOS网络post请求详解手机开发
- iOS判读app是否第一次起动详解手机开发
- 微信企业号开发:企业支付openid的获取 appid and openid not match详解手机开发
- iOS开发系列课程(07) — 分栏视图控制器详解手机开发
- [android] 练习使用ListView(一)详解手机开发
- 用xml来编写动画详解手机开发
- android JNI学习详解手机开发
- android 二维码简化,实现仿qq扫描效果详解手机开发
- Android 获取联系人和电话号码详解手机开发
- 安卓上跑起Linux:让手机之旅更加灵活(安卓跑linux)
- 开发者研发MVT工具:帮用户确认手机是否受到NSO间谍软件监听
- 报告:到 2025 年,5G 手机将占智能机销售收入 50% 以上
- android开发中获取手机分辨率大小的方法
- php检测用户是否用手机(Mobile)访问网站的类
- android检查手机和无线是否连接的方法