Запретить отображение клавиатуры при запуске активности
У меня есть активность с Edit Text
вход. Когда действие инициализировано, отображается клавиатура Android. Как клавиатура может оставаться скрытой, пока пользователь не сфокусирует ввод?
19 ответов
Я думаю, что следующее может работать
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Я использовал это для такого рода вещей раньше.
Попробуйте это также -
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"
...
>
Это будет скрывать клавиатуру, когда это необходимо, но панорамировать вид деятельности в случае, если клавиатура должна быть показана.
Скрыть это для всех действий, использующих тему
<style name="MyTheme" parent="Theme">
<item name="android:windowSoftInputMode">stateHidden</item>
</style>
установить тему
<application android:theme="@style/MyTheme">
Добавьте эти два свойства в родительский макет (например: линейный макет, относительный макет)
android:focusable="false"
android:focusableInTouchMode="false"
Это сделает свое дело:)
Если вы используете API уровня 21, вы можете использовать editText.setShowSoftInputOnFocus(false);
Попробуйте объявить это в файле описания
<activity android:name=".HomeActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden"
>
Просто добавьте в AndroidManifest.xml
<activity android:name=".HomeActivity" android:windowSoftInputMode="stateHidden">
</activity>
Вы также можете написать эти строки кода в родительском макете 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 не может непосредственно фокусироваться.
До свидания!;-)
Лучшее решение для меня, вставь свой класс
@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();
}
Просто добавьте это в ваш файл manifest.xml
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateHidden">
Вы все сделали.
Чтобы расширить принятый ответ @Lucas:
Назовите это из своей активности в одном из событий раннего жизненного цикла:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Kotlin Пример:
override fun onResume() {
super.onResume()
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}
Функция скрытия клавиатуры.
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">
Вы можете попробовать этот набор уникальных атрибутов для каждого элемента
TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);
Клавиатура не будет отображаться, пока элемент находится в фокусе
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 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);
}
Объявите этот код ( android:windowSoftInputMode="stateAlwaysHidden") в манифесте внутри вашего тега активности.
как это:
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateAlwaysHidden">
Только это решение работало у меня на API 26 и Kotlin.
override fun onResume() {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
super.onResume()
}
Или вы можете использовать фокусируемый тег в xml.
android:focusable= "false"
установите значение false. вот фрагмент кода
Это происходит, когда вы EditText является первым представлением, которое получает фокус, когда вы начинаете свою деятельность. Таким образом, вы можете надежно решить эту проблему без какого-либо кода, просто установив начальный Focus в какой-то другой вид. Вы можете сделать это в XML, код не требуется.
Пример:
<Button
android:id="@+id/mybutton">
<requestFocus />
</Button>