Скрытие программной клавиатуры при наборе текста в EditText в Android 4

Пишу калькулятор для Android, для ввода выражений использую EditText. Как я создаю свои кнопки - программная клавиатура мне не нужна, но я хочу менять положение курсора, выделение текста, копировать, вставлять. Одним словом - все как есть, только не отображается виртуальная клавиатура. В версии 2.3 я мог написать:

EditText.setInputType (InputType.TYPE_NULL);

и это сработало отлично. В 4 версии не отображается курсор, не работает меню и т.д. Перепробовал кучу способов - нельзя двигать курсор, отображается клавиатура, и ни разу толком не объяснил.

InputMethodManager imm = (InputMethodManager)getSystemService(
    Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); //cursor not showing
------------------------------------------------------------------------
getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); //not working

Хочу сделать как в Panecal, MobiCalc Free, Scientific Calculator. Буду рад любым полезным предложениям по этому поводу. P.S. Извините за мой английский.


person user1814546    schedule 10.11.2012    source источник


Ответы (2)


По ссылке, размещенной ниже, приведен пример использования при касании для Edittext.

editText_input_field.setOnTouchListener(otl);

private OnTouchListener otl = new OnTouchListener() {
    public boolean onTouch (View v, MotionEvent event) {
            return true; // the listener has consumed the event
    }
 };

Вот еще пример с того же сайта. Это утверждает, что работает, но кажется плохой идеей, поскольку ваш EditBox равен NULL, он больше не будет редактором:

MyEditor.setOnTouchListener(new OnTouchListener(){ 
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int inType = MyEditor.getInputType(); // backup the input type
        MyEditor.setInputType(InputType.TYPE_NULL); // disable soft input
        MyEditor.onTouchEvent(event); // call native handler
        MyEditor.setInputType(inType); // restore input type
        return true; // consume touch even
   }
});

Надеюсь, это укажет вам правильное направление

Вышеупомянутый ответ был взят из - >как заблокировать виртуальную клавиатуру при нажатии на edittext в android?

Это тоже может сработать getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

person jcw    schedule 10.11.2012
comment
в первом случае клавиатура скрыта, курсор моргает, но я не могу его двигать; второй случай такой же, но курсор установлен в начале выражения; третий случай абсолютно ни на что не влияет. Спасибо за попытку помочь. - person user1814546; 10.11.2012
comment
Если вы погуглите, как остановить появление программной клавиатуры, вы получите больше результатов. - person jcw; 10.11.2012

Точное решение этой проблемы — установить для флага textIsSelectable в EditText значение true. Это сохранит курсор, и вы сможете использовать основные функции выбора/копирования/вырезания/вставки и т. д. Вы можете установить его в своем макете xml следующим образом:

Вы можете установить его программно следующим образом:

EditText edit_text = (EditText) findViewById(R.id.editText);
edit_text.setTextIsSelectable(true);

Или в вашем XML-макете:

<EditText
    ...
    android:textIsSelectable="true"
/>

Для тех, кто использует API 10 и ниже, хак предоставляется здесь: https://stackoverflow.com/a/20173020/7550472

person Kaushik NP    schedule 14.02.2017