Отключить программную клавиатуру в Android, пока не будет выбран EditText - PullRequest
1 голос
/ 10 августа 2011

как я могу предотвратить исчезновение программной клавиатуры до тех пор, пока не будет выбран определенный EditText? У меня есть несколько EditTexts в моем макете, когда он открывается, первый выбирается автоматически и отображается программная клавиатура.

Я знаю, что могу отключить это, установив Android: focusable = "false". Но тогда невозможно щелкнуть элемент и отобразить его.

Что я хочу: действие начинается, и пользователь видит все EditTexts, затем он нажимает на один из них, и открывается программная клавиатура, и в EditText можно вводить данные. Возможно ли это?

Ответы [ 3 ]

13 голосов
/ 10 августа 2011

В вашей деятельности onCreate()

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
1 голос
/ 27 сентября 2011

Я пытаюсь сделать так, чтобы клавиатура появлялась только тогда, когда пользователь нажимает на 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);

EDIT:

Я просто делаю пользовательский текст для удобного использования в моем проекте, надеюсь, он был полезен.

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

}
0 голосов
/ 10 августа 2011
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);
            }

        }
    });

этот код имеет хороший эффект для обработки фокуса и отображения клавиатуры ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...