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

265

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

Fcoder
источник
93
в вашем манифесте<activity android:windowSoftInputMode="stateHidden" ...>
идиоттигер
1
возможное дублирование автоматической экранной клавиатуры Android
Caleb
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"
        ...
        >

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

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

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

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

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

<application android:theme="@style/MyTheme">
Dira
источник
как этот глобальный подход.
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"
      >
Androidify
источник
11

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

SaraVF
источник
9

Просто добавьте в AndroidManifest.xml

<activity android:name=".HomeActivity"  android:windowSoftInputMode="stateHidden">
</activity>
Даянанд Вагмаре
источник
8

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

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

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

Androido
источник
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();
}
Efe ÖZYER
источник
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)
}
Trevor.Screws
источник
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);
}
Хайтем Суисси
источник