【问题标题】:Fragment with CollapsingToolbar showing Activity Toolbar带有显示活动工具栏的 CollapsingToolbar 的片段
【发布时间】:2019-09-03 19:57:55
【问题描述】:

我的片段中有一个 CollapsingToolbarLayout 并且显示正常,问题是 App Toolbar 也正在显示。我尝试了这个解决方案:Can I use CollapsingToolbarLayout in a Fragment from Navigation Drawer 但对我不起作用...

这是我的片段 AppBarLayout:

<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/layout_bar"
    android:layout_width="match_parent"
    android:layout_height="192dp">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapse_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
        app:contentScrim="#FFf3802b"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ImageView
            android:id="@+id/brandLogo"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:adjustViewBounds="true"
            android:contentDescription="@string/logo_icon"
            android:scaleType="centerCrop"
            android:src="@drawable/avatar_krono"
            app:layout_collapseMode="parallax"/>

        <android.support.v7.widget.Toolbar
            android:id="@+id/fragment_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            android:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
            app:layout_collapseMode="pin"/>

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    ...

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

我的父活动(activity_main.xml):

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/appToolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:popupTheme="@style/ThemeOverlay.AppCompat.Dark"/>

    <!-- Framelayout to display Fragments -->
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

<!-- NavigationView to display slider menu -->
<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="280dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header"
    app:menu="@menu/drawer_view" />

</android.support.v4.widget.DrawerLayout>

我在 myFragmentActivity 中使用(只是为了尝试)这一行来更改我的 APPToolBar 的标题,它确实发生了变化:

((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Title");

然后,我尝试使用此行隐藏我的 appToolbar 但不起作用,我的 appToolbar 总是显示:

((AppCompatActivity) getActivity()).getSupportActionBar().hide();

有什么建议吗?

【问题讨论】:

    标签: android android-fragments android-actionbar android-actionbar-compat android-collapsingtoolbarlayout


    【解决方案1】:

    您在为该片段充气的 Activity 中使用了哪种类型的布局?也许 CoordinatorLayout 可以解决您的问题。

    http://developer.android.com/reference/android/support/design/widget/AppBarLayout.html

    https://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout

    【讨论】:

    • 我更新了我的 XML,你可以在我的片段布局中看到,我使用 CoordinatorLayout
    • 父Activity呢?
    • 我的 activity_main.xml 只是一个普通的活动,带有一个 NavigationView(新 NavigationDrawer)和一个 FrameLayout 来显示我的片段、我的 Toolbar 和我的 DrawerLayout...(我更新了我的代码,你可以看到它现在)
    【解决方案2】:

    您的片段替换了内层,但不是 Acitvity 工具栏。所有正常工作的都应该与片段容器和工具栏一起放置。在您的代码中:

    <!-- Use this LinearLayout for container -->
    <LinearLayout
        android:id="@+id/correct_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/appToolbar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:minHeight="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            android:popupTheme="@style/ThemeOverlay.AppCompat.Dark"/>
    
        <!-- Framelayout to display Fragments -->
        <FrameLayout
            android:id="@+id/frame_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </LinearLayout>
    

    当然,我们可以使用其他解决方案。我们可以在 MainActivity 中创建函数并调用所有片段以关闭实际的工具栏(执行与您不同的其他代码)。还有其他......

    【讨论】:

    • “你的片段替换了内层,但不是 Acitvity 工具栏”我知道......这就是为什么我通过调用 ((AppCompatActivity) getActivity( )).getSupportActionBar(),但问题是如果我可以更改标题,为什么我不能隐藏它?
    • 我正在考虑在每个片段中而不是在我的 MainActivity 中创建我的工具栏,但我不知道这是否是一个好习惯......我认为它会起作用,但我认为有更好的方法这样做
    【解决方案3】:

    在切换折叠布局片段时将颜色更改为透明。

    通过这个你会得到你的解决方案:

    https://stackoverflow.com/a/57771274/5328951

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2015-10-29
      • 1970-01-01
      相关资源
      最近更新 更多