Android: Как сделать клавиатуру всегда видимой?

В android, как мы делаем клавиатуру устройства всегда видимой в приложении? Верхняя часть отображает содержимое, которое приложение хочет визуализировать, а нижняя часть всегда отображает клавиатуру.

Ответ 1

Добавить андроид: windowSoftInputMode = "stateAlwaysVisible" для вашей активности в файле AndroidManifest.xml:

<activity android:name=".MainActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysVisible" />

В моем тестовом приложении это показывает клавиатуру при запуске приложения, хотя она там не исправлена, но может быть отклонена нажатием кнопки "Назад".

Чтобы убедиться, что клавиатура всегда виден, вам, возможно, придется создать свою собственную клавиатуру как часть пользовательского интерфейса вашего приложения. Ниже приведен учебник, показывающий, как это сделать с помощью KeyboardView: http://www.fampennings.nl/maarten/android/09keyboard/index.htm

Ответ 2

В вашем макете должен быть EditText, и для этого требуется размер EditText базового класса. затем переопределить onKeyPreIme() и вернуть True. Теперь ваша клавиатура будет всегда видна и не может быть отменена клавишей "Назад".

Внимание. Из-за того, что ваш метод onKeyPreIme() возвращает true, вы не можете выйти из своего приложения, используя обратную клавишу.

Пример:

public class CustomEdit extends EditText {

    public CustomEdit(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        Log.e("Log", "onKeyPreIme");
        return true;
        //return super.onKeyPreIme(keyCode, event);
    }
}

onKeyPreIme() - разработчик Android

Ответ 3

Я нашел способ, который работает для меня, чтобы сохранить мягкую клавиатуру видимой после редактирования в моем поле myEditText класса EditText. Хитрость заключается в том, чтобы переопределить метод onEditorAction, чтобы он возвращал true

  myEditText.setOnEditorActionListener(new OnEditorActionListener() {                     
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
      return true;
    }       
  });

или еще onEditorAction вернуть true только после нажатия клавиши "Готово" (IME_ACTION_DONE), в противном случае false

  myEditText.setOnEditorActionListener(new OnEditorActionListener() {                     
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
      if(actionId==EditorInfo.IME_ACTION_DONE){
        Log.i(LOG_TAG, "IME_ACTION_DONE");
        return true;    
      }
      return false;
    }       
  });

(см. также этот ответ по методу onEditorAction)

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