2012-02-17 95 views
1

所以我有一個最初被禁用的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

回答

1

我有同樣的問題,我解決了:

首先創建一個類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); 
1

每一個方法:

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