9

我有一个包含带有 2 个片段的 ViewPager 的 Android 应用程序。第一个片段包含一个 EditText 字段。当应用程序启动时,该字段立即成为焦点并启动软键盘(我希望发生这种情况)。第二个片段只包含一个列表(没有可编辑的文本字段)。当我从片段 1 滑动到片段 2 时,我希望键盘消失。我尝试过的任何方法似乎都不起作用。键盘不仅保留在视图中,还继续更新片段 1 的 EditText 字段。

我想我要么使用不正确的代码来隐藏键盘,要么将其放置在不正确的位置。如果有人可以发布正确实施的示例,将不胜感激!

我最近的尝试是将应该隐藏键盘的代码放在片段 1 的 onDetach() 方法中:

@Override
public void onDetach()
{
    super.onDetach();

    InputMethodManager imm = (InputMethodManager) this.context.getSystemService(Context.INPUT_METHOD_SERVICE);

    // I'VE TRIED ALL THREE BELOW, NONE OF THEM WORK...

        // imm.hideSoftInputFromWindow(this.messageView.getWindowToken(), 0);
        // imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        // this.context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
4

3 回答 3

12

看到这个答案。基本上,您需要让 ViewPagerOnPageChangeListener为您隐藏键盘。(如果您希望滑动动画保持流畅,请在onPageScrollStateChanged而不是.)中执行此操作onPageSelected。)

@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);
        }
    }
}
于 2013-10-30T15:35:30.057 回答
0

在您的 AndroidManifest 中,您应该添加到 Activity 声明 android:windowSoftInputMode="stateHidden":

<activity 
        android:name="YourActivity"            
        android:windowSoftInputMode="stateHidden">           
</activity>

并在您的布局中从 EditText 的子 requestFocus 中删除:

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="15dp"
    android:ems="10" >
    <requestFocus />
</EditText>
于 2012-08-28T22:04:18.050 回答
0
    getActivity().getWindow().setSoftInputMode(
                  WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
于 2013-11-29T09:55:17.280 回答