Android软键盘不会消失

问题描述:

所以我有一个最初被禁用的EditText。当我按下一个按钮时,它将启用它,并自动打开软键盘。Android软键盘不会消失

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 

mgr.showSoftInput(etToDelete, InputMethodManager.SHOW_FORCED); 

在我输入一些文本后,我按EditText,它应该使其再次禁用并隐藏打开的键盘。

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 

mgr.hideSoftInputFromWindow(((EditText)view).getWindowToken(), 0); 

但是,它所做的是非常快地关闭,然后重新打开它。我的GUESS是当你通常按下一个EditText它会打开键盘,所以在这种情况下,即使我关闭它,它重新打开它,因为:(

什么是解决方案?我已经尝试了几种方法当我按下EditText时,我停止显示键盘,但是我没有成功,如果有人能够给我一个具体的例子,应该怎么做,我会很感激。

+0

ü可以上传你的代码更简单的听众,让我们可以清楚的发现概率.. – Sniper 2012-02-17 13:44:33

我有同样的问题,我解决了:

首先创建一个类KeyBoardManager:

import android.content.Context; 
import android.os.Handler; 
import android.view.inputmethod.InputMethodManager; 

public class KeyBoardManager { 

    public KeyBoardManager(Context context) { 
     final Handler handler = new Handler(); 
     final InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while(true){ 
        try{Thread.sleep(100);}catch (Exception e) {} 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          if(!imm.isAcceptingText()){ 
           imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS); 
          } 
         } 
        }); 
       } 
      } 
     }).start(); 
    } 
} 

,并在第一个活动的方法的onCreate创建KeyBoardManager像一个新的实例:对于]

(new Handler()).postDelayed(new Runnable() { 
    editText.requestFocus(); 
    editText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0)); 
    editText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0)); 
}, 200); 

每一个方法:

public class Main extends Activity {  
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     new KeyBoardManager(this); 
    } 
} 

,当你的EditText在屏幕上绘制的冷杉一次调用隐藏键盘开始片段没有工作对我来说,当,但是这使得它,所以尝试一下,也许

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);