提问人:user19334054 提问时间:10/25/2023 更新时间:10/25/2023 访问量:30
Android 顶部应用栏阻止片段背景图像
Android top app bar blocking fragment background image
问:
我正在开发一个 Android 应用程序,遇到了这个奇怪的问题。我有一个主要活动,它有一个导航抽屉和一个顶部应用栏,顶部应用栏是透明的,因此背景图像在搜索栏和导航抽屉按钮后面可见。问题在于,当我使用导航抽屉导航到不同的片段时,该片段的背景不会像主要活动背景那样一直延伸到屏幕顶部。 我在活动和您可以从导航抽屉导航到的片段上设置了自定义背景,但令人困惑的是,当您启动应用程序时,没有特定背景集的主屏幕片段可以完美地工作。
我也在想,让一个顶级应用栏由主要活动持有不是一个好主意,我应该为每个片段设置一个,但我无法做到这一点。
理想情况下,我希望每个片段都有一个单独的顶级应用程序标准,但如果你能帮助我解决这个主要问题,那已经对我有很大的帮助了。
以下是相关文件:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/best_winter_aesthetic_phone_wallpaper_in_hd"
tools:openDrawer="start">
<include
android:id="@+id/app_bar_main"
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
<com.google.android.material.navigation.NavigationView
app:itemTextColor="@color/white"
app:itemIconTint="@color/white"
android:background="#80000000"
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>
app_bar_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:fitsSystemWindows="true"
>
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:background="@android:color/transparent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
android:background="@android:color/transparent"
app:titleTextColor="@android:color/black">
<!-- Search bar -->
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:iconifiedByDefault="false"
app:queryHint="Search"
android:textAppearance="@color/white"
android:background="@drawable/semi_transparent_rounded_searchview_background"
app:queryBackground="@android:color/transparent" />
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
fragment_current_location.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".presentation.CurrentLocationFragment"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Home"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout>
fragment_account.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".presentation.navigation.AccountFragment"
android:background="@drawable/generic_background"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Account"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout>
content_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/app_bar_main">
<fragment
android:background="@android:color/transparent"
android:id="@+id/nav_host_fragment_content_home"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>
主题:.xml:
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.VibeCast" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="colorPrimary">#801E1D1D</item>
<item name="colorPrimaryVariant">#FFF0F0</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">#1F1E1E</item>
<!-- Status bar color. -->
<!-- This is where you should define the status bar attributes -->
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<style name="Theme.VibeCast.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.VibeCast.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="Theme.VibeCast.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
答:
事实上,这才是重点。您在 AccountFragment 中设置了一个自定义背景,该背景不是半透明的。如果您希望 Fragment 随心所欲地加载,只需删除 fragment_account.xml 中的行即可。这意味着背景将是半透明的。android:background
android:background="@drawable/generic_background"
为什么一开始可以看到半透明的背景与初始化 NavigationDrawer 的方式有关。看来你一开始没有显示任何片段。仅当选择一个选项卡时,才会加载 Fragment。这意味着抽屉的第一个状态不会加载任何 Fragment。为了防止这种情况,您可以将用于切换到 AccountFragment 的代码复制到您的 AccountFragment 中,并将其粘贴到 .执行此操作时,Android 会从您指定的 Fragment 开始,因此开头不会为空。onCreate
NavigationDrawerActivity
评论
上一个:导航抽屉活动的界面跳转
评论