需要禁用CollapsingToolbarLayout在某些片段上的展开功能

67

我有一个控制替换多个片段的AppCompatActivity。这是它的布局。

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_height="match_parent"
    android:layout_width="match_parent"
    android:fitsSystemWindows="true">

    <include layout="@layout/activity_main_frame"/>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:background="@color/white"
        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/drawer"/>

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

activity_main_frame.xml

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleMarginEnd="64dp">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="256dp"
                android:scaleType="centerCrop"
                android:fitsSystemWindows="true"
                app:layout_collapseMode="parallax" />

            <include layout="@layout/activity_main_items"/>

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

            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="gone"
                android:layout_gravity="bottom"/>

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

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

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" >
    </FrameLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        app:layout_anchor="@id/appbar"
        app:layout_anchorGravity="bottom|right|end"
        app:borderWidth="0dp"
        android:src="@drawable/app_ic_slide_wallpaper_dark"
        android:layout_margin="@dimen/big_padding"
        android:clickable="true"/>

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

我的主页面片段最初被设置了,并且我希望折叠工具栏会一直展开,这很好用。但是当我从侧边栏更改片段时,我想禁用可展开的工具栏。

我已经找出如何在选择侧边栏项时将其折叠,但是我还需要确保它不会展开,除非主页片段被显示。是否有可能实现这一点?

public void collapseToolbar(){
        CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
        behavior = (AppBarLayout.Behavior) params.getBehavior();
        if(behavior!=null) {
            behavior.onNestedFling(coordinator, appbar, null, 0, 10000, true);
        }
    }

你有找到解决方法吗?我也遇到了同样的问题。 - Michiel
不行。我不得不放弃那个概念并将其删除。我认为折叠工具栏不应与片段一起使用。 - BigDX
也许这个链接可以帮到你:https://dev59.com/EOk5XIcBkEYKwwoY_Ox3#53433716? - android developer
17个回答

68

禁用滚动片段内容上的嵌套滚动:

recyclerView.setNestedScrollingEnabled(false);

如果您正在使用支持库,请使用此选项:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

2
实际上,在这个答案中,recyclerView 应该被替换为在xml中设置了 layout_behavior 属性的任何视图(或所有此类视图在 CoordinatorLayout 中)。它能够工作是因为(至少在支持库的版本23.0.1中),CoordinatorLayout 的 onStartNestedScroll 方法会遍历其子项并询问它们是否接受嵌套滚动。如果没有人接受,则不会进行滚动操作。所以,没错,可能不需要自定义 CoordinatorLayout,只需要一个帮助方法就足够了(在有多个具有 layout_behavior 的子项的情况下)。 - nikolay_turpitko
此外,当针对 pre-lollipop 设备时,应使用 ViewCompat.setNestedScrollingEnabled(recyclerView, expanded); 表单。 - nikolay_turpitko
22
这不是完整的解决方案,因为您仍然可以触摸并拖动CollapsingToolbarLayout来展开它,它只是禁用了具有layout_behavior的NestedScrollView的展开功能。 - Minas
太好了!对我来说很好用。谢谢! - Taynã Bonaldo
运行得很好,谢谢。@nikolay_turpitko 对于带有layout_behavior属性的视图对我不起作用,只对RecyclerView有效。 - user3814327
救星。正是我所需要的。在NestedScroll上禁用,但如果通过编程展开AppBarLayout,则启用。 - b-fg

37

这个类将允许您禁用/重新启用展开行为。

public class DisableableAppBarLayoutBehavior extends AppBarLayout.Behavior {
    private boolean mEnabled;

    public DisableableAppBarLayoutBehavior() {
        super();
    }

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

    public void setEnabled(boolean enabled) {
        mEnabled = enabled;
    }

    @Override
    public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes) {
        return mEnabled && super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes);
    }

    public boolean isEnabled() {
        return mEnabled;
    }
}

像这样在你的布局中使用它:

<android.support.design.widget.AppBarLayout
    ... other attributes ...
    app:layout_behavior="com.yourpackage.DisableableAppBarLayoutBehavior"
    >
    <!-- your app bar contents -->
</android.support.design.widget.AppBarLayout>

然后,当您想要禁用该行为时:

AppBarLayout myAppBar = ....;
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) myAppBar.getLayoutParams();
((DisableableAppBarLayoutBehavior) layoutParams.getBehavior()).setEnabled(false);

1
我得到了java.lang.NullPointerException错误。请帮帮我。 - Mohit Yadav
5
干得好。但是,它与上面的其他方法存在相同的问题:您仍然可以通过直接触摸和拖动AppBar本身来扩展内容。 - Johnson_145
这个很好用,但有一个问题,我发现当布局被锁定在扩展模式时,我无法到达列表的末尾。还有其他人遇到这个问题吗? - MidasLefko
对我来说有效,只是不要忘记如果需要的话将其默认为true。 - Golan Shay
私有布尔型变量 mEnabled = true; - Golan Shay
1
这个onStartNestedScroll已经过时,最后需要一个int type作为参数。 - kelalaka

21

现在,在支持库的v23版本中,您可以轻松地控制应用栏的可见性。

只需获取对您的AppBarLayout的引用,并根据要加载的片段隐藏/显示它:

private AppBarLayout appBarLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
[...]
appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
[...]
}

public void switchToFragment(Fragment fragment, String tag, boolean expandToolbar){
        FragmentManager fragmentManager = getSupportFragmentManager();

        Fragment currentFragment = fragmentManager.findFragmentByTag(currentFragmentTag);

        if(currentFragment == null || !TextUtils.equals(tag, currentFragmentTag) ){
            currentFragmentTag = tag;
            fragmentManager
                    .beginTransaction()
                    .replace(R.id.flContent, fragment, currentFragmentTag)
                    .commit();

            if(expandToolbar){
                appBarLayout.setExpanded(true,true);
            }else{
                appBarLayout.setExpanded(false,true);
            }
        }
    }

顺便提醒一下,在您的build.gradle文件中不要忘记添加所需的依赖项:

dependencies {  
    compile 'com.android.support:design:23.2.1'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:recyclerview-v7:23.2.1' 
}

编辑: 如果您还想在某些片段中锁定工具栏(除了折叠),则必须采用变通方法,因为此功能直到现在(支持设计的v23.2.1)CollapsingToolbarLayout尚未提供。 在这里,您可以找到我提出的解决方法。


1
setExpanded也会隐藏我的工具栏。有人知道如何将其折叠而不是隐藏在屏幕顶部后面吗? - seb
经过数小时的尝试,setExpanded() 终于成功了!谢谢! - VIN
2
不确定为什么它被接受为答案。当然,这将展开/折叠您的AppBarLayout,但如果您想要禁用它,就像问题所说的那样,那么@tachyonflux的方法是正确的。 - Ghedeon
@Ghedeon,这在过去已经指出过了。我的编辑是对你对问题的具体解释的回答。然而,这个问题的标题和解释的措辞可能会被误解,一些未来的观众/谷歌用户实际上期望得到关于折叠工具栏问题的答案。因此,这个答案得到了赞同和接受标记。 - Sevle

11

你只需要用自定义的CoordinatorLayout实现替换CoordinatorLayout,并欺骗它已经处理了嵌套滚动。

MyCoordinatorLayout实现:

public class MyCoordinatorLayout extends CoordinatorLayout {

    private boolean allowForScroll = false;

    public MyCoordinatorLayout(Context context) {
        super(context);
    }

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

    @Override public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
        return allowForScroll && super.onStartNestedScroll(child, target, nestedScrollAxes);
    }

    public boolean isAllowForScroll() {
        return allowForScroll;
    }

    public void setAllowForScroll(boolean allowForScroll) {
        this.allowForScroll = allowForScroll;
    }
}

活动视图XML:

<LinearLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawerLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <!--CONTENT-->

        <com.example.views.MyCoordinatorLayout
            android:id="@+id/coordinator"
            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"
            >

        <com.example.views.ControllableAppBarLayout
            android:id="@+id/appbar"
            android:layout_width="match_parent"
            android:layout_height="192dp"
            android:fitsSystemWindows="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsing_toolbar"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                app:contentScrim="?attr/colorPrimary"
                app:expandedTitleMarginBottom="32dp"
                app:expandedTitleMarginEnd="64dp"
                app:expandedTitleMarginStart="48dp"
                app:layout_scrollFlags="scroll|exitUntilCollapsed">

                <ImageView
                    android:id="@+id/header"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@color/primary"
                    android:fitsSystemWindows="true"
                    android:scaleType="centerCrop"
                    app:layout_collapseMode="parallax" />

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

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

        </com.example.views.ControllableAppBarLayout>

        <FrameLayout
            android:id="@+id/flContent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            />

        </com.example.views.MyCoordinatorLayout>


        <!-- DRAWER -->

        <fragment
            android:id="@+id/fDrawer"
            android:name="com.example.fragment.DrawerFragment"
            android:layout_width="@dimen/drawer_width"
            android:layout_height="match_parent"
            android:layout_gravity="left|start"
            android:fitsSystemWindows="true"
            android:clickable="true"
            />

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

</LinearLayout>

我建议您使用带有辅助方法的自定义AppBarLayout实现来折叠/展开工具栏。您可以在此处找到一个。

好的,现在是时候在活动中配置我们的工具栏了。

public class ToolbarAppcompatActivity extends AppCompatActivity
        implements AppBarLayout.OnOffsetChangedListener {

    protected Toolbar toolbar;
    protected MyCoordinatorLayout coordinator;
    protected ControllableAppBarLayout appbar;

    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        configureToolbar();
    switchFragment(new FooFragment(), "FOO", true);
    }

    protected void configureToolbar() {
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        coordinator = (MyCoordinatorLayout) findViewById(R.id.coordinator);
        appbar = (ControllableAppBarLayout) findViewById(R.id.appbar);
        appbar.addOnOffsetChangedListener(this);
        getDelegate().setSupportActionBar(toolbar);
    }

    public void switchToFragment(Fragment fragment, String tag, boolean expandToolbar){
        FragmentManager fragmentManager = getSupportFragmentManager();

        Fragment currentFragment = fragmentManager.findFragmentByTag(currentFragmentTag);

        if(currentFragment == null || !TextUtils.equals(tag, currentFragmentTag) ){
            currentFragmentTag = tag;
            fragmentManager
                    .beginTransaction()
                    .replace(R.id.flContent, fragment, currentFragmentTag)
                    .commit();

            if(expandToolbar){
                expandToolbar();
            }else{
                collapseToolbar();
            }
        }
    }

    protected void addFragment(Fragment fragment, String tag, boolean expandToolbar) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        currentFragmentTag = tag;
        fragmentManager
                .beginTransaction()
                .add(R.id.flContent, fragment, currentFragmentTag)
                .addToBackStack(tag)
                .commit();

        if(expandToolbar){
            expandToolbar();
        }else{
            collapseToolbar();
        }
    }

   protected void collapseToolbar(){
        appbar.collapseToolbar();
        coordinator.setAllowForScroll(false);
    }

    public void expandToolbar(){
        appbar.expandToolbar();
        coordinator.setAllowForScroll(true);
    }

}

每当你想切换片段并折叠/展开工具栏时,只需调用带有适当布尔参数的switchFragment/addFragment方法。

最后一点,请确保使用最新的支持库。

dependencies {

    // android support
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.android.support:recyclerview-v7:22.2.1'
    compile 'com.android.support:design:22.2.1'

}

不要在AppBarLayout中使用include标签。它不起作用。


以防误解,这里不是“scrool”,而是“scroll”。无论如何,在使用RecyclerView中的空视图时,扩展CoordinatorLayout对我很有帮助。谢谢。 - BamsBamx

9
以下代码实现了三个目标:
禁用用户通过手势展开或收起CollapsingToolbarLayout,但仍允许使用AppBarLayout的setExpanded方法。
防止RecyclerView或NestedScrollView的滚动操作导致CollapsingToolbarLayout的展开或折叠。
// scrollView can be RecyclerView or NestedScrollView
ViewCompat.setNestedScrollingEnabled(scrollView, false)

防止用户通过轻扫AppBar来展开或折叠CollapsingToolbarLayout。
val params = appBar.layoutParams as CoordinatorLayout.LayoutParams
if (params.behavior == null)
    params.behavior = AppBarLayout.Behavior()
val behaviour = params.behavior as AppBarLayout.Behavior
behaviour.setDragCallback(object : AppBarLayout.Behavior.DragCallback() {
    override fun canDrag(appBarLayout: AppBarLayout): Boolean {
        return false
    }
})

https://code.luasoftware.com/tutorials/android/how-to-disable-or-lock-collapsingtoolbarlayout-collapse-or-expand/


如果使用视图绑定/数据绑定,似乎无法正常工作... - Alvin Dizon
非常感谢,这真的救了我的一天!我使用Java和数据绑定添加了您解决方案的自适应版本:https://dev59.com/IV0a5IYBdhLWcg3wCE7P#69045061 - flauschtrud

5

在使用 Android Design Library v23.1.1 时,@LucyFair所描述的方法已经不再适用。我通过仅将 app:layout_scrollFlags 设置为enterAlwaysCollapsed,成功使应用栏保持 "锁定" 状态。

希望这可以帮到你。 :)


2
锁定但扩展 - user924

5

我使用了@JasonWyatt的解决方案,并将DragCallback添加到行为类中,以防止触摸和拖动CollapsingToolbarLayout以展开它。

private void setDragCallback() {
    setDragCallback(new DragCallback() {
        @Override
        public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
            return mEnabled;
        }
    });
}

4
我发现一个可行的解决方案,可以在活动和不同片段中使用。在你的活动中实现带有AppBar等的CollapsingToolbarLayout,然后每次调用新片段时,你可以调用这两个函数。
  • When I want my appbar to keep collapsed:

    public void lockAppBarClosed() {
        mAppBarLayout.setExpanded(false, false);
        mAppBarLayout.setActivated(false);
        CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)mAppBarLayout.getLayoutParams();
        lp.height = (int) getResources().getDimension(R.dimen.toolbar_height);
    }
    
  • When I want my appbar to be expanded and scrollable again

    public void unlockAppBarOpen() {
        mAppBarLayout.setExpanded(true, false);
        mAppBarLayout.setActivated(true);
        CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)mAppBarLayout.getLayoutParams();
        lp.height = (int) getResources().getDimension(R.dimen.toolbar_expand_height);
    }
    
您可以通过实现接口从片段中调用这些函数。以下是一个快速示例,适用于您的情况(工具栏仅在homeFragment中扩展)。
public interface CustomListener() {
    void unlockAppBarOpen();
    void lockAppBarClosed()
}

public class MainActivity extends BaseActivity implements CustomListener {

    @Override
    public void unlockAppBarOpen() {
        mAppBarLayout.setExpanded(true, false);
        mAppBarLayout.setActivated(true);
        CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)mAppBarLayout.getLayoutParams();
        lp.height = (int) getResources().getDimension(R.dimen.toolbar_expand_height);
    }

    @Override
    public void lockAppBarClosed() {
        mAppBarLayout.setExpanded(false, false);
        mAppBarLayout.setActivated(false);
        CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)mAppBarLayout.getLayoutParams();
        lp.height = (int) getResources().getDimension(R.dimen.toolbar_height);
    }
}

public class MainFragment extends BaseFragment {

    @Override
    public void onResume() {
        super.onPause();
        ((MainActivity) getContext()).unlockAppBarOpen();
    }
}

public class SecondFragment extends BaseFragment {

    @Override
    public void onResume() {
        super.onPause();
        ((MainActivity) getContext()).lockAppBarClosed();
    }
}

使用这个示例:
  • 每次显示MainFragment时,它将扩展工具栏并使其可折叠和扩展

  • 每次显示SecondFragment时,它将将工具栏折叠为标准大小,并防止再次扩展

希望它能帮到您!

4

我无法评论,所以我会将我的补充内容发布为独立的答案,与JasonWyatt的DisableableAppBarLayoutBehavior解决方案相对应。

public class DisableableAppBarLayoutBehavior extends AppBarLayout.Behavior {
    private boolean mEnabled = true; // enabled by default

    public DisableableAppBarLayoutBehavior() {
        super();
    }

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

    public void setEnabled(boolean enabled) {
        mEnabled = enabled;
    }

    @Override
    public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes, int type) {
        return mEnabled && super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes, type);
    }

    @Override
    public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
        if (!isEnabled()) return;
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);
    }

    @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
        if (!isEnabled()) return;
        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
    }

    public boolean isEnabled() {
        return mEnabled;
    }
}

除了onStartNestedScroll之外,还需要锁定onNestedPreScroll和onNestedScroll本身,以避免意外行为。例如,在我的情况下 - 在我的应用程序栏上调用setExpanded(false, true)会破坏预期的行为,并且仍然会有延迟扩展。现在它可以正常工作:
LayoutParams layoutParams = (LayoutParams) context.appBarLayout.getLayoutParams();
((DisableableAppBarLayoutBehavior)layoutParams.getBehavior()).setEnabled(false);
context.appBarLayout.setLayoutParams(layoutParams);
context.appBarLayout.setExpanded(false, true); // collapse app bar

4

我找到了一个简单的解决方案,可以启用/禁用CollapsingToolbarLayout中的折叠功能:

    private void setExpandEnabled(boolean enabled) {
        mAppBarLayout.setExpanded(enabled, false);
        mAppBarLayout.setActivated(enabled);
        final AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
        if (enabled)
            params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
        else
            params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
        collapsingToolbarLayout.setLayoutParams(params);
    }

这对我来说并没有折叠工具栏,但如果我在setExpanded之后删除代码,它肯定会折叠。 - Dasser Basyouni
@DasserBasyouni 是的,它不会折叠。它只是调整EXPANDED布局的启用/禁用状态。 如果您需要将Enabled == false更改为折叠,则应更改逻辑中的标志:if (enabled) params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED); else params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED);折叠的主要标志:SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED - Dmitry Velychko
1
谢谢您的回复,但如果工具栏被折叠了一点,它仍会扩展工具栏,然后禁用滚动。 - Dasser Basyouni
当我在RecyclerView中滚动时,这会导致它几乎不动。 - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接