2011-10-03 71 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