Fragment软键盘的显示和隐藏

时间:2021-12-26 00:35:39

Fragment的软键盘显示和隐藏

(一)显示软键盘

editText.requestFocus();
//弹出软键盘
InputMethodManager imm =(InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);

(二)隐藏软键盘

//隐藏软件盘
View mv = getActivity().getWindow().peekDecorView();
if (mv != null){
InputMethodManager inputmanger = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputmanger.hideSoftInputFromWindow(mv.getWindowToken(), 0);
}

(三)ViewPager + Fragment的软键盘显示和隐藏

我们经常会用到ViewPager + Fragment布局,当我们滑动到一个包含输入框的Fragment的时候,我们希望自动弹出软键盘,再滑动的时候隐藏.
但是我们发现通过Fragment的onResume()方法并不能实现我们的需求,所有我们就用到setUserVisibleHint(boolean isVisibleToUser)

效果如下:
Fragment软键盘的显示和隐藏

我们需要在需要弹出软键盘的Fragment中写入:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//当用户可见的时候 相当于Fragment的onResume();
if (isVisibleToUser) {
//弹出软键盘
InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
}
}

在Activity的ViewPager中写入:
当ViewPager开始滑动的时候 自动隐藏软键盘

        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
//隐藏软件盘
View mv = getWindow().peekDecorView();
if (mv != null){
InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputmanger.hideSoftInputFromWindow(mv.getWindowToken(), 0);
}
}
});