gpt4 book ai didi

android - 如何从具有 NestedScrollView 的 fragment 中的 AppBarLayout 禁用 "expand"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:46 27 4
gpt4 key购买 nike

我有两个问题:

1) 当我的 fragment 中没有 NestedScrollView 时,我能够阻止“扩展”功能,但是当我这样做时,它会不断扩展,甚至使用:

appBarLayout.setExpanded(false);
appBarLayout.setActivated(false);

当 fragment 中有 NestedScrollView 时,有什么方法可以防止工具栏展开?

2) 即使我没有 NestedScrollView,当我在工具栏中触摸手指并向下和向上滚动时,我仍然能够展开它。 “展开和折叠”仍然有效。

当我用手指触摸工具栏并向下和向上滚动时,如何禁用折叠和展开工具栏的操作?

谢谢。

Edit1(更多信息):

这是我的 fragment 的代码,在 FrameLayout 中。

<android.support.v4.widget.NestedScrollView>

<LinearLayout>

<TextView />

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

</LinearLayout>

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

这是我的 Activity 结构:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.AppBarLayout>

<android.support.design.widget.CollapsingToolbarLayout>

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

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

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

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

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

...

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

编辑 2:现在剩下的唯一问题是:当 fragment 中有 NestedScrollView 时,有什么方法可以防止工具栏展开?

最佳答案

我最近遇到过这个问题,当我需要它可折叠或展开时,我通过更改 AppBarLayout height 重新解决了它。因此,首先,您需要在默认的 dimens.xml 文件中定义接下来的两项:

<dimen name="toolbar_height">56dp</dimen>
<dimen name="toolbar_expanded_height">256dp</dimen> // this can be whatever you need

然后完整的防止AppBarLayoutToolbar展开/折叠的方法是:

public void disableCollapse() {
appbar.setActivated(false);
//you will need to hide also all content inside CollapsingToolbarLayout
//plus you will need to hide title of it
backdrop.setVisibility(View.GONE);
shadow.setVisibility(View.GONE);
collapsingToolbar.setTitleEnabled(false);

AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) collapsingToolbar.getLayoutParams();
p.setScrollFlags(0);
collapsingToolbar.setLayoutParams(p);
collapsingToolbar.setActivated(false);

CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
lp.height = getResources().getDimensionPixelSize(R.dimen.toolbar_height);
appbar.requestLayout();

//you also have to setTitle for toolbar
toolbar.setTitle(title); // or getSupportActionBar().setTitle(title);
}

您可能还需要添加状态栏高度到工具栏的高度,如果您使用fitsSystemWindows=true,例如,那么您需要改变

lp.height = getResources().getDimensionPixelSize(R.dimen.toolbar_height);

lp.height = getResources().getDimensionPixelSize(R.dimen.toolbar_height) + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? getStatusBarHeight() : 0);

getStatusBarHeight()方法的实现是:

protected int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}

而且,最后,如果您想让您的AppBarLayoutToolbar 再次可折叠/展开,您必须使用下一个方法:

public void enableCollapse() {
appbar.setActivated(true);
collapsingToolbar.setActivated(true);

//you will need to show now all content inside CollapsingToolbarLayout
//plus you will need to show title of it
backdrop.setVisibility(View.VISIBLE);
shadow.setVisibility(View.VISIBLE);
collapsingToolbar.setTitleEnabled(true);

AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) collapsingToolbar.getLayoutParams();
p.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
collapsingToolbar.setLayoutParams(p);

CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
lp.height = getResources().getDimensionPixelSize(R.dimen.toolbar_expanded_height);
appbar.requestLayout();

//you also have to setTitle for toolbar
toolbar.setTitle(title); // or getSupportActionBar().setTitle(title);
}

希望对您有所帮助!

关于android - 如何从具有 NestedScrollView 的 fragment 中的 AppBarLayout 禁用 "expand"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40636185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com