Reputation: 453
how can I prevent the software keyboard to disappear until a specific EditText is choosen? I have several EditTexts in my Layout when it is opened the first is automatically selected and the software keyboard is shown.
I know i can disable this by setting android:focusable="false". But then it is impossible to click on the item and get the item displayed.
What I want: The activity is started and the user sees all EditTexts, then he clicks on one and the software keyboard opens and stuff can be entered in the EditText. Is this possible?
Upvotes: 1
Views: 4046
Reputation: 46
I try this to make the keyboard appear only when user clicks on edittext, all the other solutions don't work for me. It's a bit weird but from now it's the solution I found. You must put this events in all edittexts on the layout.
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);
}
}
};
Like this:
EditText text = (EditText) getActivity().findViewById(R.id.myText);
text.setText("Some text");
text.setFocusableInTouchMode(false);
text.setOnClickListener(click);
text.setOnFocusChangeListener(focus);
EDIT:
I just make a custom edit text to make easy to use in my project, hope it was usefull.
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);
}
}
});
}
}
Upvotes: 1
Reputation: 5531
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);
}
}
});
this code has good effect for focus handling and keyboard display...
Upvotes: 0
Reputation: 2658
In your activity onCreate()
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Upvotes: 13