Екранна клавіатура Android автоматично вискакує


140

Один з моїх додатків має "відкриваючий екран" (в основному меню), за EditTextяким слідує кілька Buttonс. Проблема полягає в тому, що кілька моїх користувачів повідомляють, що коли вони відкривають додаток, вони автоматично спливають на екранній клавіатурі, навіть не торкаючись їх EditText. Наскільки я можу сказати, всі ці користувачі використовують HTC Hero .

Це помилка в 1,5? Чи я щось можу зробити з цього приводу?


1
Якщо це помилка, це, мабуть, спеціально у Sprint Hero. У Sprint є грізна версія Android на Heros, який вони продають, і вони, схоже, не поспішають висувати помилки для цього. Існує багато відмінностей у поведінці між Sprint Heros та всіма іншими пристроями Android. Наскільки мені відомо, в інших версіях Героя, таких, як у Європі, цих проблем немає.
Марк Б

на жаль, тут у героїв є основні проблеми, вони змінюються залежно від кількості збірки, але ми зіткнулися з 3 - 4 основними помилками.
Donal Rafferty

Відповіді:


279

Ви можете використовувати наступний рядок коду в методі onCreate діяльності, щоб переконатися, що клавіатура вискакує лише тоді, коли користувач натискає на EditText

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

Це не працює для мене (2.2 MyTouch 3G). У своєму методі onCreate () я викликаю setSoftInputMode (). Програма EditText все ще призводить до появи клавіатури :(
Нейт

Це працювало для мене. Я працюю на Android 2.3.4 і розробляю за допомогою <use-sdk android: minSdkVersion = "3" />
Сенді

78
Або використовуйте android:windowSoftInputMode="stateHidden"як тут
Swato

Отож, що мене бентежить, це те, що я маю активність входу в систему, яка вже, здається, добре приховує клавіатуру. Зараз я також здійснив активність в області реєстрації, але клавіатура за замовчуванням вискакує. То як вхід уникне цього? Я не можу знайти 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-маніфесту вашої програми для діяльності EACH, за якою ви бажаєте, щоб клавіатура програмного забезпечення залишалася прихованою. Це означає, що клавіатура не з’явиться автоматично, і користувачеві доведеться 'натискати' на текстове поле, щоб відобразити його. Я майже годину шукав щось, що спрацювало, тому думав, що поділюсь.


Найкраще рішення, яке я знайшов поки що. Зосереджує поле, не відкриваючи клавіатуру. Працює над Nexus S з 4.1.2
алексисморін

1
android: windowSoftInputMode = "stateHidden | prilagodNothing" також корисний, якщо ви використовуєте фрагменти, і ви не хочете, щоб клавіатура змінювала макет
whyoz

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 - розповісти про те, що з’являється, а які
програмувач програми демонів,

4

Додайте це в батьківський макет XML.

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

Це гарантує, що при запуску Діяльність фокус відсутній на editText.


3

Ви можете використовувати це або в методі onCreate () діяльності

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

або вставте цей код у теги активності в AndroidManifest.xml

android:windowSoftInputMode="stateVisible"

2
Я думаю, ви маєте на увазі «держава прихована», а не «держава-відома».
stevehs17

2

Ви можете додати єдиний рядок коду в Android Mainfest.xml під тегом активності

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

це може вам допомогти.


1

У цій версії Android, коли подання завищене, фокус буде встановлено на перший фокусируемый елемент управління за замовчуванням - і якщо фізичної клавіатури немає, екранна клавіатура з’явиться.

Щоб виправити це, явно поставте фокус десь в іншому місці. Якщо фокус встановлено на що-небудь, крім EditText, екранна клавіатура не з’явиться.

Ви пробували тестувати це, запустивши в емуляторі Android 1.5?


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

Я все ще думаю, що це має щось спільне з початковим фокусом. Можливо, це щось специфічне для HTC Hero, але я б спробував встановити фокус явно на щось інше і побачити, чи це виправить це для ваших користувачів.
Марк Б

Чи є спосіб зосередити увагу на "нічому"?
Джеремі Логан

1
Це не працює для мене (2.2 MyTouch 3G). У своєму методі onCreate () я прямо називаю requestFocus () на кнопці, яка є другим віджетом у представленні. Програма EditText все ще призводить до появи клавіатури :(
Нейт

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.