A ScrollView in Android allows content that exceeds the screen size to be scrollable. It’s commonly used when you need vertical or horizontal scrolling for long content, forms, images, or dynamic UI elements. This guide covers how to implement ScrollView correctly with practical examples, limitations, and best practices.
What Is ScrollView in Android?
ScrollView is a layout container that provides vertical scrolling for its child views. It enables users to scroll content that doesn’t fit within the device screen.
For horizontal scrolling, Android offers HorizontalScrollView.
When to Use ScrollView
Use ScrollView when:
- Your layout exceeds the device screen height
- You have long forms or dynamic content
- Scrollable content doesn’t require complex view recycling
Do not use ScrollView with large lists of dynamic data — prefer RecyclerView.
Adding ScrollView in XML
Here’s a basic vertical ScrollView setup:
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Item 1"/>
<!-- Add more content here -->
</LinearLayout>
</ScrollView>
Important: ScrollView should contain only one direct child. Usually, that child is a LinearLayout or ConstraintLayout.
HorizontalScrollView Example
If you need horizontal scrolling:
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/sample1"/>
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/sample2"/>
</LinearLayout>
</HorizontalScrollView>
HorizontalScrollView scrolls content left and right.
Nested ScrollViews and Nested Scrolling
Avoid putting a ScrollView inside another ScrollView. Nested scrolls lead to conflicts and poor user experience.
If nested scrolling is required (e.g., forms inside a coordinator layout), use NestedScrollView:
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Content here -->
</androidx.core.widget.NestedScrollView>
This enables smoother nested scroll interactions supported by CoordinatorLayout.
ScrollView with ConstraintLayout
You can combine ScrollView with a ConstraintLayout:
<ScrollView
...>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Views with constraint rules -->
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
Just ensure all constraints can resolve height properly as wrap_content.
Handling Large Content
If you have a long list of data, avoid using ScrollView. Instead, use RecyclerView for scalable performance.
Use ScrollView only for static or moderately sized content.
Smooth Scrolling Best Practices
From real Android engineering experience:
- Use
NestedScrollViewfor modern nested scrolling patterns - Avoid adding heavy views inside ScrollView
- Use appropriate padding/margins to separate content
- Use custom scroll flags with CoordinatorLayout for advanced UI effects
These practices help maintain smooth user experience.
Common Issues and Fixes
Content not scrolling?
✔ Ensure direct child has wrap_content height and ScrollView is match_parent.
Scroll conflict with RecyclerView?
✔ Don’t embed RecyclerView inside ScrollView; prefer coordinated scroll behavior.
Layout jumps when keyboard appears?
✔ Add android:windowSoftInputMode="adjustResize" to Activity.
Summary
Android ScrollView is a simple yet powerful layout container that enables vertical or horizontal scrolling for long content. When used appropriately, it improves readability and user interaction. For dynamic list data, prefer RecyclerView.


