6

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

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

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

我现在什么都试过了。到目前为止,我找到的建议解决方案都没有以任何方式帮助我。

4

5 回答 5

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);
    }
于 2014-01-28T10:12:40.220 回答
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();
于 2012-07-13T19:12:37.920 回答
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);
于 2012-04-24T12:03:16.273 回答
2

在 mainActivity 中将 OnPageChangeListener 设置为 viewpager 将片段添加到 viewPager 的位置

  viewPager.setOnPageChangeListener(myOnPageChangeListener);




   ViewPager.OnPageChangeListener myOnPageChangeListener =
            new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageScrollStateChanged(int state) {
                //Called when the scroll state changes.

            }

            @Override
            public void onPageScrolled(int position,
                                       float positionOffset, int positionOffsetPixels) {
                //This method will be invoked when the current page is scrolled,
                //either as part of a programmatically initiated smooth scroll
                //or a user initiated touch scroll.

                hideKeyboard();
            }

            @Override
            public void onPageSelected(int position) {
                //This method will be invoked when a new page becomes selected.
                //hide keyboard when any fragment of this class has been detached
                hideKeyboard();
            }
        };







public  void hideKeyboard() {
    InputMethodManager inputManager = (InputMethodManager)getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);

    // check if no view has focus:
    View v = getCurrentFocus();
    if (v == null)
        return;

    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
于 2016-08-16T06:52:47.033 回答
-2

在您的 XML 文件中,只需android:focusable="true"从任何地方删除即可。

另一件事是,如果您正在使用<requestfocus></requestfocus>then 也删除此行。

试试吧,我认为它应该工作。

于 2012-04-24T12:14:32.263 回答