Предполагаемое поведение: поведение, которое я собираюсь, наиболее близко к экрану профиля Instagram. Контент (в этом случае, ограничение).
Когда пользователь прокручивает, панель инструментов должна быть Enteralways, становясь видимым, как только пользователь прокручивает. Как нормально.
segmentedtablayout:
segmentedtablayout должен вести себя аналогично панели инструментов, но энтерал перед панелью инструментов. Пробое:
Я попытался установить различные mayout_scrollflags для каждого элемента, но поведение не совсем то, что мне нужно, или они полностью игнорируются. При добавлении нескольких представлений с различными scroll_flags
я также попытался настройка режима коллапса на панели инструментов программатически, чтобы достичь предполагаемого поведения, я был довольно близко, но когда пользователь прокручивает вниз, в то время как ограничение все еще видно, панель инструментов защелкивается в PIN -код, что не то, что я хочу.
Код: Выделить всё
< /code>
Это мое представление пейджер фрагмент Xml. < /p>
< /code>
Код я попытался написать, чтобы настроить PIN < /p>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.segmentedTabLayout.setTabs(listOf("Overview", "Activity", "Settings")) { index ->
when (index) {
0 -> {
println("1")
}
1 -> {
println("2")
}
2 -> {
println("3")
}
}
}
val adapter = SplitPagerAdapter(this)
binding.viewPager.adapter = adapter
var totalScrollDistance = 0
var toolbarHeight = 0
var isPinned = false
var lastOffset = 0
var isScrollingUp = false
// Get the toolbar height when the layout is ready
binding.fragmentToolbar.viewTreeObserver.addOnGlobalLayoutListener {
toolbarHeight = binding.fragmentToolbar.height
}
var maxVerticalOffset: Int = binding.appBarLayout.getHeight()
binding.collapsingToolbar.viewTreeObserver.addOnGlobalLayoutListener {
maxVerticalOffset = binding.collapsingToolbar.height
}
binding.appBarLayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { _, verticalOffset ->
println("verticalOffset: $verticalOffset")
println("lastOffset: $lastOffset")
if (toolbarHeight == 0) return@OnOffsetChangedListener // Ensure toolbarHeight is initialized
// Calculate the scroll change since the last offset
val scrollChange = verticalOffset - lastOffset
if (scrollChange > 0) {
// Scrolling up
if (!isPinned) {
// Pin the toolbar only when scrolling up
setToolbarPinned(true)
isPinned = true
}
isScrollingUp = true
} else if (scrollChange < 0) {
// Scrolling down
totalScrollDistance += scrollChange
// Unpin only after scrolling down by at least the toolbar height
if (totalScrollDistance < -toolbarHeight && isPinned) {
setToolbarPinned(false)
isPinned = false
}
isScrollingUp = false
}
// Update the last vertical offset to track scrolling
lastOffset = verticalOffset
})
}
private fun setToolbarPinned(pin: Boolean) {
val params = binding.fragmentToolbar.layoutParams as CollapsingToolbarLayout.LayoutParams
params.collapseMode = if (pin) {
CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_PIN
} else {
CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_OFF
}
binding.fragmentToolbar.layoutParams = params
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... crollflags