在外部单击时在 Fragment 中隐藏 Android 软键盘

Hide Android soft keyboard in Fragment when clicked on outside(在外部单击时在 Fragment 中隐藏 Android 软键盘)
本文介绍了在外部单击时在 Fragment 中隐藏 Android 软键盘的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个包含用于输入的 EditText 的片段,但现在我想在用户单击 EditText 之外的屏幕时关闭键盘.

I have a fragment containing an EditText for input, but now I want to close the keyboard when the user clicks on the screen outside of the EditText.

我知道如何在活动中执行此操作,但对于片段来说似乎有所不同.

I know how to do this in an activity, but it seems to be different for fragments.

我在 view.onTouchListener 上调用这个方法

i am calling this method on view.onTouchListener

public static void hideSoftKeyboard() {
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);

inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
}

谁有解决办法,谢谢

推荐答案

在fragment的父Activity中重写如下方法:

In the parent Activity of the fragment override the following method:

 @Override
public boolean dispatchTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        View v = getCurrentFocus();
        if ( v instanceof EditText) {
            Rect outRect = new Rect();
            v.getGlobalVisibleRect(outRect);
            if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
                v.clearFocus();
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
            }
        }
    }
    return super.dispatchTouchEvent(event);
}

并且在片段的布局中使用这个属性:

And in the layout of the fragment use this attribute:

android:focusableInTouchMode="true"

希望这会对你有所帮助.

Hope this will help you.

这篇关于在外部单击时在 Fragment 中隐藏 Android 软键盘的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How can I use CClistview in COCOS2d Android?(如何在 COCOS2d Android 中使用 CClistview?)
cocos2d-android: how to display score(cocos2d-android:如何显示分数)
Sqlite database not copied from asset folder Android(Sqlite 数据库未从资产文件夹 Android 复制)
SQLite Database Copy Appears Corrupted When Generated by Device and not Emulator(SQLite 数据库副本在由设备而不是模拟器生成时出现损坏)
Android file copy(安卓文件拷贝)
Android how to detect Copy event of Edittext in android(Android如何在android中检测Edittext的Copy事件)