Событие скрытия клавиатуры с клавишей BACK - PullRequest
8 голосов
/ 03 октября 2011

Я заметил в Android Market Application, когда вы нажимаете на кнопку поиска, она показывает клавиатуру, но когда вы нажимаете кнопку back, поиск EditText становится невидимым, а keyboard скрывается , Проблема в том, что я не могу скрыть EditText после того, как клавиатура скрыта после нажатия клавиши «назад», потому что я не могу найти слушателя для скрытия события клавиатуры. Я нашел этот пример Как перехватить событие «показать / скрыть виртуальную клавиатуру» в Android? но он не работает на программной клавиатуре.

Ответы [ 5 ]

21 голосов
/ 09 октября 2011

Необходимо реализовать это, чтобы захватить кнопку НАЗАД, прежде чем она будет отправлена ​​в IME:

http://developer.android.com/reference/android/view/View.html#onKeyPreIme(int, android.view.KeyEvent)

3 голосов
/ 03 октября 2011

Я думаю, вы должны справиться с этим, используя фокус:

 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 голосов
/ 24 июля 2015
    **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");
                        }
                    });
                }

            }
0 голосов
/ 10 октября 2011

Приложение Google Market использует фрагменты через пакет поддержки API. Когда вы нажимаете назад, он на самом деле возвращается в стек фрагментов. Это похоже на возврат активности без прокрутки экрана. Фрагмент, к которому они возвращаются, не содержит поле поиска, поэтому оно исчезает.

0 голосов
/ 07 октября 2011

Привет, я думаю, что маркетинговое приложение использует диалог googleSearch (проверьте Запрашиваемая активность ).

Вы можете реализовать editText в popupWindow и установить окно poupwindow как фокусируемое. Показать клавиатуру, когда отображается ваше всплывающее окно. в OnDisiss скрыть клавиатуру.

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

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

Это гарантирует, что вы щелкаете в любом месте вне всплывающего окна или нажимаете назад, всплывающее окно также исчезает (вместе с клавиатурой).

...