Software Development
User Interface
Mobile Keyboard
Landscape Mode
Programming Tips

Disabling the fullscreen editing view for soft keyboard input in landscape?

Master System Design with Codemia

Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.

Introduction

On Android, some keyboards switch to an extract or fullscreen editing mode in landscape, replacing much of your layout with a large text editor. That behavior can be useful on cramped screens, but it is a poor fit for chat, search, or form-heavy screens where users need to keep the surrounding UI visible. The usual fix is to tell the input method that your field should stay inline.

Why The Fullscreen Editor Appears

The fullscreen editor is controlled by the input method editor, usually called the IME. In landscape, the IME may decide there is not enough room to show both the keyboard and the focused field comfortably, so it opens an extract view instead.

That decision is not based only on your Activity layout. Keyboard implementation, screen size, text field configuration, and device vendor behavior all influence it. Because of that, the goal is not to fight the keyboard globally. The practical goal is to mark specific text fields as poor candidates for extract mode.

Disable Extract Mode In XML

The most direct solution is android:imeOptions="flagNoExtractUi" on the input view. This tells the IME to avoid the fullscreen editor and keep input inside your layout.

xml
1<EditText
2    android:id="@+id/messageInput"
3    android:layout_width="match_parent"
4    android:layout_height="wrap_content"
5    android:hint="Type a message"
6    android:inputType="textCapSentences|textMultiLine"
7    android:imeOptions="flagNoExtractUi" />

This flag works well for inline message fields, search boxes, and compact editors. It is a hint rather than an absolute rule, but modern keyboards generally respect it.

If your screen also has layout issues when the keyboard opens, combine the field-level setting with a sensible window mode in the manifest:

xml
<activity
    android:name=".ChatActivity"
    android:windowSoftInputMode="adjustResize" />

adjustResize does not disable fullscreen editing by itself. It solves a different problem: it asks Android to resize the visible app area when the keyboard appears.

Set The Flag Programmatically

Sometimes the field is created dynamically or wrapped inside a custom view. In that case, set the flag in code.

kotlin
1import android.os.Bundle
2import android.view.inputmethod.EditorInfo
3import android.widget.EditText
4import androidx.appcompat.app.AppCompatActivity
5
6class MainActivity : AppCompatActivity() {
7    override fun onCreate(savedInstanceState: Bundle?) {
8        super.onCreate(savedInstanceState)
9
10        val input = EditText(this)
11        input.hint = "Search companies"
12        input.imeOptions = input.imeOptions or EditorInfo.IME_FLAG_NO_EXTRACT_UI
13
14        setContentView(input)
15    }
16}

This is also useful when you need conditional behavior, such as disabling extract mode only on certain forms or only in landscape. The constant can be applied to EditText, TextInputEditText, or any view that exposes IME options.

What This Fix Does And Does Not Do

flagNoExtractUi changes keyboard presentation. It does not prevent the soft keyboard from opening, change the activity orientation, or guarantee that the field remains fully visible after every OEM customization. If your form still jumps around, inspect scroll containers, windowSoftInputMode, and whether the focused field lives inside a fixed-height layout.

It also does not give you a custom keyboard. The IME still controls prediction, action buttons, and visual styling. Your app is only giving the IME a preference about inline editing.

For message screens and search bars, that is usually enough. For long-form text editors, the fullscreen mode may actually be desirable, so do not disable it blindly across the whole app.

Testing Strategy

Because IME behavior varies, test on at least one Pixel-style device and one manufacturer-customized device. Also test a multiline field and a single-line field, because keyboards may treat them differently.

A simple checklist is useful:

kotlin
1val wantsInlineEditing = true
2val imeOptions = if (wantsInlineEditing) {
3    EditorInfo.IME_FLAG_NO_EXTRACT_UI
4} else {
5    0
6}

Even if your production code is more complex, this makes the intent obvious and keeps the setting from getting lost during refactors.

Common Pitfalls

  • Expecting adjustResize to disable fullscreen input. It only affects how the window resizes around the keyboard.
  • Setting flagNoExtractUi on the activity instead of the focused input view. The flag belongs on the editor.
  • Assuming every keyboard must obey the hint. Most do, but IME implementations still have room for their own behavior.
  • Disabling extract mode for long documents without checking usability. Inline editing is not always the best experience for large text blocks.
  • Forgetting to test landscape specifically. Portrait behavior can look correct while landscape still enters extract mode.

Summary

  • Android landscape keyboards may switch to a fullscreen extract editor.
  • Use android:imeOptions="flagNoExtractUi" to request inline editing.
  • Set the same flag programmatically with EditorInfo.IME_FLAG_NO_EXTRACT_UI when needed.
  • Combine it with adjustResize if your layout also needs resizing.
  • Test across devices because IME behavior is partly keyboard-specific.

Course illustration
Course illustration

All Rights Reserved.