RecyclerView extension of Views DSL
Supported platforms: Android.
If you want to use this dependency without using one of the fun packs,
you can use Splitties.viewsDslRecyclerview
, provided you have refreshVersions added to the project.
For reference, the maven coordinates of this module are com.louiscad.splitties:splitties-views-dsl-recyclerview
.
To get scrollbars on a View
in Android, you need to enable it in the
android:scrollbars
xml attribute first. Only then you can disable and
re-enable them back using the isHorizontalScrollBarEnabled
and
isVerticalScrollBarEnabled
properties.
To overcome this problem, this split provides a recyclerView
function.
This function inflates a RecyclerView
with both horizontal and vertical
scrollbars enabled in xml, but the scrollbars will only ever appear if your
content can scroll in that direction, so you likely just have to use it.
Let's say you have a LinearLayout
, or a TextView
that is just a bit too
long to fit into all screen sizes. In xml, you'd likely use NestedScrollView
,
or good old ScrollView
. Unfortunately, NestedScrollView
has bugs that may
cut off the content in some hard to reproduce consistently cases, and
ScrollView
doesn't support nested scroll as you may need in your app.
On the other hand, there's RecyclerView
, which has none of these issues.
This split provides a wrapInRecyclerView
extension function for View
that returns a RecyclerView
wrapping the View
is has been called on.
It is vertical by default, but you can set the horizontal
parameter to
true
Also, you can (should) specify the id
so scrolling position is saved
into instance state and restored when needed.
And you have an optional lambda to configure the RecyclerView
, which
can be useful for things like setting the padding and disabling clipping,
setting the background, etc.
Here's two small examples:
val content = textView {
textResource = R.string.a_very_long_string
}.wrapInRecyclerView(id = R.id.main_content) {
verticalPadding = dip(8)
horizontalPadding = dip(16)
clipToPadding = false
}
val content = textView {
textResource = R.string.good_luck_scrolling_these_10_thousand_characters
textSize = 48f // This size is interpreted in sp unit BTW
}.wrapInRecyclerView(horizontal = true)
RecyclerView.onCreateViewHolder
method passes the parent ViewGroup
so
layout parameters are properly generated when the item view is inflated from
xml. When using Views DSL in a RecyclerView
, you are not inflating xml, so
this parent
parameter is of no use. However, you can set the item view
layout parameters manually.
This split provides two extension functions on RecyclerView.LayoutManager
to make it easy: verticalListLayoutParams
and horizontalListLayoutParams
.