Автоматическое отображение экранной клавиатуры 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-файл манифеста вашего приложения для КАЖДОГО действия, в котором вы хотите, чтобы программная клавиатура оставалась скрытой. Это означает, что клавиатура не появится автоматически, и пользователь должен будет «щелкнуть» по текстовое поле, чтобы открыть его. Я почти час искал что-то, что работало, поэтому подумал, что поделюсь.

mourngrym1969
источник
Лучшее решение, которое я нашел до сих пор. Сфокусирует поле, не открывая клавиатуру. Работает на 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 в эмуляторе?

dmazzoni
источник
Я попробовал это в эмуляторе (и просто сделал это снова, чтобы убедиться, что я не сумасшедший). Он действует «правильно» (то есть без всплывающей клавиатуры). Кроме того, когда я изначально писал это, мой 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>

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

Mohanraj SK
источник
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 *

Ручира
источник