更改标签时如何隐藏软键盘?

时间:2012-04-24 11:57:59

标签: android android-listview

编辑:似乎我没有说清楚。我需要的是一种在我替换我所在的片段时隐藏软键盘的方法。我该怎么做呢?

让我保持这个简单。我在Tab Fragment 1.2中有一个EditText框,显然在按下时会打开软键盘。更改选项卡时如何隐藏?我在我的onTabSelected()中尝试了以下操作,它似乎没有做任何事情

getWindow().setSoftInputMode(
                  WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

我现在已经尝试了一切。到目前为止,我所提出的解决方案都没有以任何方式帮助我。

4 个答案:

答案 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()方法更改标签之前将以下代码放在我的标签片段中。在初始选项卡选择之后,不会触发每个片段中的onCreateonCreateView方法,因此可以在到达特定片段的类之前隐藏键盘。使用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>,那么也要删除这一行。

尝试一下我认为它应该有用。