以编程方式在ViewPager.OnPageChangeListener onPageSelected()中隐藏软键盘?

sno*_*yak 25 android android-softkeyboard android-fragments android-viewpager

我有一个带标签的ViewPager + ActionBar.当我"滑动"到另一个标签时,我想隐藏软键盘,但我无法弄清楚如何.

我已经将我的Activity传递给了FragmentPageAdapter的构造函数,所以我可以调用它

 activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Run Code Online (Sandbox Code Playgroud)

但它没有做任何事情(并且它位于代码的可到达区域)...帮助?

alm*_*awi 41

在您的活动中,您可以执行以下操作:

mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        final InputMethodManager imm = (InputMethodManager)getSystemService(
            Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(mView.getWindowToken(), 0);
    }

    @Override
    public void onPageScrolled(int position, float offset, int offsetPixels) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,它有效.我不得不使用我的viewPager作为视图并执行activity.getSystemService但该过程有效 (6认同)
  • 在一行中:`(((InputMethodManager)getActivity()。getSystemService(Context.INPUT_METHOD_SERVICE))。hideSoftInputFromWindow(view.getWindowToken(),0);` (2认同)
  • 您可以将视图设置为视图寻呼机,以便您可以在不查找视图的情况下使用它:imm.hideSoftInputFromWindow(mViewPager.getWindowToken(),0); (2认同)

Tim*_*mmm 32

我不使用,onPageSelected()因为隐藏键盘动画螺丝与滑动动画.而是使用onPageScrollStateChanged():

@Override
public void onPageScrollStateChanged(int state)
{
    if (state == ViewPager.SCROLL_STATE_IDLE)
    {
        if (mViewPager.getCurrentItem() == 0)
        {
            // Hide the keyboard.
            ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE))
                .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 更好的解决方案,没有动画故障.保护你! (2认同)

Ale*_*cyn 5

一般的方法:

private void hideVirturalKeyboard(){
View v = getCurrentFocus();
if (v != null && v instanceof EditText) {
InputMethodManager mgr = (InputMethodManager)(v.getContext().getSystemService(Context.INPUT_METHOD_SERVIC
E));
mgr.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
} 
Run Code Online (Sandbox Code Playgroud)