在Android中禁用软件键盘,直到选中EditText

时间:2011-08-10 10:10:00

标签: android android-layout android-softkeyboard

如何在选择特定的EditText之前阻止软件键盘消失?打开时,我的布局中有几个EditTexts,第一个自动选择并显示软件键盘。

我知道我可以通过设置android:focusable =“false”来禁用它。但是之后无法点击该项目并显示该项目。

我想要的:活动开始,用户看到所有的EditTexts,然后他点击一个,打开软件键盘,可以在EditText中输入内容。这可能吗?

3 个答案:

答案 0 :(得分:13)

在您的活动中onCreate()

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

答案 1 :(得分: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);
                }
            }
        });
    }

}

答案 2 :(得分: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);
            }

        }
    });

此代码对焦点处理和键盘显示有很好的效果......