top of page
  • Writer's pictureDon Peter

Developing Android Apps for Foldable Devices


Developing Android Apps for Foldable Devices

The advent of foldable devices has ushered in a new era of innovation in app development. With screens that seamlessly transition between large and small sizes, developers have a unique canvas to create immersive and adaptive user experiences.


In this blog post, we will explore the key considerations and techniques for developing Android apps optimized for foldable devices.


Responsive/Adaptive Design


Responsive design is the cornerstone of developing apps for foldable devices. The ability of these devices to fold inward or outward poses a challenge that can be met with a responsive layout. Whether you're using ConstraintLayout for traditional views or BoxWithConstraints for Jetpack Compose, the goal is to ensure that your app looks and functions seamlessly across various foldable form factors.


One crucial aspect is avoiding reliance on physical, hardware values for layout decisions. Instead, base your decisions on the actual portion of the screen allocated to your app. This approach guarantees flexibility, making your app adapt well to foldable scenarios like multi-window mode.


The use of WindowManager in a Compose app can provide insights into the current window metrics, allowing your app to make informed decisions based on the available screen space. Converting raw sizes into meaningful size classes, as outlined in the WindowSize Class documentation, further enhances your app's adaptability.


import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.core.view.WindowCompat
import androidx.window.layout.WindowInfo
import androidx.window.layout.WindowInfoRepository.Companion.windowInfoRepository

class LoadingActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Optimize for foldables by enabling window features
        WindowCompat.setDecorFitsSystemWindows(window, false)

        setContent {
            val windowSizeClass = remember {
                calculateWindowSizeClass(this)
            }
            ChatApp(windowSizeClass)
        }
    }
}

@Composable
fun ChatApp(windowSizeClass: WindowSizeClass) {
    // Determine whether to show the top app bar based on size class
    val showTopAppBar = windowSizeClass.heightSizeClass != WindowHeightSizeClass.Compact

    // MyScreen operates independently of window sizes and utilizes a Boolean flag
    ChatScreen(
        showTopAppBar = showTopAppBar,
    )
}
// Function to calculate window size class using WindowInfo
@Composable
fun calculateWindowSizeClass(activity: ComponentActivity): WindowSizeClass {
    val windowInfoRepository = windowInfoRepository(activity)
    val windowInfo = windowInfoRepository.getSnapshot().getOrDefault(WindowInfo.EMPTY)

    return windowInfo.calculateWindowSizeClass()
}

// Additional Composable for displaying the screen content
@Composable
fun ChatScreen(showTopAppBar: Boolean) {
}


Foldable States and Postures


Understanding foldable states and postures is essential for crafting a seamless user experience. Foldable devices can be in various states, such as FLAT or HALF_OPENED, each offering unique layout possibilities. In the HALF_OPENED state, postures like tabletop and book postures introduce further creative opportunities but also pose challenges.


Developers need to ensure that UI elements remain accessible in all device states. Dialog boxes, pop-up menus, and other controls should be positioned strategically to avoid interference with the fold. Accommodating the limitations imposed by the HALF_OPENED state, such as obscured content near the fold, is crucial for delivering a user-friendly design.


App Continuity


App continuity is a key consideration when developing for foldable devices. As these devices fold and unfold, apps may stop and restart, necessitating the seamless restoration of user states.


From retaining typed text in input fields to restoring keyboard states and scroll positions, maintaining continuity enhances the user experience.

Furthermore, app layouts on folded and unfolded screens should complement each other. Users should be able to experience a natural flow between different screen layouts, with content seamlessly transitioning and enhancing the overall user journey.


Drag and Drop Interactions


Foldable devices with large screens provide an ideal canvas for drag and drop interactions. Multi-window mode on foldables allows users to drag and drop content between apps, creating a productive and engaging experience. Developers can leverage the Android drag and drop framework to implement these interactions, adding a layer of sophistication to the apps.


Why Develop Apps for Foldable Devices?

  1. Innovative User Experiences: Foldable devices offer a unique canvas for creative and innovative user experiences. By embracing the flexibility of foldable screens, developers can design apps that stand out in the crowded app landscape.

  2. Expanded Market Reach: As foldable devices become more popular, developing apps optimized for these devices opens up new opportunities and expands your app's potential user base. Catering to emerging trends ensures that your app remains relevant in a rapidly evolving tech landscape.

  3. Differentiation in a Competitive Market: Developing for foldable devices allows you to differentiate your app from competitors. Users are often drawn to apps that leverage the full potential of their devices, and being an early adopter of foldable technology can set your app apart.

As the market for foldable devices continues to grow, developers who adapt to this evolving landscape position themselves at the forefront will benefit.

Blog for Mobile App Developers, Testers and App Owners

 

This blog is from Finotes Team. Finotes is a lightweight mobile APM and bug detection tool for iOS and Android apps.

​

In this blog we talk about iOS and Android app development technologies, languages and frameworks like Java, Kotlin, Swift, Objective-C, Dart and Flutter that are used to build mobile apps. Read articles from Finotes team about good programming and software engineering practices, testing and QA practices, performance issues and bugs, concepts and techniques. 

bottom of page