AppBarLayout должен быть прямым потомком CoordinatorLayout для прокрутки и свертывания макета, чтобы работать так, как вы ожидаете. (См. документация AppBarLayout .)
Это представление сильно зависит от того, используется ли оно как прямой дочерний элемент в CoordinatorLayout. Если вы используете AppBarLayout в другой ViewGroup, большая часть его функциональности не будет работать.
Вот то, как ваш макет выглядит как закодированный в данный момент. (Это из Инспектора макетов .)
Как видите, AppBarLayout не является прямым потомком CoordinatorLayout , но является потомком ExpandedToolbar , который сам по себе является AppBarLayout .
Чтобы это исправить, вам нужно изменить extended_toolbar.xml на следующее:
<?xml version="1.0" encoding="utf-8"?>
<merge 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="wrap_content">
<!--<android.support.design.widget.AppBarLayout-->
<!--android:id="@+id/appbar_layout"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:fitsSystemWindows="true">-->
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/expanded_collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="120dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/expanded_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>-->
</merge>
Как видите, я удалил AppBarLayout , закомментировав его. Теперь, когда мы запускаем приложение, мы видим следующую иерархию:
Здесь вы можете видеть, что ExpandedToolbar , который действительно является AppBarLayout , является прямым потомком CoordinatorLayout . Это работает. Вот визуал. Я не реализовал весь пользовательский макет - достаточно для демонстрационных целей.
Вот обновленный основной макет:
activity_main.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<com.example.customviewtoolbar.ExpandedToolbar
android:id="@+id/expandable_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:toolbarNavColor="?attr/NavigationIconColor"
app:toolbarNavIcon="?attr/NavigationUpArrow"
app:toolbarTitle="My Finances"
app:toolbarTitleColor="?attr/NavigationTitleColor" />
<android.support.v4.widget.NestedScrollView
android:id="@+id/nested_scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.constraint.ConstraintLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.AppCompatTextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingStart="32dp"
android:paddingEnd="0dp"
android:text="@string/finances"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<android.support.v7.widget.AppCompatEditText
android:id="@+id/edit_text"
android:layout_width="0dp"
android:layout_height="56dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/details"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="DETAILS TODO"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/edit_text" />
<android.support.v7.widget.RecyclerView
android:id="@+id/finances_list"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/details" />
<android.support.v7.widget.AppCompatButton
android:id="@+id/button_see_all"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="See All"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/finances_list"
app:layout_constraintVertical_bias="1.0" />
</android.support.constraint.ConstraintLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
</RelativeLayout>
В качестве примечания я удалил теги, связанные с привязкой, и android:fillViewport="true"
из NestedScrollView , так как они на самом деле не нужны и помешали работе инспектора макетов.
Вы всегда можете просто не использовать пользовательский вид, но я предполагаю, что вы хотите его для удобства.
Вот макет ExpandedToolbar
, который я использовал для демонстрационных целей.
ExpandedToolbar.java
public class ExpandedToolbar extends AppBarLayout {
public ExpandedToolbar(Context context) {
super(context);
init();
}
public ExpandedToolbar(Context context, AttributeSet attrs) {
super(context, attrs);
init();
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.MyToolbar,
0, 0);
try {
String title = a.getString(R.styleable.MyToolbar_toolbarTitle);
((Toolbar) findViewById(R.id.expanded_toolbar)).setTitle(title);
} finally {
a.recycle();
}
}
private void init() {
inflate(getContext(), R.layout.expanded_toolbar, this);
}
}