{"id":15025712,"url":"https://github.com/saket/inboxrecyclerview","last_synced_at":"2025-05-15T15:09:07.359Z","repository":{"id":53150098,"uuid":"145278249","full_name":"saket/InboxRecyclerView","owner":"saket","description":"Build expandable descendant navigation, inspired by Google Inbox","archived":false,"fork":false,"pushed_at":"2021-08-26T19:07:54.000Z","size":136759,"stargazers_count":1966,"open_issues_count":1,"forks_count":118,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-04-07T20:11:41.823Z","etag":null,"topics":["gesture","inbox","recyclerview"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saket.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-08-19T06:14:50.000Z","updated_at":"2025-03-16T17:21:45.000Z","dependencies_parsed_at":"2022-08-13T02:20:28.173Z","dependency_job_id":null,"html_url":"https://github.com/saket/InboxRecyclerView","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saket%2FInboxRecyclerView","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saket%2FInboxRecyclerView/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saket%2FInboxRecyclerView/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saket%2FInboxRecyclerView/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saket","download_url":"https://codeload.github.com/saket/InboxRecyclerView/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247721898,"owners_count":20985084,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gesture","inbox","recyclerview"],"created_at":"2024-09-24T20:02:52.868Z","updated_at":"2025-04-07T20:11:46.919Z","avatar_url":"https://github.com/saket.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![](https://github.com/saket/InboxRecyclerView/blob/master/docs/images/static_thumbnail.jpg)](https://www.youtube.com/playlist?list=PLY9Ajk3MUE7UAT4rn9LO-jSPfkPm5ewrQ)\n\n`InboxRecyclerView` is a library for building expandable descendant navigation inspired by [Google Inbox](http://androidniceties.tumblr.com/post/100872004063/inbox-by-gmail-google-play-link) and [Reply](https://material.io/design/material-studies/reply.html), and is an easy drop-in into existing projects. You can take a look at the [sample app](https://github.com/saket/InboxRecyclerView/tree/master/sample) for best practices or [download its APK](https://github.com/saket/InboxRecyclerView/releases) for trying it out on your phone. If you're interested in learning how it was created, [here's an in-depth blog post](https://saket.me/inbox-recyclerview).\n\n```groovy\nimplementation 'me.saket:inboxrecyclerview:3.0.0'\n```\n\n### Usage\n\n**Layout**\n\n```xml\n\u003cme.saket.inboxrecyclerview.InboxRecyclerView\n  android:layout_width=\"match_parent\"\n  android:layout_height=\"match_parent\" /\u003e\n\n\u003cme.saket.inboxrecyclerview.page.ExpandablePageLayout\n  android:layout_width=\"match_parent\"\n  android:layout_height=\"match_parent\"\n  android:background=\"@color/same_as_your_list_items\"\u003e\n\n  \u003c!--\n    Your expandable content will live here. Make sure that\n    your page has a higher z-index than the list by giving\n    it a higher view position or a higher elevation.\n  --\u003e\n\u003c/me.saket.inboxrecyclerview.page.ExpandablePageLayout\u003e\n```\n\n**Expanding content**\n\n```kotlin\nrecyclerView.itemExpandAnimator = ItemExpandAnimator.scale() // or split() / none()\nrecyclerView.dimPainter = DimPainter.listAndPage(Color.WHITE, alpha = 0.65f)\n\nrecyclerView.expandablePage = findViewById(...).also {\n  it.pushParentToolbarOnExpand(toolbar)\n  it.addOnPullListener(PageCollapseEligibilityHapticFeedback(it))\n}\n\nrecyclerViewAdapter.onItemClick = { clickedItem -\u003e\n  // Load or update your content inside the page here.\n  recyclerView.expandItem(clickedItem.adapterId)\n}\n```\n\n### How do I…\n\n- [customize item expand animations?](docs/item_animators.md)\n- [control the pull-to-collapse gesture?](docs/pull_to_collapse.md)\n- [change background dimming?](docs/background_dim.md)\n- [listen to state changes?](docs/page_callbacks.md)\n- [expand items without using `Long` based adapter IDs?](https://github.com/saket/InboxRecyclerView/wiki/Custom-expansion-keys)\n\n### Pull collapsible activities\n\nTo maintain consistency across your whole app, a `PullCollapsibleActivity` is also included that brings the same animations and gesture to activities with little effort.\n\nStep 1. Extend `PullCollapsibleActivity`.\n\nStep 2. Add these attributes to the activity’s theme:\n\n```xml\n\u003citem name=\"android:windowIsTranslucent\"\u003etrue\u003c/item\u003e\n\u003citem name=\"android:colorBackgroundCacheHint\"\u003e@null\u003c/item\u003e\n```\n\n### License\n```\nCopyright 2018 Saket Narayan.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaket%2Finboxrecyclerview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaket%2Finboxrecyclerview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaket%2Finboxrecyclerview/lists"}