编辑:似乎我没有说清楚。我需要的是一种在我替换我所在的片段时隐藏软键盘的方法。我该怎么做呢?
让我保持这个简单。我在Tab Fragment 1.2中有一个EditText框,显然在按下时会打开软键盘。更改选项卡时如何隐藏?我在我的onTabSelected()中尝试了以下操作,它似乎没有做任何事情
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
我现在已经尝试了一切。到目前为止,我所提出的解决方案都没有以任何方式帮助我。
答案 0 :(得分:12)
以编程方式使用,捕获设备屏幕上活动活动的视图。
public final void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) {
View focus = getCurrentFocus();
if (focus != null) {
hiddenKeyboard(focus);
}
}
public final void onTabselected(Tab tab, FragmentTransaction fragmentTransaction) {
View focus = getCurrentFocus();
if (focus != null) {
hiddenKeyboard(focus);
}
}
public final void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) {
View focus = getCurrentFocus();
if (focus != null) {
hiddenKeyboard(focus);
}
}
private void hiddenKeyboard(View v) {
InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
答案 1 :(得分:6)
我遇到了同样的问题,并在使用FragmentTransaction.replace()
方法更改标签之前将以下代码放在我的标签片段中。在初始选项卡选择之后,不会触发每个片段中的onCreate
和onCreateView
方法,因此可以在到达特定片段的类之前隐藏键盘。使用mTabHost.getApplicationWindowToken()
而非editText.getWindowToken()
是一项重要帮助。感谢无论谁找到了。对不起,我丢失了链接。
InputMethodManager im = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(mTabHost.getApplicationWindowToken(), 0);
.......
fm = getFragmentManager();
....
fm.beginTransaction()
.replace(placeholder, new someFragment(), tabId)
.commit();
答案 2 :(得分:2)
这是启用软键盘的方法
inputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
这就是切换标签时关闭它的方法。
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(editText.getWindowToken(), 0);
答案 3 :(得分:-1)
在您的XML文件中,只需从任何位置删除android:focusable="true"
。
还有一件事是,如果你使用<requestfocus></requestfocus>
,那么也要删除这一行。
尝试一下我认为它应该有用。