Android 如何在滚动时固定工具栏下方的两个按钮

Android 如何在滚动时固定工具栏下方的两个按钮,android,scrollview,Android,Scrollview,我想实现如图所示的目标 我已经尝试过这段代码,但无法将按钮固定在顶部图像或工具栏下方 在这里,我试图有一个工具栏,下面我有嵌套的scrollview,在这个scrollview中我还有一个scrollview(scrollview2) 我想将一个按钮固定或锚定到scrollview2,当我向上滚动这个scrollview2时,我想将该按钮固定到工具栏 <?xml version="1.0" encoding="utf-8"?> <android.support.design.

我想实现如图所示的目标

我已经尝试过这段代码,但无法将按钮固定在顶部图像或工具栏下方

在这里,我试图有一个工具栏,下面我有嵌套的scrollview,在这个scrollview中我还有一个scrollview(scrollview2)

我想将一个按钮固定或锚定到scrollview2,当我向上滚动这个scrollview2时,我想将该按钮固定到工具栏

 <?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"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="350dp"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">



    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="350dp"
        app:layout_collapseMode="pin"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

        <ImageView
            android:id="@+id/homescrn_logo"
            android:layout_width="match_parent"
            android:layout_height="350dp"
            android:scaleType="fitXY"
            android:src="@drawable/restaurant"
            app:layout_collapseMode="parallax" />

    </android.support.v7.widget.Toolbar>


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


<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

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

        <android.support.v4.widget.NestedScrollView
            android:id="@+id/scrlview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

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

                <ImageView
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:layout_alignParentRight="true"
                    android:src="@drawable/restaurant" />

                <ImageView
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:layout_alignParentRight="true"
                    android:src="@drawable/restaurant" />

                <ImageView
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:layout_alignParentRight="true"
                    android:src="@drawable/restaurant" />

                <ImageView
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:layout_alignParentRight="true"
                    android:src="@drawable/restaurant" />

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:background="@color/colorAccent"></LinearLayout>

                <ImageView
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:layout_alignParentRight="true"
                    android:src="@drawable/restaurant" />
            </LinearLayout>
        </android.support.v4.widget.NestedScrollView>

        <ImageView
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/restaurant" />

        <ImageView
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/restaurant" />

        <ImageView
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/restaurant" />

        <ImageView
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/restaurant" />

        <ImageView
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/restaurant" />

        <ImageView
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/restaurant" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="@color/colorAccent"></LinearLayout>
    </LinearLayout>

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

<Button
    android:id="@+id/bt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hi I am here"
    app:layout_anchor="@id/scrlview"
    app:layout_anchorGravity="center|bottom" />



这正是我想要实现的

我有一个折叠工具栏,我想滚动一半,我能够做到这一点


此外,我在嵌套的scrollview中有两个按钮,我想在向下滚动时将其固定到工具栏上,如gif所示。

为您的LinearLayout设置一个id:

        <LinearLayout
            android:@"+id/my_linear_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

然后在线性布局下方创建按钮,以对齐它们:

        <Button
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="My Button 1"
        android:id="@+id/mesa_btn_salva"

        android:layout_below="@+id/my_linear_layout" />

所有这些都在你的阴囊里


仅此而已。

我建议利用
协调布局
,将内容放在
折叠工具栏布局中选项卡上方。使用
表格布局
而不是两个
按钮
,这应该更符合Android的设计准则(不过如果您愿意,您可以将
表格布局
换成带有两个按钮的
线性布局
):


请注意,
TabLayout
位于
collaingtoolbarlayout
之外,但仍位于
AppBarLayout
之内。这将使
表格布局
固定在
工具栏下
以及放置在
折叠工具栏布局
中的任何内容。而且不需要多个
嵌套的ScrollView
布局

LinearLayout
的间距可能存在一些问题(一些内容可能隐藏在
工具栏下
),但如果是这种情况,您应该能够将
LinearLayout
的上边距设置为
?attr/actionBarSize
。我还没有测试过这些,所以如果遇到问题,请发表评论


您甚至可以将
NestedScrollView
换成
ViewPager
(但要确保保留
app:layou行为
)。这将允许您使用
mTabLayout.setupWithViewPager(mviewpage)
轻松地将选项卡绑定到两个片段



在测试后编辑,不幸的是,这似乎不像我希望的那样工作。问题是部分内容隐藏在
工具栏下,即使您将顶部边距设置为
?attr/actionBarSize
。这是因为,出于某种原因,状态栏的高度不包括在布局的顶部边距中。您可以尝试猜测上边距应该是多少,但这可能会导致工具栏和内容之间出现意外的填充。

我已经在xml代码中使用了协调员布局。请检查。遵循此链接可能会帮助您:@MohitGoel尝试下面的答案。NestedScrollView只能有一个孩子。另外,如果我只是简单地在线性布局下添加按钮,滚动后,它将不会固定在嵌套的滚动视图和工具栏下。这是真的,我忘了。因此,创建一个相对视图,将您的线性布局(my_Linear_Layout)放入其中并单击按钮。谢谢您的解决方案。我正在尝试在工具栏中添加imageview。尽管我以匹配父对象的身份给出了它的宽度,但它仍然为imageview提供了一些填充。@MohitGoel,这很奇怪。发布你的新布局?也许我会看到你错过了什么。有没有其他的方法来做这件事?@MohitGoel肯定还有其他的方法,它们只是更复杂而已。您始终可以创建自己的
视图组
,该视图组可拦截触摸事件,并以您想要的方式处理它们。这似乎是Android提供的最简单的解决方案,尽管它更适合于将图像放在工具栏后面,而不是整个布局。@MohitGoel实际上,这是您希望实现的唯一功能吗?我注意到,在你的第一条评论中,你说你试图在工具栏中放置一个
ImageView
,但这并不是你想要的
        <LinearLayout
            android:@"+id/my_linear_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
        <Button
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="My Button 1"
        android:id="@+id/mesa_btn_salva"

        android:layout_below="@+id/my_linear_layout" />
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarlayout android:id="@+id/app_bar"
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay" android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar_layout"
            android:layout_width="match_parent" android:layout_height="wrap_content"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:titleEnabled="false">

            <LinearLayout android:id="@+id/toolbar_content"
                android:layout_width="match_parent" android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_collapseMode="parallax">

                <!-- YOUR SCROLLING TOOLBAR CONTENT HERE -->

            </LinearLayout>

            <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
                android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
                android:backgroud="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"
                app:layout_collapseMode="pin"/>

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

        <android.support.design.widget.TabLayout android:id="@+id/tab_layout"
            android:layout_width="match_parent" android:layout_height="wrap_content"
            app:tabIndicatorColor="?attr/colorAccent"
            app:menu="@menu/tabs_main"/>

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

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

        <!-- YOUR MAIN SCROLLING CONTENT HERE -->

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

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