I use MotionLayout to collapse/expand header in toolbar. I want to be able to expand/collapse my header even also by swiping textview R.id.toolbar_title, but now this OnSwipe on main_activity_scene.xml concenring the parent (R.id.ll_toolbar) of this TextView R.id.toolbar_title seems to be hidden by onClickListener and this swipe gesture not work on this TextView. But this view is a part of R.id.ll_toolbar so I want this TextView also to be able to swipe.
I hope you understand.
Here is my code:
MainActivity.kt
class MainActivity : AppCompatActivity(), OnChangeFragment {
private lateinit var toolbarSubtitle: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
initToolbarMembers()
changeFragment(CurrencyListFragment(), ChangeFragmentData())
}
override fun changeFragment(fragment: Fragment, changeFragmentData: ChangeFragmentData) {
if(fragment is SpecificCurrencyFragment) {
val args = Bundle()
args.putSerializable(SpecificCurrencyFragment.MAP_DATA_RECEIVE, changeFragmentData.mapOfCurrency)
args.putString(SpecificCurrencyFragment.DAY_DATA_RECEIVE, changeFragmentData.day)
fragment.setArguments(args)
}
supportFragmentManager.beginTransaction().apply {
setCustomAnimations(R.anim.fade_in, R.anim.fade_out)
replace(R.id.fragment_container, fragment)
addToBackStack(null)
commit()
}
when (fragment) {
is CurrencyListFragment -> changeToolbarSubtitle("CurrencyListFragment.kt")
is AboutFragment -> changeToolbarSubtitle("AboutFragment.kt")
is SpecificCurrencyFragment -> changeToolbarSubtitle("SpecificCurrencyFragment.kt")
}
}
override fun onBackPressed() {
super.onBackPressed()
finishAffinity()
}
private fun initToolbarMembers() {
//findViewById<TextView>(R.id.toolbar_title).setOnClickListener { changeFragment(CurrencyListFragment(), ChangeFragmentData()) }
findViewById<TextView>(R.id.about).setOnClickListener { changeFragment(AboutFragment(), ChangeFragmentData()) }
toolbarSubtitle = findViewById(R.id.toolbar_subtitle)
}
private fun changeToolbarSubtitle(subtitle: String) {
toolbarSubtitle.text = subtitle
}
}
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
motion:layoutDescription="@xml/main_activity_scene">
<ImageView
android:id="@+id/iv_header"
android:layout_width="match_parent"
android:layout_height="200dp"
android:src="@mipmap/exchange_rates"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/ll_toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/teal_700"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="8dp"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toBottomOf="@+id/iv_header">
<RelativeLayout
android:id="@+id/rl_inside_toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/toolbar_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/toolbar_title"
android:text="fragment"
android:textSize="12sp"
android:textStyle="bold" />
</RelativeLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize" />
<TextView
android:id="@+id/about"
android:layout_width="wrap_content"
android:layout_height="?attr/actionBarSize"
android:gravity="center_vertical"
android:text="ABOUT"
android:layout_marginEnd="10dp"
android:textSize="18sp"
android:visibility="visible"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.motion.widget.MotionLayout>
main_activity_scene.xml
<?xml version="1.0" encoding="utf-8"?>
<MotionScene
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@id/start"
motion:duration="1000">
<KeyFrameSet>
<KeyAttribute
motion:motionTarget="@+id/about"
motion:framePosition="0"
android:alpha="0" />
</KeyFrameSet>
<OnSwipe
motion:touchRegionId="@+id/ll_toolbar"
motion:touchAnchorId="@+id/iv_header"
motion:touchAnchorSide="bottom" />
</Transition>
<ConstraintSet android:id="@+id/start">
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:layout_height="1dp"
android:layout_width="match_parent"
android:id="@+id/iv_header" />
</ConstraintSet>
</MotionScene>
Thank you in advance!

