From ef6d5e621ec45aaf70ea5ed25ec8795dd9ac5dde Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 26 Oct 2025 11:51:09 +0000 Subject: [PATCH] Fix tab header overflow on status bar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add fitsSystemWindows to root layout to respect system UI - Implement window insets listener to add proper top padding to TabLayout - Prevents tab headers from overlapping with status bar on devices with notches and different screen sizes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../java/oyvindbs/zotshelf/MainActivity.java | 19 +++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 1 + 2 files changed, 20 insertions(+) diff --git a/app/src/main/java/oyvindbs/zotshelf/MainActivity.java b/app/src/main/java/oyvindbs/zotshelf/MainActivity.java index ace426a..d1fea1d 100644 --- a/app/src/main/java/oyvindbs/zotshelf/MainActivity.java +++ b/app/src/main/java/oyvindbs/zotshelf/MainActivity.java @@ -10,6 +10,9 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.core.graphics.Insets; import androidx.viewpager2.widget.ViewPager2; import com.google.android.material.floatingactionbutton.FloatingActionButton; @@ -47,6 +50,22 @@ protected void onCreate(Bundle savedInstanceState) { viewPager = findViewById(R.id.viewPager); fabAddTab = findViewById(R.id.fabAddTab); + // Handle window insets to prevent tab headers from overlapping with status bar + View rootView = findViewById(android.R.id.content); + ViewCompat.setOnApplyWindowInsetsListener(rootView, (v, windowInsets) -> { + Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()); + + // Apply top inset to tab layout to prevent overlap with status bar + tabLayout.setPadding( + tabLayout.getPaddingLeft(), + insets.top, + tabLayout.getPaddingRight(), + tabLayout.getPaddingBottom() + ); + + return windowInsets; + }); + // Setup tabs regardless of credentials (fragments will handle empty state) setupTabs(); setupFab(); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index e316e1e..6774147 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,6 +5,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:fitsSystemWindows="true" tools:context=".MainActivity">