使用“返回”键隐藏键盘的事件

8
我注意到在Android市场应用中,当您点击搜索按钮时,它会显示键盘,但是当您点击返回按钮时,搜索EditText变得不可见,而键盘也被隐藏了。问题是,当我找不到隐藏键盘事件的监听器时,无法在按下后隐藏EditText。我发现了这个示例如何在Android中捕获“虚拟键盘显示/隐藏”事件?,但它在软键盘上不起作用。

我可能会理解错误,但是先隐藏键盘,然后再将EditText设置为不可见怎么样? - banzai86
@banzai86,是的,这就是我正在尝试做的事情。 - Mohammad Ersan
5个回答

21

我也觉得很棒。尝试了几个小时的不同焦点和编辑器操作后,这个完美地解决了问题。 - Geobits
这个可以在EditText上工作吗?也就是说我可以在不创建它的子类的情况下在EditText上使用它? - Mahendran

3
我认为你应该使用focus来处理这个问题:
 final InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

    edttext.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(!(hasFocus))
            {   
            mgr.hideSoftInputFromWindow(edttext.getWindowToken(), 0);
            }

        }
    });

0

嘿,我认为市场应用程序正在使用googleSearch对话框(请查看{{link1:可搜索活动}})。

您可以在弹出窗口中实现editText,并将poupwindow设置为可聚焦。当显示您的弹出窗口时,显示键盘。在onDismiss中隐藏键盘。

popupWindow.setFocusable(true);
popupWindow.setOnDismissListener(new OnDismissListener() {

        @Override
        public void onDismiss() {
            // TODO Auto-generated method stub
            inputMethodManager.hideSoftInputFromWindow(
                        edttxtSearchBar.getWindowToken(), 0);           }

这将确保,您单击弹出窗口外部的任何位置或按返回键时,弹出窗口也会消失(连同键盘一起)。


问题在于,当键盘显示时,您点击“返回”键时,键盘将处理返回事件并隐藏,然后您必须再次点击“返回”才能关闭“PopupWindow”或“Dialog”。 - Mohammad Ersan
我猜你可能也想手动覆盖返回按钮并关闭弹出窗口。 - rDroid

0

谷歌市场应用程序正在使用API支持包中的片段。当您单击返回时,实际上是在片段堆栈中返回。这就像没有屏幕滑动返回一个活动一样。他们返回的片段不包含搜索框,这就是为什么它会消失的原因。


-2
    **perfect answer** REFER THIS **SIMPLE EXAMPLE**...ITS TOOOO GOOOODDDD 

            KTBEditTextWithListener.java // Custom edittext

                import android.content.Context;
                import android.util.AttributeSet;
                import android.view.KeyEvent;

                public class KTBEditTextWithListener extends android.widget.EditText {

                    public KTBEditTextWithListener(Context context) {
                        super(context);
                        // TODO Auto-generated constructor stub
                    }

                    public KTBEditTextWithListener(Context context, AttributeSet attrs, int defStyle) {
                        super(context, attrs, defStyle);          
                    //    createFont(context);
                }

                public KTBEditTextWithListener(Context context, AttributeSet attrs) {
                        super(context, attrs);
                      //  createFont(context);
                }


                    private BackPressedListener mOnImeBack;

                    /* constructors */

                    @Override
                    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
                        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
                            if (mOnImeBack != null) mOnImeBack.onImeBack(this);
                        }
                        return super.dispatchKeyEvent(event);
                    }

                    public void setBackPressedListener(BackPressedListener listener) {
                        mOnImeBack = listener;
                    }

                    public interface BackPressedListener {
                        void onImeBack(KTBEditTextWithListener editText);
                    }
                }


    //my_layout.xml
            <?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"
                android:orientation="vertical" >

                <com.ktb.gopharma.views.KTBEditTextWithListener
                    android:id="@+id/edit_text"
                    style="@style/match_width">
                    </com.ktb.gopharma.views.KTBEditTextWithListener>

            </LinearLayout>

    //MyActivity.java

            package com.ktb.gopharma;

            import android.app.Activity;
            import android.os.Bundle;
            import android.view.View;
            import android.view.View.OnClickListener;

            import com.ktb.gopharma.views.KTBEditTextWithListener;
            import com.ktb.gopharma.views.KTBEditTextWithListener.BackPressedListener;
            import com.ktechbeans.gopharma.R;

            public class MyActivity extends BaseActivity {
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.my_layout);

                    KTBEditTextWithListener editText = (KTBEditTextWithListener) findViewById(R.id.edit_text);

                    editText.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            showToast("keypad opn");
                        }
                    });

                    editText.setBackPressedListener(new BackPressedListener() {

                        @Override
                        public void onImeBack(KTBEditTextWithListener editText) {
                             showToast("keypad close");
                        }
                    });
                }

            }

替换链接为实际代码更好,但仍不完美:请勿在多个问题中发布相同的答案。发布一个好的答案,然后投票/标记关闭其他问题作为重复。如果问题不是重复的,请将您的答案量身定制到问题上。 - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接