我有一个Android应用程序,它包含一个带有2个片段的ViewPager。第一个片段包含一个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);
}
看看这个答案。基本上,您需要让ViewPager的OnPageChangeListener
为您隐藏键盘。(如果您希望滑动动画保持平滑,请在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);
}
}
}
在您的AndroidManifest中,您应该将android:windowSoftInputMode="stateHidden":添加到活动声明中
<activity
android:name="YourActivity"
android:windowSoftInputMode="stateHidden">
</activity>
在您的布局中,从EditText的子请求中删除Focus:
<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>
getActivity().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);