具体方法如下:
首先,在清单文件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()失效,可用标记来判断.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)