Автоматическое отображение экранной клавиатуры Android


140

В одном из моих приложений есть «начальный экран» (в основном меню), за EditTextкоторым следует несколько Buttonбукв s. Проблема в том, что некоторые из моих пользователей сообщают, что, когда они открывают приложение, оно автоматически открывает экранную клавиатуру, даже не касаясь EditText. Насколько я могу судить, все эти пользователи используют HTC Hero .

Это баг в 1.5? Что я могу с этим поделать?


1
Если это ошибка, то, вероятно, это конкретно в Sprint Hero. У Sprint есть версия Android с ошибками на продаваемых ими Heros, и они, похоже, не торопятся выпускать исправления для нее. Между Sprint Heros и всеми другими устройствами Android существует масса различий. Насколько мне известно, в других версиях Hero, например, в Европе, таких проблем нет.
Mark B

К сожалению, у Hero в Европе есть серьезные проблемы, они меняются в зависимости от номера сборки, но мы столкнулись с 3-4 серьезными ошибками.
Донал Рафферти,

Ответы:


282

Вы можете использовать следующую строку кода в методе onCreate действия, чтобы убедиться, что клавиатура появляется только тогда, когда пользователь нажимает на EditText

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

У меня не работает (2.2 MyTouch 3G). В моем методе onCreate () я вызываю setSoftInputMode (). EditText по-прежнему вызывает отображение клавиатуры :(
Nate

Это сработало для меня. Я использую Android 2.3.4 и разрабатываю с использованием <uses-sdk android: minSdkVersion = "3" />
Сэнди,

79
Или используйте android:windowSoftInputMode="stateHidden"как здесь
Свато

Так что меня сбивает с толку то, что у меня есть активность входа в систему, которая, кажется, уже отлично скрывает клавиатуру. Я тоже выполнил регистрацию, но клавиатура появляется по умолчанию. Так как же этого избежать при входе в систему? Я не могу найти setSoftInputMode в действии входа в систему или атрибут windowSoftInputMode в файле activity.xml.
Чаки

не всегда работает: на некоторых устройствах SOFT_INPUT_STATE_ALWAYS_HIDDEN вызывает ошибку, заключающуюся в том, что текст редактирования, который не является последним в действии, не может вызвать появление виртуальной клавиатуры. использование "android: windowSoftInputMode =" stateHidden "" в манифесте также имеет тот же эффект. в документации разработчика указано, что программная клавиатура не появится автоматически, если ее не заставят, но это просто неправильно.

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

Это работает для Android 3.0, 3.1, 3.2, 4.0 - редактор, используемый для компиляции (Eclipse 3.7)

Поместите 'windowSoftInputMode = "stateHidden"' в XML-файл манифеста вашего приложения для КАЖДОГО действия, в котором вы хотите, чтобы программная клавиатура оставалась скрытой. Это означает, что клавиатура не появится автоматически, и пользователь должен будет «щелкнуть» по текстовое поле, чтобы открыть его. Я почти час искал что-то, что работало, поэтому подумал, что поделюсь.


Лучшее решение, которое я нашел до сих пор. Сфокусирует поле, не открывая клавиатуру. Работает на Nexus S с 4.1.2
alexismor

1
android: windowSoftInputMode = "stateHidden | adjustNothing" также полезен, если вы используете фрагменты и не хотите, чтобы клавиатура меняла раскладку
почемуоз

6

Добавьте это в свой AndroidManifest.xml :

android:windowSoftInputMode="stateHidden|adjustResize"

Работает отлично. :)


1
Спасибо за ответ. Извините, как я могу теперь вызвать клавиатуру? Не появляется при звонке requestFocus().
Takesi Tokugawa YD

6

Этот код будет работать на всех версиях Android:

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

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

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }

Плюс 1 за то, что говорит, что всплывает, а что нет
Программист Demon App

4

Добавьте это в родительский макет XML.

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

Это гарантирует, что при запуске Activity фокус не на editText.


3

Вы можете использовать это в методе onCreate () действия

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

или вставьте этот код в теги Activity в AndroidManifest.xml

android:windowSoftInputMode="stateVisible"

2
Я думаю, вы имеете в виду «stateHidden», а не «stateVisible».
stevehs17

2

В этой версии Android, когда представление расширено, по умолчанию фокус будет установлен на первый фокусируемый элемент управления, а если нет физической клавиатуры, появится экранная клавиатура.

Чтобы исправить это, явно установите фокус в другом месте. Если фокус установлен на что-либо иное, кроме EditText, экранная клавиатура не появится.

Вы пробовали это проверить, запустив Android 1.5 в эмуляторе?


Я попробовал это в эмуляторе (и просто сделал это снова, чтобы убедиться, что я не сумасшедший). Он действует «правильно» (то есть без всплывающей клавиатуры). Кроме того, когда я изначально писал это, мой G1 работал под управлением 1.5, и он не работал таким образом (когда их клавиатура была «спрятана»).
Джереми Логан

Я все еще уверен, что это как-то связано с первоначальным фокусом. Возможно, это что-то особенное для HTC Hero, но я бы попытался явно установить фокус на что-то другое и посмотреть, исправит ли это это для ваших пользователей.
Mark B

Есть ли способ сосредоточиться на «ничто»?
Джереми Логан

1
У меня не работает (2.2 MyTouch 3G). В моем методе onCreate () я явно вызываю requestFocus () для кнопки, которая является вторым виджетом в представлении. EditText по-прежнему вызывает отображение клавиатуры :(
Нейт

2

Вы можете добавить одну строку кода в Android Mainfest.xml в теге активности

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

это может вам помочь.


1

Вы можете сделать это программно, например

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

или установить android:windowSoftInputMode="stateHidden"в <activity tagвнутриAndroidManifest.xml


1

Включите это, где импорт находится сверху:

import android.view.WindowManager;

Добавьте этот код в часть OnCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* Это для Android.xamarin и FindFocus () - он ищет представление в иерархии, основанной на этом представлении, которое в настоящее время имеет фокус, так как у меня есть _enterPin.RequestFocus () перед приведенным выше кодом, поэтому он показывает клавиатуру для _enterPin EditText *

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.