我怎麼能防止軟鍵盤消失,直到一個特定的EditText是choosen?當我的佈局打開時,我有幾個EditTexts,第一個被自動選擇並顯示軟件鍵盤。Android中禁用軟件鍵盤,直到EditText上選擇
我知道我可以通過設置機器人禁用此:可聚焦=「假」。但是,然後點擊該項目並顯示該項目是不可能的。
我想要什麼:活動已啓動,用戶可以看到所有EditTexts,那麼他點擊一個軟件鍵盤打開之類的東西可以在EditText上輸入。這可能嗎?
我怎麼能防止軟鍵盤消失,直到一個特定的EditText是choosen?當我的佈局打開時,我有幾個EditTexts,第一個被自動選擇並顯示軟件鍵盤。Android中禁用軟件鍵盤,直到EditText上選擇
我知道我可以通過設置機器人禁用此:可聚焦=「假」。但是,然後點擊該項目並顯示該項目是不可能的。
我想要什麼:活動已啓動,用戶可以看到所有EditTexts,那麼他點擊一個軟件鍵盤打開之類的東西可以在EditText上輸入。這可能嗎?
在你的活動onCreate()
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
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);
}
}
});
此代碼對重點處理和鍵盤顯示效果很好...
我嘗試這使鍵盤只出現在用戶點擊的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);
}
}
});
}
}
這個工作剛剛好。謝謝 :) –