当前位置: 首页 > 面试题库 >

如何从片段内部隐藏软键盘?

程英资
2023-03-14
问题内容

我有一个FragmentActivity使用ViewPager服务几个片段。每个都是ListFragment具有以下布局的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="8dp">
        <ListView android:id="@id/android:list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

        <EditText android:id="@+id/entertext"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

开始活动时,将显示软键盘。为了解决这个问题,我在片段中做了以下操作:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //Save the container view so we can access the window token
    viewContainer = container;
    //get the input method manager service
    imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    . . .
}

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

    //Hide the soft keyboard
    imm.hideSoftInputFromWindow(viewContainer.getWindowToken(), 0);
}

我将传入的ViewGroup container参数保存onCreateView为一种访问主要活动的窗口令牌的方式。这可以正常运行,但是不会打扰到hideSoftInputFromWindowin
的键盘onStart

最初,我尝试使用膨胀布局代替container,即:

imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);

但这引发了NullPointerException,大概是因为该片段本身不是活动,并且没有唯一的窗口令牌吗?

是否可以从片段中隐藏软键盘,还是应该在中创建一个方法FragmentActivity并从片段中调用它?


问题答案:

只要您的片段创建一个视图,就可以在附加了该视图 之后
从该视图使用IBinder(窗口令牌)。例如,您可以在Fragment中覆盖onActivityCreated:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
}


 类似资料:
  • 有很多关于查找显示/隐藏软键盘事件的帖子。我发现自己的处境是,我需要根据软键状态在片段中更改图标。 我试图实现onMeasure,但我无法在片段中覆盖它。是否有一种(相对)无痛的方式可以在我的片段中获得清晰的显示/隐藏软键盘事件,或者我应该放弃?

  • 当我的应用程序中的键盘打开时,BottomNavigationView会附加到键盘上。所以我在Android中添加了Android: windowSoftInputMode=“调整潘”,但现在键盘覆盖了内容的底部。也就是说,ScrollView无法更改键盘的最大高度。仿佛断片没有看到键盘何时开启。我如何显示键盘,使片段适应和BottomNavigationView消失。请帮助我。

  • 我有一个AutoCompleteTextView,它像往常一样在用户键入3个字母后提供建议。一旦我触摸建议列表,我想隐藏软键盘一次。我在下面用表格布局所做的只是在单击除建议列表之外的任何地方时隐藏键盘。 可扩展置标语言 爪哇岛 用于自定义列表的 XML

  • 我有一个在清单中带有< code > Android:windowSoftInputMode = " state visible " 的Edittext。现在,当我开始活动时,键盘会显示出来。怎么隐藏?我不能使用< code > Android:windowSoftInputMode = " state hidden ,因为当键盘可见时,最小化应用程序并恢复它,键盘应该是可见的。我试着 但它没有起

  • 我有三个编辑文本字段。在这些字段中,我想只显示第一个字段的软输入键盘,并禁用后面两个字段,即日期和时间字段。 通过使用下面的代码,我可以禁用字段2和字段3的键盘,但当用户关注字段1时,键盘会出现,但当用户点击字段2或字段3时,键盘不会隐藏。虽然当第一次点击字段2或3时,不会出现键盘。 如果软输入键盘已打开,如何隐藏它?

  • 我需要隐藏软键盘以响应单击按钮。我看到了一些关于这方面的帖子,我尝试了: 这很有效。但现在我有两个EditText视图。无论选择了哪个EditText,现在如何隐藏软键盘?我也试过了 ,但那不起作用... 谢谢你的帮助! 编辑:找到解决方案。贴在下面。