如何监听android软键盘的隐藏和消失?

如何监听android软键盘的隐藏和消失?,第1张

原理灶渣:自定义布局的onSizeChanged()方法,在其中增加一个监听接口,当软键盘显示或隐藏使得布局尺寸发生改变,就能捕获到这个事件。

具体方法如下:

首先,在清单文件Manifest.xml中握咐的对应的Activity标签内设置

android:windowSoftInputMode=”adjustResize”

作用是当软键盘显示或隐藏时,该Activity主窗口总是会被调整大小以便留出软键盘的空间。唯有这样才能保证布局触发onSizeChanged()方法。

然后,自定义一个布局,具体是RelativeLayout、LinearLayout或是其它的,根据实际情况而定,自定义的目的是在其onSizeChanged()方法段辩纯中增加一个监听接口。这里给出一个自定义RelativeLayout布局代码:

public class CustomRelativeLayout extends RelativeLayout {

private OnSizeChangedListener listener

public CustomRelativeLayout(Context context) {

super(context)

}

public CustomRelativeLayout(Context context, AttributeSet attrs) {

super(context, attrs)

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec)

}

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

super.onLayout(changed, l, t, r, b)

}

@Override

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

Log.d(TAG.CUSTOM_VIEW, “onSizeChanged”)

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

if (listener != null) {

listener.onSizeChanged(w, h, oldw, oldh)

}

}

public void setOnSizeChangedListener(OnSizeChangedListener listener) {

this.listener = listener

}

/** * Activity主窗口大小改变时的回调接口(本示例中,等价于软键盘显示隐藏时的回调接口) */

public interface OnSizeChangedListener {

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

}

}

最后,在程序中使用此接口(xxx.setOnSizeChangedListener(…))即可实现监听键盘隐藏或显示事件。

InputMethodManager有一个方法isActive(View view):如果view是输入法的活动view,做铅判则返回true。也就是说,如果是由view触发d出软键盘,则返回true。

if(isActive(edittext))

隐藏键盘

接着让另一个view强制获取焦点,这样isActivite(ediitext)就为false.

这个方法比较简单,代码比较短,也很好理解。

附上代码:

InputMethodManager inputMethodManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)<br>private boolean hideKeyboard(){

if(inputMethodManager.isActive(searchEditText)){<br>激嫌//因为是在fragment下,所以用了getView()获取view,也可以用findViewById()来获取父控件纯改

getView().requestFocus()//使其它view获取焦点.这里因为是在fragment下,所以便用了getView(),可以指定任意其它view

inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS)

return true

}

return false

}

ps: 如果是手动d出键盘,getActivity().getCurrentFocus()改成searchEditText.并且手动d出的键盘isActivie()失效,可用标记来判断.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12441118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存