将视图放在AppBarLayout之上

时间:2017-12-08 20:08:46

标签: android

我正在开发一个使用CoordinatorLayout/AppBarLayout组合的用户界面,正如大多数示例中常见的那样,但我的要求是:我希望始终将AppBarLayout与视图重叠。因此,无论发生什么滚动行为,都应该在此视图下发生。目前,这就是我所看到的:

enter image description here

在这里,你看到的蓝色条是我想要的一切。正如您所看到的,它最初是隐藏的,只有当我们从屏幕滚动AppBarLayout时才会显示。供您参考,以下是此布局的代码,其ID为 android:id="@+id/linearLayout"

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.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="com.example.snapsboardmainpage.MainActivity"
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/linearLayout3"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            app:layout_scrollFlags="scroll|snap"
            android:orientation="vertical">

        </LinearLayout>

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="match_parent"
            android:layout_height="112dp"
            android:orientation="vertical"
            app:layout_scrollFlags="scroll|snap"
            android:background="@android:color/holo_green_light">

        </LinearLayout>

        <android.support.design.widget.TabLayout
            android:id="@+id/id_tab_photosvideos_albums"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|snap">

            <android.support.design.widget.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <android.support.design.widget.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

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

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

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/nested_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.v4.view.ViewPager
            android:id="@+id/id_viewpager_photosvideos_albums"
            android:layout_width="match_parent"
            android:layout_height="match_parent">


        </android.support.v4.view.ViewPager>

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

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="vertical"
        android:layout_gravity="top"
        app:layout_behavior="com.example.snapsboardmainpage.TopActionBarBehavior"
        android:background="@android:color/holo_blue_light">

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:orientation="vertical"
        android:layout_gravity="bottom"
        android:background="@android:color/holo_orange_light">

    </LinearLayout>

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

如何实现这种叠加行为?(如果此蓝色条可以保留为CoordinatorLayout 的直接子项,那将是更好的选择)

2 个答案:

答案 0 :(得分:5)

虽然这个问题似乎很难,但解决方案却非常简单:

android:elevation="8dp"

是的,就是这样。只需将其设置在必须覆盖AppBarLayout的视图上。

答案 1 :(得分:0)

android:elevation =“ 8dp”在API级别21上工作。

因此,您可以将视图放在新的AppBarLayout旁边。

就我而言,我将xml代码放入新的AppBarLayout中,如下所示

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:fitsSystemWindows="true"
android:orientation="vertical">

<com.google.android.material.appbar.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        app:title="@string/app_name" />

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</com.google.android.material.appbar.AppBarLayout>

<!--i want below  view on the top of  app bar layout of id(android:id="@+id/app_bar")
so i put my all view inside the new app bar layout of id( 
android:id="@+id/longClickItem")-->

<com.google.android.material.appbar.AppBarLayout
    android:id="@+id/longClickItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay"
    android:visibility="gone">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        android:paddingTop="@dimen/_5sdp"
        android:paddingBottom="@dimen/_5sdp">


        <ImageView
            android:id="@+id/longItemBack"
            android:layout_width="@dimen/_25sdp"
            android:layout_height="@dimen/_25sdp"
            android:layout_centerVertical="true"
            android:layout_marginStart="@dimen/_15sdp"
            android:layout_marginEnd="@dimen/_15sdp"
            android:src="@drawable/back_arrow" />

        <TextView
            android:id="@+id/longItemCount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toEndOf="@id/longItemBack"
            android:text="0"
            android:textColor="@android:color/white"
            android:textSize="@dimen/_18sdp"
            android:textStyle="bold" />


        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true">


            <ImageView
                android:id="@+id/longItemDelete"
                style="@style/long_press_image_view"
                android:src="@drawable/item_long_delete" />


        </LinearLayout>

    </RelativeLayout>


</com.google.android.material.appbar.AppBarLayout>


<androidx.viewpager.widget.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />