I have created compound view with my desired behavior of views
class CustomCollapsableToolbar @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : AppBarLayout(context, attrs, defStyleAttr) {
private val binding: CollapsableToolbarBinding
init {
inflate(context, R.layout.collapsable_toolbar, this)
binding = CollapsableToolbarBinding.bind(this)
val collapsingToolbarLayout = binding.collapsingToolbarLayout
val appBarLayout = binding.appBarLayout
appBarLayout.addOnOffsetChangedListener { appBarLayout2, verticalOffset ->
val totalScrollRange = appBarLayout2.totalScrollRange
// Calculate the percentage of collapse
val collapsePercentage = abs(verticalOffset).toFloat() / totalScrollRange.toFloat()
// Change the visibility and text of the additional TextView based on the collapsePercentage
val alphaValue = 1 - collapsePercentage * 2
binding.additionalTextView.alpha = alphaValue
binding.titleTextView.alpha = alphaValue
binding.staticTitle.alpha = collapsePercentage
}
}
}
here's the layout collapsible_toolbar.xml
<com.google.android.material.appbar.AppBarLayout android:id="@+id/appBarLayout"
style="@style/ToolBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
style="@style/ToolBarStyle"
android:layout_width="match_parent"
android:layout_height="150dp"
app:collapsedTitleTextAppearance="@style/CollapsingBase_ToolbarTheme.CollapsedTitleText"
app:expandedTitleTextAppearance="@style/CollapsingBase_ToolbarTheme.ExpandedTitleText"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:collapsedTitleGravity="center"
app:titleCollapseMode="scale">
<TextView
android:id="@+id/static_title"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="12dp"
android:text="Centered title"
android:textSize="16sp"
android:textColor="@color/text_primary"
app:layout_collapseMode="pin"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_margin="12dp"
android:text="History"
android:textColor="@color/brand1_500"
app:layout_collapseMode="pin" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="12dp"
app:layout_collapseMode="pin"
android:src="@drawable/ic_back" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginHorizontal="12dp"
android:layout_gravity="bottom">
<!-- Title TextView -->
<TextView
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Main text"
android:textSize="24sp" />
<!-- Additional TextView -->
<TextView
android:id="@+id/additionalTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Additional text"
android:textSize="16sp" />
</LinearLayout>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
and when I try to use it in my fragment it just doesn't respond and stays as a view(no collapsing and expanding).
<androidx.coordinatorlayout.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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/static_white"
tools:context=".StatementsFragment">
<com.example.core.ui.custom.CustomCollapsableToolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris viverra urna eu gravida hendrerit. Suspendisse lobortis non turpis vel ullamcorper. Ut dolor odio, sagittis vel pellentesque sed, ultrices quis nunc. Aliquam porttitor imperdiet malesuada. Fusce dapibus lobortis accumsan. In faucibus sollicitudin enim vitae aliquet. Aliquam ut euismod ipsum. Praesent at ullamcorper erat. Nunc accumsan ipsum in elit molestie ullamcorper. Nullam finibus sed ante id feugiat. Praesent eu malesuada lacus. Sed eu massa lobortis ante laoreet vestibulum ac non arcu.\n\nProin malesuada lacus vel nulla consequat dignissim. Praesent tempus, felis at aliquet interdum, metus mauris venenatis erat, vel tempor ipsum justo vel orci. Nullam ipsum justo, elementum vitae libero in, tempus ornare libero. Aenean venenatis euismod massa, vitae ornare justo laoreet iaculis. In non consequat enim, vel finibus mi. Vestibulum congue gravida lacinia. Suspendisse potenti. Proin dignissim, purus in tristique vehicula, ipsum enim blandit neque, non ornare ex diam quis tortor. Aenean vestibulum, metus vel sollicitudin euismod, purus lacus condimentum mi, eu mattis dui turpis nec lectus. Duis eget dolor id magna lobortis bibendum. Proin in sem metus. Sed a mattis felis. Quisque luctus auctor justo vel porttitor. In efficitur mattis rhoncus.\n\nAliquam vel pulvinar lacus. Etiam aliquet turpis lacus, at auctor erat efficitur in. Vestibulum consequat elit libero, vel semper enim ultricies malesuada. Ut eu sollicitudin turpis. Aliquam volutpat ante ut commodo interdum. Curabitur pharetra, urna quis viverra placerat, sem nisi maximus elit, vel finibus elit felis non magna. Proin pretium, nisi malesuada lacinia vestibulum, nunc velit tempor augue, venenatis aliquet ante nisl in metus. Donec ultricies mauris efficitur dui convallis auctor. Vestibulum fringilla orci ligula, at pretium neque iaculis tempor. Vestibulum semper, libero vitae tincidunt rhoncus, neque lorem tincidunt dolor, ut tempor orci sem eu felis. Donec quis tempor diam. Suspendisse ornare, mi dapibus molestie finibus, sapien eros rhoncus velit, id pharetra elit odio et ipsum. Cras vitae augue eget nulla hendrerit volutpat. Nulla facilisis purus eu justo cursus cursus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris viverra urna eu gravida hendrerit. Suspendisse lobortis non turpis vel ullamcorper. Ut dolor odio, sagittis vel pellentesque sed, ultrices quis nunc. Aliquam porttitor imperdiet malesuada. Fusce dapibus lobortis accumsan. In faucibus sollicitudin enim vitae aliquet. Aliquam ut euismod ipsum. Praesent at ullamcorper erat. Nunc accumsan ipsum in elit molestie ullamcorper. Nullam finibus sed ante id feugiat. Praesent eu malesuada lacus. Sed eu massa lobortis ante laoreet vestibulum ac non arcu.\n\nProin malesuada lacus vel nulla consequat dignissim. Praesent tempus, felis at aliquet interdum, metus mauris venenatis erat, vel tempor ipsum justo vel orci. Nullam ipsum justo, elementum vitae libero in, tempus ornare libero. Aenean venenatis euismod massa, vitae ornare justo laoreet iaculis. In non consequat enim, vel finibus mi. Vestibulum congue gravida lacinia. Suspendisse potenti. Proin dignissim, purus in tristique vehicula, ipsum enim blandit neque, non ornare ex diam quis tortor. Aenean vestibulum, metus vel sollicitudin euismod, purus lacus condimentum mi, eu mattis dui turpis nec lectus. Duis eget dolor id magna lobortis bibendum. Proin in sem metus. Sed a mattis felis. Quisque luctus auctor justo vel porttitor. In efficitur mattis rhoncus.\n\nAliquam vel pulvinar lacus. Etiam aliquet turpis lacus, at auctor erat efficitur in. Vestibulum consequat elit libero, vel semper enim ultricies malesuada. Ut eu sollicitudin turpis. Aliquam volutpat ante ut commodo interdum. Curabitur pharetra, urna quis viverra placerat, sem nisi maximus elit, vel finibus elit felis non magna. Proin pretium, nisi malesuada lacinia vestibulum, nunc velit tempor augue, venenatis aliquet ante nisl in metus. Donec ultricies mauris efficitur dui convallis auctor. Vestibulum fringilla orci ligula, at pretium neque iaculis tempor. Vestibulum semper, libero vitae tincidunt rhoncus, neque lorem tincidunt dolor, ut tempor orci sem eu felis. Donec quis tempor diam. Suspendisse ornare, mi dapibus molestie finibus, sapien eros rhoncus velit, id pharetra elit odio et ipsum. Cras vitae augue eget nulla hendrerit volutpat. Nulla facilisis purus eu justo cursus cursus." />
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
However if I add it like this:
<include layout="@layout/collapsable_toolbar"/>
it works fine(Toolbar is collapsing and expanding as I scroll) but I have to keep my behavior of views in fragment.
I want to reuse exact this header in other fragments too with just changing titles. How can I achieve that?