When developing Android applications using Kotlin, one of the most common user experience issues is the keyboard hiding the input field (EditText) when a user starts typing. This problem often happens when the activity layout is not properly adjusted to handle the appearance of the soft keyboard.
In this article, we will explain the causes, provide step-by-step solutions, and give you working Kotlin code examples to fix the issue where the keyboard hides input fields in Android apps.

Why Does the Keyboard Hide the Input Field?
By default, when the keyboard appears, Android tries to resize the activity layout to make space for the soft keyboard. However, sometimes due to layout settings or window configurations, the keyboard may overlap and hide the input field.
- Incorrect
android:windowSoftInputMode
configuration inAndroidManifest.xml
- Parent layout does not support resizing (e.g., using RelativeLayout without scroll handling)
- Missing
ScrollView
orNestedScrollView
- Full screen mode blocking keyboard adjustment
Step 1: Use windowSoftInputMode in Manifest
The simplest solution is to set the windowSoftInputMode
property in your activity inside the AndroidManifest.xml
.
<activity android:name=".MainActivity" android:windowSoftInputMode="adjustResize"> </activity>
This tells the system to resize the activity layout when the keyboard appears, ensuring your EditText remains visible.
Step 2: Use a Scrollable Layout
If you have multiple input fields or a complex layout, wrapping your content inside a ScrollView
or NestedScrollView
ensures that users can scroll to the hidden fields.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/inputField1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter your name" /> <EditText android:id="@+id/inputField2" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter your email" /> <EditText android:id="@+id/inputField3" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter your password" /> </LinearLayout> </ScrollView>
Step 3: Handle Keyboard Programmatically
Sometimes, adjusting the manifest is not enough. You might need to programmatically detect when the keyboard is open and adjust the UI accordingly.
Here is a Kotlin example to detect keyboard visibility:
import android.graphics.Rect import android.os.Bundle import android.view.ViewTreeObserver import android.widget.EditText import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val rootView = window.decorView.findViewById(android.R.id.content) as android.view.View val inputField = findViewById(R.id.inputField1) rootView.viewTreeObserver.addOnGlobalLayoutListener { val rect = Rect() rootView.getWindowVisibleDisplayFrame(rect) val screenHeight = rootView.rootView.height val keypadHeight = screenHeight - rect.bottom if (keypadHeight > screenHeight * 0.15) { // Keyboard is open inputField.scrollTo(0, inputField.bottom) } else { // Keyboard is closed inputField.scrollTo(0, 0) } } } }
Step 4: Example with adjustPan
Another approach is using adjustPan
, which shifts the entire window up when the keyboard appears, instead of resizing the layout.
<activity android:name=".MainActivity" android:windowSoftInputMode="adjustPan"> </activity>
This ensures that the focused input field is always visible when the keyboard is open.
Comparison: adjustResize vs adjustPan
Property | Behavior | Best Use Case |
---|---|---|
adjustResize | Resizes layout to fit keyboard | Forms with multiple fields, scrollable layouts |
adjustPan | Pans the entire activity upwards | Simple layouts with a single input field |
Final Recommendation
If you are facing the issue of Kotlin keyboard hides input field, the most reliable solution is:
- Set
android:windowSoftInputMode="adjustResize"
in your manifest - Wrap your activity layout inside
ScrollView
orNestedScrollView
- Use programmatic detection if your layout is very dynamic
Following these steps will greatly improve the usability of your app and prevent frustration for your users when typing in input fields.
Conclusion
The issue where the Kotlin Android keyboard hides input field is very common, but easy to solve with proper layout configuration. By understanding how Android handles the soft keyboard and applying the correct windowSoftInputMode
, your app will deliver a smoother experience. Remember, user experience is crucial for app success, and fixing small issues like this will set your app apart.