saket/InboxRecyclerView
Build expandable descendant navigation, inspired by Google Inbox
repo name | saket/InboxRecyclerView |
repo link | https://github.com/saket/InboxRecyclerView |
homepage | |
language | Kotlin |
size (curr.) | 8597 kB |
stars (curr.) | 1583 |
created | 2018-08-19 |
license | Apache License 2.0 |
InboxRecyclerView is a library for building expandable descendant navigation, inspired by Google Inbox and Reply. If you’re interested in learning how it was created, here’s a detailed blog post.
implementation 'me.saket:inboxrecyclerview:2.0.0-beta3'
FYI, InboxRecyclerView
has a dependency on androidx
. If you haven’t migrated from the support library already, this would be a good opportunity.
Usage
InboxRecyclerView
can be dropped in existing projects without requiring any effort. You can take a look at the sample app for best practices or download its APK for trying it out on your phone.
Layout
<me.saket.inboxrecyclerview.InboxRecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!--
This is where your expandable content will be present. One
way of using it would be to add a Fragment inside the layout
and update it when any list item is clicked.
It's recommended that the content page has a higher z-index
than the list. This can be achieved by either giving it a
higher view position or a higher elevation.
-->
<me.saket.inboxrecyclerview.page.ExpandablePageLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/window_background" />
Expanding content
val expandablePage = findViewById(...)
expandablePage.pushParentToolbarOnExpand(toolbar)
recyclerView.expandablePage = expandablePage
recyclerView.tintPainter = TintPainter.uncoveredArea(Color.WHITE, opacity = 0.65f)
recyclerViewAdapter.itemClickListener = { clickedItem ->
// Load content inside expandablePage.
recyclerView.expandItem(clickedItem.adapterId)
}
How do I…
- customize item expand animations?
- control the pull-to-collapse gesture?
- change the background tint?
- listen to state changes?
Pull collapsible activities
To maintain consistency across the whole app, this library also includes a PullCollapsibleActivity
that brings the same animations and gesture to activities with little effort.
Step 1. Extend PullCollapsibleActivity
.
Step 2. Add these attributes to the activity’s theme:
<item name=“android:windowIsTranslucent”>true</item>
<item name=“android:colorBackgroundCacheHint”>@null</item>
License
Copyright 2018 Saket Narayan.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.