Показывать программную клавиатуру в ландшафтном режиме

этот код не работает в ландшафтном режиме:

EditText destinationSearch = (EditText) findViewById(R.id.destinationSearch); 

destinationSearch.requestFocus (); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
ИММ.showSoftInput (destinationSearch, InputMethodManager.SHOW_IMPLICIT);

есть ли решение для отображения экранной клавиатуры в альбомном режиме ?

3 ответов


вам нужно использовать show forced

InputMethodManager imm;
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
imm.showSoftInput(this.editText,InputMethodManager.SHOW_FORCED);

причина в том, что ландшафтный режим Чаще всего помещает мягкую клавиатуру в новое полноэкранное окно. Как сказал Баких, сила будет работать, но полноэкранное окно имеет больше эффектов, и поэтому SHOW_FORCED.

Я предпочитаю добавлять

    <item name="android:imeOptions">flagNoFullscreen</item>

в мой EditTextStyle, чтобы я всегда мог поймать onGlobalLayout () и так далее. Теперь вы можете использовать SHOW_IMPLICIT. Просто убедитесь, что ваш пользовательский интерфейс выглядит хорошо в такой небольшой области и удалить автозамены, если не требуется.


EditText editText = (EditText)findViewById(R.id.editText);

editText.setFocusableInTouchMode(false);

final Context context = this;

editText.setOnClickListener(new OnClickListener() {

    @Override 
    public void onClick(View v) {

        v.requestFocusFromTouch();

        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(v, InputMethodManager.SHOW_FORCED);

    } 
});