Как спрятать программную клавиатуру Android на EditText - PullRequest
46 голосов
/ 25 января 2012

У меня есть Activity с некоторыми полями EditText и несколькими кнопками для удобства, которые обычно используются для заполнения этих полей.Однако, когда пользователь касается одного из полей EditText, автоматически появляется программная клавиатура Android.Я хочу, чтобы он оставался скрытым по умолчанию, , если пользователь долго не нажимает кнопку меню.Я нашел решение для этого и нашел несколько ответов, но пока не могу заставить их работать.

Я пробовал следующее:

1 - В методе onCreate,

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

2 - Также в методе onCreate

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);

3 - и в файле манифеста

<activity android:name=".activityName" android:windowSoftInputMode="stateAlwaysHidden"/>

Ни один из этих методов не работает.Всякий раз, когда пользователь нажимает на поле EditText, появляется программная клавиатура.Я хочу, чтобы экранная клавиатура появлялась только в том случае, если пользователь явно показывает ее, долгое нажатие клавиши меню.

Почему это не работает?

Ответы [ 16 ]

0 голосов
/ 19 февраля 2019

Просто используйте метод ниже

private fun hideKeyboard(activity: Activity, editText: EditText) {
    editText.clearFocus()
    (activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(editText.windowToken, 0)
}
0 голосов
/ 30 января 2019

Здравствуйте. Используйте этот код, он работает на 100% для меня

EditText ee=new EditText(this);
ee.setShowSoftInputOnFocus(false);

* Но вы хотите просто скрыть клавиатуру при нажатии на текст редактирования, указанный ниже код будет работать, но значок клавиатуры и вверхзнак кнопки назад создаст * Данный код выглядит следующим образом:

        EditText ee=new EditText(this);//create edittext
        final   View.OnTouchListener disable =new View.OnTouchListener() {
        public boolean onTouch (View v, MotionEvent event) {
        v.onTouchEvent(event);
        InputMethodManager img = 
        (InputMethodManager)v.getContext().getSystemService(INPUT_METHOD_SERVICE);
        if (img != null) {
        img.hideSoftInputFromWindow(v.getWindowToken(),0);
        }
        return true;
        }
        };
        //call touch listener
       ee.setOnTouchListener(disable);

Используйте его также в случае слушателя с изменяющимся текстом

        EditText ee= new EditText(this);
        Text=new TextWatcher(){

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int 
        after) {
        InputMethodManager img = (InputMethodManager) 
        getSystemService(INPUT_METHOD_SERVICE);
        img.hideSoftInputFromWindow(ee.getWindowToken(), 0);

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        InputMethodManager img = (InputMethodManager) 
        getSystemService(INPUT_METHOD_SERVICE);
        img.hideSoftInputFromWindow(ee.getWindowToken(), 0);

        }
       @Override
        public void afterTextChanged(Editable s) {
        InputMethodManager img = (InputMethodManager) 
        getSystemService(INPUT_METHOD_SERVICE);
        img.hideSoftInputFromWindow(ee.getWindowToken(), 0);

        }
        };
       ee.addTextChangedListener(Text);

Используйте его также в случае прослушивания onclick

 EditText ee=new EditText(this);
 ee.setOnClickListener(new View.OnClickListener() {
 public void onClick(View v) {

 InputMethodManager img= (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
 img.hideSoftInputFromWindow(ee.getWindowToken(),0);

 }});

Весь код будет работать, но для меня первый код лучше

0 голосов
/ 11 июня 2018

Просто используйте EditText.setFocusable(false); в действии

или используйте в xml

android:focusable="false"
0 голосов
/ 20 марта 2018

Скрыть клавиатуру

editText.setInputType(InputType.TYPE_NULL);

Показать клавиатуру

etData.setInputType(InputType.TYPE_CLASS_TEXT);
etData.setFocusableInTouchMode(true);

в родительском макете

android:focusable="false"
0 голосов
/ 13 марта 2018

Три способа, основанные на одной и той же простой инструкции:

а). Результаты так же легко, как найти (1):

android:focusableInTouchMode="true"

среди конфигурации любого прецедентного элемента в макете, пример:

, если весь ваш макет состоит из:

<ImageView>

<EditTextView>

<EditTextView>

<EditTextView>

тогда вы можете записать (1) среди параметров ImageView, и это привлечет внимание андроида к ImageView вместо EditText.

б). Если у вас есть другой элемент прецедента, кроме ImageView, вам может понадобиться добавить (2) к (1) как:

android:focusable="true"

с). Вы также можете просто создать пустой элемент в верхней части ваших элементов представления:

<LinearLayout
  android:focusable="true"
  android:focusableInTouchMode="true"
  android:layout_width="0px"
  android:layout_height="0px" />

Эта альтернатива до этого момента является самой простой из всех, что я видел. Надеюсь, это поможет ...

0 голосов
/ 02 сентября 2015
weekText = (EditText) layout.findViewById(R.id.weekEditText);
weekText.setInputType(InputType.TYPE_NULL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...