2011-10-03 69 views
6

我已經注意到了Android Market Application,當你點擊了搜索按鈕,它顯示的鍵盤,但是當你點擊back按鈕,搜索EditText成爲無形和keyboard是隱藏的,這個問題我在按下後退鍵後隱藏鍵盤後不能隱藏EditText,因爲我找不到隱藏鍵盤事件的偵聽器。 我發現這個樣本How to capture the "virtual keyboard show/hide" event in Android? 但軟鍵盤鍵盤隱藏事件

+0

我可能弄錯了,但是如何隱藏鍵盤然後讓EditText不可見? – banzai86

+0

@ banzai86是的,這就是想要做的。 –

回答

3

我想你應該處理這個使用重點不工作:

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對話框(退房Searcheable activity) 。

您可以在popupWindow中實現editText,並將poupwindow設置爲可調焦。顯示彈出窗口時顯示鍵盤。在onDismiss隱藏鍵盤。

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

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

這將確保,您單擊以外的任何地方彈出或壓回彈出的消失以及(連同鍵盤)。

+0

問題是,當顯示鍵盤時,你點擊'Back'鍵,鍵盤會處理後退事件並被隱藏,然後你必須再次點擊'Back'來關閉PopupWindow或'Dialog' –

+0

我想你可能也想重寫返回按鈕並手動關閉彈出窗口。 – rDroid

0

的谷歌電子市場的應用程序使用的片段。當你點擊回來的時候,它實際上會回到片段堆棧中。這就像在沒有屏幕滑動的情況下返回活動。他們返回的片段不包含搜索框,這是它消失的原因。

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

      } 
+0

更換與實際代碼的鏈接更好..但仍不完美:請不要發佈相同的答案多個問題。發佈一個很好的答案,然後投票/標記以重複關閉其他問題。如果問題不是重複的, – kleopatra