CollapsingToolbarLayout 和 NestedScrollView 不工作
CollapsingToolbarLayout and NestedScrollView not working
我正在尝试使用 NestedScrollView 实现 CollapsingToolbarLayout,它在底部的 NestedScrollView 中显示 TextView,不允许滚动或折叠工具栏。我已经得到这个与 RecyclerView 但不是 NestedScrollView 一起工作。当我删除 app:layout_behavior="@string/appbar_scrolling_view_behavior
时,工具栏会折叠但 NestedScrollView 不在 AppBarLayout 下方。有解决此问题的解决方案或建议吗?
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:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Hello"
android:textColor="#000"
android:textSize="16sp"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<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">
<ImageView
android:id="@+id/backdrop"
android:layout_width="match_parent"
android:layout_height="134dp"
android:background="@color/primary"
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"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
结果
在 AppbarLayout 中更改为某个特定高度。示例:
android:layout_height="300dp".
主要问题是,嵌套滚动视图没有足够的视图来导致滚动。因此视差效果将不起作用。
Here is a working example that uses NestedScrollView and CollapsingToolbarLayout
我遇到了同样的问题,为此写了一些快速修复程序。假设,你的 LinearLayout
包含 "Hello" 标签绑定到 mContainer
而你的 Toolbar
绑定到 mToolbar
你可以使用这个:
private void fixNestedScrollViewScrolling() {
final int bottomMargin = getScreenHeight() - mContainer.getHeight() - mToolbar.getHeight();
final FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
mContainer.getLayoutParams());
layoutParams.setMargins(0, 0, 0, bottomMargin);
mContainer.setLayoutParams(layoutParams);
}
private int getScreenHeight() {
final Display display = getWindowManager().getDefaultDisplay();
final Point size = new Point();
display.getSize(size);
return size.y;
}
在我的 Activity
的 onCreate
方法中调用了此修复方法:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_post);
fixNestedScrollViewScrolling();
// some other stuff here ...
}
我必须添加 CoordinatorLayout 才能使其正常工作:
<androidx.coordinatorlayout.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"
xmlns:tools="http://schemas.android.com/tools">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="136dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:titleEnabled="false">
<!--Your layout here-->
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!--And here-->
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
PS: android 支持库更改
androidx.coordinatorlayout.widget.CoordinatorLayout
至 android.support.design.widget.CoordinatorLayout
和
androidx.core.widget.NestedScrollView
到 android.support.v4.widget.NestedScrollView
我正在尝试使用 NestedScrollView 实现 CollapsingToolbarLayout,它在底部的 NestedScrollView 中显示 TextView,不允许滚动或折叠工具栏。我已经得到这个与 RecyclerView 但不是 NestedScrollView 一起工作。当我删除 app:layout_behavior="@string/appbar_scrolling_view_behavior
时,工具栏会折叠但 NestedScrollView 不在 AppBarLayout 下方。有解决此问题的解决方案或建议吗?
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:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Hello"
android:textColor="#000"
android:textSize="16sp"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<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">
<ImageView
android:id="@+id/backdrop"
android:layout_width="match_parent"
android:layout_height="134dp"
android:background="@color/primary"
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"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
结果
在 AppbarLayout 中更改为某个特定高度。示例:
android:layout_height="300dp".
主要问题是,嵌套滚动视图没有足够的视图来导致滚动。因此视差效果将不起作用。
Here is a working example that uses NestedScrollView and CollapsingToolbarLayout
我遇到了同样的问题,为此写了一些快速修复程序。假设,你的 LinearLayout
包含 "Hello" 标签绑定到 mContainer
而你的 Toolbar
绑定到 mToolbar
你可以使用这个:
private void fixNestedScrollViewScrolling() {
final int bottomMargin = getScreenHeight() - mContainer.getHeight() - mToolbar.getHeight();
final FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
mContainer.getLayoutParams());
layoutParams.setMargins(0, 0, 0, bottomMargin);
mContainer.setLayoutParams(layoutParams);
}
private int getScreenHeight() {
final Display display = getWindowManager().getDefaultDisplay();
final Point size = new Point();
display.getSize(size);
return size.y;
}
在我的 Activity
的 onCreate
方法中调用了此修复方法:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_post);
fixNestedScrollViewScrolling();
// some other stuff here ...
}
我必须添加 CoordinatorLayout 才能使其正常工作:
<androidx.coordinatorlayout.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"
xmlns:tools="http://schemas.android.com/tools">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="136dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:titleEnabled="false">
<!--Your layout here-->
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!--And here-->
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
PS: android 支持库更改
androidx.coordinatorlayout.widget.CoordinatorLayout
至 android.support.design.widget.CoordinatorLayout
和
androidx.core.widget.NestedScrollView
到 android.support.v4.widget.NestedScrollView