我有 1 个活动在
navHostFragment
中托管多个片段。为了在它们之间切换,我使用 androids 导航组件(即 navGraph
)。
现在我想启用边缘到边缘。我已经让它在静态情况下工作,但在转换期间(想想导航抽屉切换或 FAB 单击事件期间的动画),背景中似乎有一个(活动?)主题,状态栏稀松布仍然使用蓝色.
在导航抽屉切换期间,它仅在短时间内可见,给人一种闪烁的印象。
FAB 操作时间较长,显示蓝色状态栏颜色过长,无法接受,请参阅第二张附图。
转换顺序如下:
注意 - 使用和显示的容器转换转换尚未准备好,忘记看起来奇怪的 fab 和蓝色容器(fab 转换与蓝色状态栏问题无关,因为该问题也会出现,例如在初始应用程序启动)。
所以我想它归结为如何定义和设置一个活动主题来改变状态栏颜色(透明或例如表面颜色)并教Android从一开始就使用它。
我现在用的是
<!--values/themes.xml -->
<style name="Base.Theme.App" parent="Theme.Material3.DayNight.NoActionBar">
和
v29
<!--v29/themes.xml -->
<style name="Theme.App" parent="Base.Theme.App">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
并体现:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
...
android:theme="@style/Theme.App"
tools:targetApi="34">
<activity
android:name=".ui.uielements.activities.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
似乎删除
android:fitsSystemWindows="true"
根元素(在我的例子中是抽屉布局)上的 activity_main.xml
就成功了。
这清楚地表明我仍然不明白
android:fitsSystemWindows="true"
的原因和用途(在阅读和观看了有关它的所有内容之后),所以请随意发表评论...
无论如何,边到边在 Android 上很难 :/
我的设置的一些背景(仅包括对边到边重要的事情):
启用边到边:
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
...
}
activity_main.xml
<androidx.drawerlayout.widget.DrawerLayout
...>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:fitsSystemWindows="true"
...> <!-- here I removed the "fitsSystemWindows="true" flag -->
<androidx.fragment.app.FragmentContainerView
android:name="androidx.navigation.fragment.NavHostFragment"
android:fitsSystemWindows="true"
.../>
<com.google.android.material.floatingactionbutton.FloatingActionButton
.../>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<com.google.android.material.navigation.NavigationView
android:fitsSystemWindows="true"
.../>
</androidx.drawerlayout.widget.DrawerLayout>
第一个片段(第二个等效片段):
dashboard_fragment_xml
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:fitsSystemWindows="true"
...>
<include
android:id="@+id/app_bar_layout"
layout="@layout/default_appbar"/>
<androidx.core.widget.NestedScrollView
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
default_appbar_xml
<com.google.android.material.appbar.AppBarLayout
android:fitsSystemWindows="true"
...>
<com.google.android.material.appbar.MaterialToolbar
... />
</com.google.android.material.appbar.AppBarLayout>
theme.xml
<!--v29/themes.xml -->
<style name="Theme.App" parent="Base.Theme.App">
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">?attr/isLightTheme</item>
</style>
</style>