android 输入法 确定按钮,Android项目:输入法软键盘显示/隐藏的监听和控制,InputMethodManager用法研究...

本文详细介绍了在Android开发中如何监听和控制软键盘的显示与隐藏,包括点击空白处隐藏软键盘、PopWindow与输入法的结合使用,以及通过监听布局高度变化判断软键盘状态的方法。此外,还探讨了InputMethodManager的相关方法和SoftInputMode的输入法软键盘模式选项。
摘要由CSDN通过智能技术生成

在项目开发中,用到编辑框的地方经常涉及到要监听或者控制软键盘的显示/隐藏状态。本以为这是很容易解决的一个小问题,没想到当初碰到这个问题才明白还得花点小心思才能整好。现将针对软键盘的显示/隐藏状态的监听/监控方法做一些总结,以备后用。

一、点击空白处隐藏软键盘

这是具有编辑框焦点的页面对输入法软键盘状态监听的一般需求和解决方法.

首先获得InputMethodManager:InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

监听点击:/**

* 点击监听

*/

@Override

public boolean onTouchEvent(MotionEvent event)

{

onHideSoftInput(event);

return super.onTouchEvent(event);

}

/**

* 点击空白处,关闭输入法软键盘

*/

public void onHideSoftInput(MotionEvent event)

{

if (event.getAction() == MotionEvent.ACTION_DOWN)

{

if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null)

{

manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

}

}

}

二、popwindow与输入法软键盘的结合

先说下自己想实现的效果:点击顶部按钮,打开编辑菜单popwindow并自动弹出软键盘;再次点击顶部按钮,或者点击编辑菜单popwindow上面的底部按钮,关闭菜单并隐藏软键盘;菜单打开状态,点击返回键,若菜单已显示先关闭软键盘,再点击则关闭菜单。

大致效果图如下:

715d3b87ab23b5745df4bddba9a8e376.gif

1.重写根布局,监听根布局高度变化

对于这个需求,简单的用上面第一点的方法是无效的。这里没法直接通过getCurrentFocus()方法判断页面是否获取焦点来控制,需要通过对popwindow的高度变化进行判断。同时也试过下面的方法,同样无效。

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

boolean isOpen=imm.isActive();//isOpen若返回true,则表示输入法打开

popwindow的根布局我这里用的是RelativeLayout,RelativeLayout类可以通过重写onSizeChanged方法来监听布局大小变化。重写一个RelativeLayout类便实现了对popwindow的高度变化的监听了。

代码如下:/**

* 监听输入法软键盘显示状态的自定义RelativeLayout

*

* @author zeng

*

*/

public class ResizeRelativeLayout extends RelativeLayout

{

public ResizeRelativeLayout(Context context, AttributeSet attrs)

{

super(context, attrs);

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh)

{

super.onSizeChanged(w, h, oldw, oldh);

if (mListener != null)

{

mListener.OnResizeRelative(w, h, oldw, oldh);

}

}

// 监听接口

private OnResizeRelativeListener mListener;

public interface OnResizeRelativeListener

{

void OnResizeRelative(int w, int h, int oldw, int oldh);

}

publi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值