如何在editText外单击时隐藏键盘?

时间:2011-10-12 05:29:31

标签: android listview android-edittext

我使用listview进行自定义editText并在点击edittext时编辑edittext数据,并显示键盘正常工作。

我的问题是当我在edittext外面点击时,键盘必须隐藏。

感谢...

4 个答案:

答案 0 :(得分:5)

为此,您必须在布局文件的父布局上使用onTouchListener。在TouchListener上,您必须编码以在EditText外部单击时隐藏键盘。请按照XML Layout和Java类解决此问题,请遵循以下URL。

http://amitthaperandroidquery.blogspot.com/2011/10/remove-keyboard-after-click-outside.html

答案 1 :(得分:2)

一种方法是可以将焦点更改侦听器设置为EditText。 当小部件失去焦点时,您可以通过以下方式隐藏Keyborad: -

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

答案 2 :(得分:0)

您可以通过执行以下步骤来实现此目的:

  1. 通过添加以下属性,使父视图(活动的内容视图)可单击并可聚焦

        android:clickable="true" 
        android:focusableInTouchMode="true" 
    
  2. 实现hideKeyboard()方法

        public void hideKeyboard(View view) {
            InputMethodManager inputMethodManager =(InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    
  3. 最后,设置edittext的onFocusChangeListener。

        edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    hideKeyboard(v);
                }
            }
        });
    
  4. 来自This source

答案 3 :(得分:0)

与接受的答案类似的另一种方法是继承布局的根视图并重写OnInterceptTouchEvent,隐藏键盘并返回false以允许触摸像往常一样传播。

以下示例适用于Xamarin,但很容易移植到Java:

public class KeyboardHidingScrollView : ScrollView
{
    public KeyboardHidingScrollView (Context context) : base (context)
    {
    }

    public KeyboardHidingScrollView (Context context, IAttributeSet attrs) : base (context, attrs)
    {
    }

    public override bool OnInterceptTouchEvent (Android.Views.MotionEvent ev)
    {
        var methodManager = (InputMethodManager)Context.GetSystemService (Context.InputMethodService);
        methodManager.HideSoftInputFromWindow (WindowToken, HideSoftInputFlags.None);
        return false;
    } 
}