Запретить отображение клавиатуры при запуске активности


265

У меня есть активность с Edit Textвходом. Когда действие инициализировано, отображается клавиатура Android. Как клавиатура может оставаться скрытой, пока пользователь не сфокусирует ввод?


93
в вашем манифесте<activity android:windowSoftInputMode="stateHidden" ...>
идиоттигер


1
Как использовать вместе с android:windowSoftInputMode="adjustPan"?
Янош

4
@ Янош android: windowSoftInputMode = "AdjustPan | StateHidden"
Алексей

ответ в этом комментарии был ответом, который я ищу: stackoverflow.com/a/23605510/6942602
korchix

Ответы:


436

Я думаю, что следующее может работать

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

Я использовал это для такого рода вещей раньше.


Есть ли способ установить его как цифровую клавиатуру? т.е. 12 клавиш клавиатуры?
Мохамед Хамис,

@MohamedKhamis input.setRawInputType (Configuration.KEYBOARD_12KEY);
blockwala

1
Да, это все еще работает. @SagarNayak почему вы хотите скрыть клавиатуру для EditText? :) Это чтобы скрыть клавиатуру, когда начинается активность, которая содержитEditText
Martynas

@Devealte 7 лет спустя, и это сработало для меня, вы поместили его в onCreate?
Dymas

@Dymas Да, и я только что исправил это несколько месяцев назад :)
Devealte

180

Попробуйте это также -

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

В противном случае объявите в файле манифеста активность -

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
          android:label="@string/app_name"
          android:windowSoftInputMode="stateHidden"
          >

Если вы уже использовали android:windowSoftInputModeдля значения как adjustResizeили adjustPan, вы можете объединить два значения, как:

<activity
        ...
        android:windowSoftInputMode="stateHidden|adjustPan"
        ...
        >

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


3
спасибо за показ как в коде, так и в xml! Действительно, это самый правильный ответ! Тем более , что это было , вероятно , что 3 минуты вы потратили писать оба метода , которые сделали не первый ;-)
Эриком

34

Скрыть это для всех действий, используя тему

<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

установить тему

<application android:theme="@style/MyTheme">

как этот глобальный подход.
Rm558

1
Это работало, поскольку я использовал разные темы в разных местах
nmxprime

22

Добавьте эти два свойства в родительский макет (например: линейный макет, относительный макет)

android:focusable="false"
android:focusableInTouchMode="false" 

Это сделает свое дело :)


2
Это не работает для меня, однако установка их на trueработу, согласно ответу Джека Т. Было ли изменение поведения в последних версиях?
Протан

В дополнение к моему ответу, вам нужно проверить и другие свойства, которые у вас есть в манифесте и для редактирования текста.
Король Месс

У меня просто есть самые основные свойства в них. Я не понимаю, почему их установка falseдолжна работать, поскольку идея состоит в том, чтобы отвлечь внимание от полей EditText.
Протан

Может быть, раньше он отвлекал внимание от полей EditText, удаляя его от родительского макета? Но, похоже, больше нет.
Протан

13

Попробуйте объявить это в файле описания

<activity android:name=".HomeActivity"
      android:label="@string/app_name"
      android:windowSoftInputMode="stateAlwaysHidden"
      >

11

Если вы используете API уровня 21, вы можете использовать editText.setShowSoftInputOnFocus (false);



8

Просто добавьте это в ваш файл manifest.xml

<activity android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">

Вы все сделали.


7

Вы также можете написать эти строки кода в прямом родительском макете XML-файла макета, в котором у вас есть «проблема»:

android:focusable="true"
android:focusableInTouchMode="true"

Например:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ...
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/myEditText"
        ...
        android:hint="@string/write_here" />

    <Button
        android:id="@+id/button_ok"
        ...
        android:text="@string/ok" />
</LinearLayout>


РЕДАКТИРОВАТЬ :

Пример, если EditText содержится в другом макете:

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ... >                                            <!--not here-->

    ...    <!--other elements-->

    <LinearLayout
        android:id="@+id/theDirectParent"
        ...
        android:focusable="true"
        android:focusableInTouchMode="true" >        <!--here-->

        <EditText
            android:id="@+id/myEditText"
            ...
            android:hint="@string/write_here" />

        <Button
            android:id="@+id/button_ok"
            ...
            android:text="@string/ok" />
    </LinearLayout>

</ConstraintLayout>

Ключ должен удостовериться, что EditText не может непосредственно фокусироваться.
До свидания! ;-)


6

Лучшее решение для меня, вставь свой класс

@Override
public void onResume() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onResume();
}

@Override
public void onStart() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onStart();
}

3

Функция скрытия клавиатуры.

public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();

    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

Скрыть клавиатуру в файле AndroidManifext.xml.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">

3

Чтобы расширить принятый ответ @Lucas:

Назовите это из своей активности в одном из событий раннего жизненного цикла:

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

Котлин Пример:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

2

Вы можете попробовать этот набор уникальных атрибутов для каждого элемента

TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

Клавиатура не будет отображаться, пока элемент находится в фокусе


Хотя это может ответить на вопрос авторов, в нем отсутствуют некоторые поясняющие слова и / или ссылки на документацию. Фрагменты исходного кода не очень полезны без каких-либо фраз вокруг них. Вы также можете найти, как написать хороший ответ очень полезно. Пожалуйста, измените свой ответ - Из обзора
Ник

1
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

0

просто добавьте это в свою активность:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
      if (getCurrentFocus() != null) {
           InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      }
      return super.dispatchTouchEvent(ev);
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.