2010-03-17 6 views
42

У меня есть 2 действия, A и B. Когда A запускается, он проверяет условие и, если true, он вызывает startActivityForResult(), чтобы начать B. B выполняет только ввод текста, поэтому имеет смысл для мягкого клавиатура для автоматического всплывания при начале B. Когда действие начинается, EditText уже имеет фокус и готов к вводу.Показать активность на клавиатуре при запуске Activity

Проблема заключается в том, что клавиатура никогда не появляется, даже с windowSoftInputMode="stateAlwaysVisible", установленной в манифесте под тегом <activity> для В. Я также попытался со значением, установленным на stateVisible. Поскольку он не отображается автоматически, я должен нажать EditText, чтобы он показывался.

Кто-нибудь знает, что такое решение?

+0

(Съемка в темноте, но) вы пробовали requestFocus на текстовом поле? –

+0

Я пробовал это, это не сработало –

ответ

11

Если requestFocus на EditText не показывая его, может быть, это будет сделать это:

InputMethodManager imm = (InputMethodManager)getSystemService(
    Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(mEditText, 0); 

Look here для получения дополнительной информации.

+2

Я пробовал это, но это не сработало –

+0

Это работает для меня – fredley

+1

Это должно работать, пока вы не укажете другое мягкое входное состояние где-либо еще, как в вашем манифесте или в коде. i.e this.getWindow(). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); – topwik

75

То, что работало лучше для меня в Android Manifest для активности В добавление

android:windowSoftInputMode="stateVisible"

Надежда, что помогает для вас.

+1

Я должен отметить, что до сих пор это хорошо работает для Nexus One под управлением 2.2, но некоторые из устройств Motorola, таких как Milestone с 2.1, похоже, игнорируют это. – Leo

+0

Спасибо, чтобы программно проверить https://stackoverflow.com/questions/5593053/open-soft-keyboard-programmatically –

+0

Использование 'stateVisible' приводит к тому, что клавиатура снова появляется при изменении ориентации устройства. Если это поведение нежелательно, то 'stateVisible' не является решением. –

2

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

6

Попробуйте что-то похожее на это:

public void onResume() { 
    super.onResume(); 

    TimerTask tt = new TimerTask() { 

     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.showSoftInput(yourTextBox, InputMethodManager.SHOW_IMPLICIT); 
     } 
    }; 

    final Timer timer = new Timer(); 
    timer.schedule(tt, 200); 
} 
+2

задача таймера? для чего? – busylee

+0

@busylee вы можете использовать Обработчик или любой другой способ выполнения чего-либо в задержке по вашему выбору. Это только пример. – Mannaz

+0

Нет причин использовать задержку – busylee

10

Для меня работал только эти решения: добавить в манифест для этой деятельности:

android:windowSoftInputMode="stateVisible|adjustPan" 
+0

Работает ли он на устройствах с аппаратной клавиатурой? Мне трудно работать в аппаратных клавиатурных устройствах, то есть 2.2 устройствах – NinjaCoder

16

простое решение: Положите

android:windowSoftInputMode = "stateVisible" 

в разделе активности AndroidManifest.xml

0

Файл: AndroidManifest.xml

<activity android:name=".MainActivity"> 

Добавить следующее свойство:

android:windowSoftInputMode="stateVisible" 

Который работал для меня.

0

У меня есть два пути.

Способ 1. Используйте следующий код внутри метода OnCreate

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

Это предотвратит выскакивают клавиатуры, если не будет нажата кнопка.

или

Метод 2 Вы можете отодвинуться фокус на другой точки зрения, как TextView с помощью «requestfocus» в XML.

<TextView 
      android:id="@+id/year_birth_day" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:text="1991">    
      <requestFocus /> 
      </TextView> 

Метод 3 (я думаю, что это должно быть расторгнуты), используя следующий код в manifest-

android:windowSoftInputMode="stateVisible"