8 Stimmen

Ereignis zum Ausblenden der Tastatur mit der BACK-Taste

Ich habe festgestellt, dass in der Android Market Application Wenn Sie auf die Schaltfläche Suchen klicken, wird die Tastatur angezeigt, aber wenn Sie auf die Schaltfläche back Schaltfläche, die Suche EditText wird unsichtbar und die keyboard verborgen ist. Das Problem ist, dass ich die EditText nachdem die Tastatur nach dem Drücken der Zurück-Taste ausgeblendet wurde, weil ich keinen Listener für das Ausblenden des Tastaturereignisses finden kann. Ich habe dieses Beispiel gefunden Wie erfasst man das Ereignis "Virtuelle Tastatur ein-/ausblenden" in Android? aber es funktioniert nicht auf der Soft-Tastatur.

21voto

hackbod Punkte 89543

Sie müssen dies implementieren, um die BACK-Taste zu erfassen, bevor sie an den IME gesendet wird:

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

3voto

Hanry Punkte 5451

Ich denke, Sie sollten dies mit Hilfe von Fokus behandeln:

 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);
            }

        }
    });

0voto

rDroid Punkte 4687

Hey, ich glaube, die Market-App verwendet den GoogleSearch-Dialog (siehe Auffindbare Aktivität ).

Sie können den editText in ein popupWindow implementieren und das poupwindow als fokussierbar einstellen. Zeigen Sie die Tastatur, wenn Ihr Popup angezeigt wird. in onDismiss verstecken Sie die Tastatur.

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

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

Dadurch wird sichergestellt, dass, wenn Sie irgendwo außerhalb des Popup-Fensters klicken oder die Taste "Zurück" drücken, das Popup-Fenster ebenfalls verschwindet (zusammen mit der Tastatur).

0voto

Brian Griffey Punkte 4731

Die Google Market-Anwendung verwendet Fragmente über das API Support Package. Wenn Sie auf "Zurück" klicken, gehen Sie tatsächlich im Fragmentstapel zurück. Es ist so, als würde man eine Aktivität zurückgehen, ohne den Bildschirm zu wischen. Das Fragment, zu dem sie zurückgehen, enthält nicht das Suchfeld, weshalb es verschwindet.

-2voto

Vikas Kumbhar Punkte 111
    **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");
                        }
                    });
                }

            }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X