2011-08-10 31 views
1

我怎麼能防止軟鍵盤消失,直到一個特定的EditText是choosen?當我的佈局打開時,我有幾個EditTexts,第一個被自動選擇並顯示軟件鍵盤。Android中禁用軟件鍵盤,直到EditText上選擇

我知道我可以通過設置機器人禁用此:可聚焦=「假」。但是,然後點擊該項目並顯示該項目是不可能的。

我想要什麼:活動已啓動,用戶可以看到所有EditTexts,那麼他點擊一個軟件鍵盤打開之類的東西可以在EditText上輸入。這可能嗎?

回答

12

在你的活動onCreate()

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
+0

這個工作剛剛好。謝謝 :) –

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

    txt1.setOnFocusChangeListener(new OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if(!(hasFocus || txt2.hasFocus())) 
      { 
      mgr.hideSoftInputFromWindow(txt1.getWindowToken(), 0); 
      } 

     } 
    }); 

此代碼對重點處理和鍵盤顯示效果很好...

1

我嘗試這使鍵盤只出現在用戶點擊的EditText ,所有其他解決方案都不適合我。 這是一個有點怪異,但是從現在這是我找到了解決辦法。 你必須把這個事件中對佈局的所有edittexts。

OnClickListener click = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     v.setFocusableInTouchMode(true); 
     v.requestFocusFromTouch(); 
    } 
}; 
OnFocusChangeListener focus = new OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (!hasFocus) { 
      v.setFocusableInTouchMode(false); 
     } 
    } 
}; 

像這樣:

EditText text = (EditText) getActivity().findViewById(R.id.myText); 
text.setText("Some text"); 
text.setFocusableInTouchMode(false); 
text.setOnClickListener(click); 
text.setOnFocusChangeListener(focus); 

編輯:

我只是做一個自定義編輯文本使其容易在我的項目中使用,希望它是有用的。

public class EditTextKeyboardSafe extends EditText { 
    public EditTextKeyboardSafe(Context context) { 
     super(context); 
     initClass(); 
    } 

    public EditTextKeyboardSafe(Context context, AttributeSet attrs, 
      int defStyle) { 
     super(context, attrs, defStyle); 
     initClass(); 
    } 

    public EditTextKeyboardSafe(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initClass(); 
    } 

    private void initClass() { 
     this.setFocusableInTouchMode(false); 
     this.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       v.setFocusableInTouchMode(true); 
       v.requestFocusFromTouch(); 
      } 
     }); 
     this.setOnFocusChangeListener(new OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (!hasFocus) { 
        v.setFocusableInTouchMode(false); 
       } 
      } 
     }); 
    } 

}