Android ViewPager在错误的地方显示软键盘

ppr*_*dos 5 android focus android-softkeyboard android-viewpager

我使用带有3个片段的ViewPager.第一个只有文字.第二个是输入字段.第三,只有文字.

初始化ViewPager时,将显示软键盘,因为焦点设置为输入字段.如果我改变片段的顺序,则不显示软键盘.

如何使用ViewPager控制焦点和软键盘?

问候

Tim*_*mmm 6

到目前为止,我发现的最佳解决方案是android:windowSoftInputMode="stateHidden"在您的活动清单中使用,然后将其添加到您的活动中.

@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)

我没有使用,onPageSelected()因为隐藏键盘动画螺丝与滑动动画.我没有使用这个android:focusable技巧,因为当您向后滑动到无输入片段时,键盘不会被隐藏.虽然我想你可以将它与上面的代码结合起来.


Ale*_*ood 1

我确信有更好的方法来做到这一点,但我遇到了同样的问题,我通过将父级设置View为可聚焦来解决这个问题。这样,当您在页面之间滑动时,无论是什么原因导致软键盘弹出都不会获得焦点......

<!-- Dummy item to prevent your View from receiving focus -->
<LinearLayout
    ...
    android:focusable="true" 
    android:focusableInTouchMode="true" />

    <!-- The view(s) that are causing the keyboard to pop up each time you swipe -->
    <EditText ... />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)