简体   繁体   English

在CollapsingToolbarLayout中移动按钮

[英]Moving A Button in CollapsingToolbarLayout

I'm trying to make toolbar button to stay at the bottom when collapsingToolbarLayout is expanded and moves up and get pinned when the collapsingToolbarLayout is collapsed. 我正在尝试使collapsingToolbarLayout展开时工具栏按钮停留在底部,并在collapsingToolbarLayout折叠时向上移动并固定住。 The way it behave now is always pinned on top. 现在,它的行为方式始终固定在最上面。 Here is what I have: 这是我所拥有的:

<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:id="@+id/col"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimaryDark"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:elevation="4dp"
    android:transitionName="@string/pic_transition_name"
    app:layout_collapseMode="parallax">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/clpsToolbarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:collapsedTitleTextAppearance="@style/CollapsedText"
        app:contentScrim="@color/colorPrimary"
        app:expandedTitleTextAppearance="@style/ExpandedText"
        app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
        > 

        <ImageView
            android:id="@+id/iv_gallery"
            android:layout_width="match_parent"
            android:layout_height="320dp"
            android:layout_gravity="center_horizontal"
            app:layout_collapseMode="parallax"
            />

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

            <Button
                android:id="@+id/mmv_toggle_detail"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:layout_gravity="right"
                />

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

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

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

The toggle button always stays on top place, I want it to behave similar to WhatsApp edit button in group detail when it moves up and down as you expand the toolbar layout. 切换按钮始终位于顶部,我希望它在扩展工具栏布局时上下移动时,其行为类似于WhatsApp编辑按钮在组详细信息中。

Solved it by taking the button out of the toolbar and putting it a child of the CollapsingToolbarLayout with margin bottom and collapsing mode as pin 通过将按钮从工具栏中移出并将其放置在CollapsingToolbarLayout的子项中,并以边距底部和折叠模式作为固定点来解决

<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:id="@+id/col"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimaryDark"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:elevation="4dp"
    android:transitionName="@string/pic_transition_name"
    app:layout_collapseMode="parallax">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/clpsToolbarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:collapsedTitleTextAppearance="@style/CollapsedText"
        app:contentScrim="@color/colorPrimary"
        app:expandedTitleTextAppearance="@style/ExpandedText"
        app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
        >

        <ImageView
            android:id="@+id/iv_gallery"
            android:layout_width="match_parent"
            android:layout_height="320dp"
            android:layout_gravity="center_horizontal"
            app:layout_collapseMode="parallax"
            />

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

        <Button
            android:id="@+id/mmv_toggle_detail"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_gravity="right|bottom" 
            app:layout_collapseMode="pin"
            />

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

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

For complex behaviors you need to code this in behavior classes 对于复杂的行为,您需要在行为类中编写代码

Step # 1: 第1步:

Create a Custom Behavior 创建自定义行为

public class BottomBarBehavior extends CoordinatorLayout.Behavior<LinearLayout> {

    private int defaultDependencyTop = -1;


    public BottomBarBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public BottomBarBehavior() {
    }

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, LinearLayout child, View dependency) {
        return dependency instanceof AppBarLayout;
    }


    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, LinearLayout child, View dependency) {

        //do something with the layout. see commented
        return true;
    }

}

Step # 2 第2步

Assign the behavior to the toolbar. 将行为分配给工具栏。 Either via xml: 通过xml:

 <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:gravity="center"
            **app:layout_behavior=".BottomBarBehavior"**
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <Button
                android:id="@+id/mmv_toggle_detail"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:layout_gravity="right"
                />

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

More info here: https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.Behavior.html 此处提供更多信息: https : //developer.android.com/reference/android/support/design/widget/CoordinatorLayout.Behavior.html

Try this, I hope it will help you ... 试试这个,希望对您有帮助...

<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:id="@+id/col"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimaryDark"
    android:fitsSystemWindows="true">

  <android.support.design.widget.AppBarLayout
       android:id="@+id/appbar"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
       app:elevation="4dp"
       android:transitionName="@string/pic_transition_name"
       app:layout_collapseMode="parallax">

<android.support.design.widget.CollapsingToolbarLayout
    android:id="@+id/clpsToolbarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:collapsedTitleTextAppearance="@style/CollapsedText"
    app:contentScrim="@color/colorPrimary"
    app:expandedTitleTextAppearance="@style/ExpandedText"
    app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
    >

    <ImageView
        android:id="@+id/iv_gallery"
        android:layout_width="match_parent"
        android:layout_height="320dp"
        android:layout_gravity="center_horizontal"
        app:layout_collapseMode="parallax"
        />

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:gravity="center"
        app:layout_collapseMode="pin"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    </android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
         <Button
           android:id="@+id/mmv_toggle_detail"
           android:layout_width="60dp"
           android:layout_height="60dp"
           android:layout_gravity="center|bottom"
           app:layout_anchor="@id/appbar"
           app:layout_anchorGravity="bottom|center" />
</android.support.design.widget.CoordinatorLayout>

in JavaClass you will add below code . 在JavaClass中,您将添加以下代码。

appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
            if (Math.abs(verticalOffset) == appBarLayout.getTotalScrollRange()) {
                // Collapsed
            } else if (verticalOffset == 0) {
                // Expanded
                if (yourBtn.getVisibility()==View.VISIBLE) {
                    yourBtn.setVisibility(View.INVISIBLE);
                }
            } else {
                // Somewhere in between
                if (yourBtn.getVisibility()==View.VISIBLE) {
                    yourBtn.setVisibility(View.INVISIBLE);
                }
            }
        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 CollapsingToolbarLayout和CollapsingToolbarLayout内的浮动操作按钮位置 - CollapsingToolbarLayout and floating action button position inside CollapsingToolbarLayout 向上滚动CollapsingToolbarLayout时移动FloatingActionButton - Moving FloatingActionButton when scrolling up CollapsingToolbarLayout 后退按钮未显示在CollapsingToolbarLayout中 - back button not showing up in CollapsingToolbarLayout CollapsingToolbarLayout 隐藏了我的后退按钮 - CollapsingToolbarLayout hides my back button AppBarLayout 和 CollapsingToolbarLayout 不能包含 Button? - AppBarLayout and CollapsingToolbarLayout not able to contain Button? CollapsingToolbarLayout:展开时更改主页按钮颜色 - CollapsingToolbarLayout: Change home button color when expanded 在CollapsingToolbarLayout中折叠状态下未显示后退按钮 - Back button not shown on collapsed state in CollapsingToolbarLayout Android 10 中带有 CollapsingToolbarLayout 的片段中的滚动和后退按钮不起作用 - Scroll and back button not working in Fragment with CollapsingToolbarLayout in Android 10 如何防止CollapsingToolBarLayout内部的图像在折叠期间移动? - How do I prevent the image inside the CollapsingToolBarLayout from moving during collapse? Android按钮不动? - Android button not moving?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM