Android: Как сделать так, чтобы клавиатура всегда была видна?

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


person Prabhu R    schedule 02.10.2009    source источник


Ответы (3)


Добавьте android: 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

person Intrications    schedule 02.10.2009
comment
Я попытался использовать исходный код Android и могу перетащить клавиатуру, но не уверен, какую часть мне следует изменить, чтобы она не скрывалась. Я смотрю на класс под LatinIME.java. Я попытался добавить inputView из этого кода Google в WindowManager.addView. - person LittleFunny; 04.10.2016
comment
@Simon Смотрите мое обновление моего ответа. Вероятно, вы захотите использовать KeyboardView. - person Intrications; 05.10.2016

У вас должен быть 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

person Favas Kv    schedule 03.09.2012

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

person user2314737    schedule 18.02.2014