Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arthur3486/bottomsheets
Material Bottom Sheets library for Android
https://github.com/arthur3486/bottomsheets
android android-bottomsheet android-library android-ui bottomsheets java kotlin material material-design material-ui ui view viewgroup
Last synced: about 2 months ago
JSON representation
Material Bottom Sheets library for Android
- Host: GitHub
- URL: https://github.com/arthur3486/bottomsheets
- Owner: arthur3486
- License: apache-2.0
- Created: 2019-02-24T17:03:21.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-05T02:00:16.000Z (almost 2 years ago)
- Last Synced: 2024-08-02T19:33:31.684Z (5 months ago)
- Topics: android, android-bottomsheet, android-library, android-ui, bottomsheets, java, kotlin, material, material-design, material-ui, ui, view, viewgroup
- Language: Java
- Homepage:
- Size: 16.7 MB
- Stars: 77
- Watchers: 4
- Forks: 12
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list - arthur3486/bottomsheets - Material Bottom Sheets library for Android (Java)
README
# BottomSheets
> ***Android library designed to enrich your application with the beautiful stutter-free Material Design Bottom Sheets***
BottomSheets will help you make your application more appealing to your end users with its sleek stutter-free implementation of the Material Bottom Sheets.
[ ![Download](https://api.bintray.com/packages/arthurimsacc/maven/bottomsheets-core/images/download.svg) ](https://bintray.com/arthurimsacc/maven/bottomsheets-core/_latestVersion)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![Platform](https://img.shields.io/badge/platform-Android-green.svg)](http://developer.android.com/index.html)
![](https://img.shields.io/badge/API-21%2B-green.svg?style=flat)
![](https://travis-ci.org/arthur3486/bottomsheets.svg?branch=master)
[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-BottomSheets-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/7720)## Contents
* [Demo](#demo)
* [Getting Started](#getting-started)
* [Structure](#structure)
* [Basic Custom Implementation](#basic-custom-implementation)
* [Action Picker Implementation](#action-picker-implementation)
* [Custom Action Picker Implementation](#custom-action-picker-implementation)
* [Advanced Use](#advanced-use)
* [Contribution](#contribution)
* [Hall of Fame](#hall-of-fame)
* [License](#license)## Demo
* Demo Video
* Screenshots
## Getting Started
1. Make sure that you've added the `jcenter()` repository to your top-level `build.gradle` file.
````groovy
buildscript {
//...
repositories {
//...
jcenter()
}
//...
}
````2. Add the library dependency to your module-level `build.gradle` file.
> ***Latest version:*** [ ![Download](https://api.bintray.com/packages/arthurimsacc/maven/bottomsheets-core/images/download.svg) ](https://bintray.com/arthurimsacc/maven/bottomsheets-core/_latestVersion)````groovy
ext {
//...
bottomSheetsLibraryVersion = "1.0.0"
}dependencies {
//...
implementation "com.arthurivanets.bottomsheet:bottomsheets-core:1.0.0"
}
````3. Enable the **jetifier** and **androidX** support in the top-level `gradle.properties` file.
````groovy
//...
android.enableJetifier=true
android.useAndroidX=true
//....
````4. Update your `compileSdkVersion` in the module-level `build.gradle` file to **28+**.
````groovy
//...
android {
//...
compileSdkVersion 28
//...
}
//...
````5. Update your `com.android.support.appcompat.*` dependency to the new `androidx.appcompat.*` alternative.
````groovy
//...
dependencies {
//...
implementation "androidx.appcompat:appcompat:1.0.2"
//...
}
//...
````6. Proceed with the implementation.
> ***See: [Structure](#structure), [Basic Custom Implementation](#basic-custom-implementation)***## Structure
The library is comprised of 3 modules, namely:
* [`bottomsheets-core`](https://bintray.com/arthurimsacc/maven/bottomsheets-core/_latestVersion) - core functionality (Required)
* [`bottomsheets-sheets`](https://bintray.com/arthurimsacc/maven/bottomsheets-sheets/_latestVersion) - concrete implementations of the common bottom sheet types (Optional)
* [`bottomsheets-ktx`](https://bintray.com/arthurimsacc/maven/bottomsheets-ktx/_latestVersion) - common extensions and utils (Optional)The first module - [`bottomsheets-core`](https://bintray.com/arthurimsacc/maven/bottomsheets-core/_latestVersion) - is a base module the other modules depend on, it is the starting point for all of your custom bottom sheet implementations and is a required module. This module provides you with the base classes required for the bottom sheet implementation, such as the [`BaseBottomSheet.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-core/src/main/java/com/arthurivanets/bottomsheets/BaseBottomSheet.java) which should be extended by your custom implementations of the bottom sheet and [`BottomSheet.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-core/src/main/java/com/arthurivanets/bottomsheets/BottomSheet.java) contract which exposes its supported public APIs, here you will also find the [`Config.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-core/src/main/java/com/arthurivanets/bottomsheets/config/Config.java) class which will help you customize the bottom sheet.
The second module - [`bottomsheets-sheets`](https://bintray.com/arthurimsacc/maven/bottomsheets-sheets/_latestVersion) - is an optional module which includes the implementations of the most common bottom sheet types. Here you will find the [`ActionPickerBottomSheet.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-sheets/src/main/java/com/arthurivanets/bottomsheets/sheets/ActionPickerBottomSheet.java), [`CustomActionPickerBottomSheet.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-sheets/src/main/java/com/arthurivanets/bottomsheets/sheets/CustomActionPickerBottomSheet.java), as well as the coresponding configuration class - [`Config.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-sheets/src/main/java/com/arthurivanets/bottomsheets/sheets/config/Config.java). This module depends on the [`bottomsheets-core`](https://bintray.com/arthurimsacc/maven/bottomsheets-core/_latestVersion) and the [`Adapster`](https://github.com/arthur3486/adapster) library.
The third and last module - [`bottomsheets-ktx`](https://bintray.com/arthurimsacc/maven/bottomsheets-ktx/_latestVersion) - is a collection of the extensions and general utils. Here you'll be able to find the [`BottomSheetsExtensions.kt`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-ktx/src/main/java/com/arthurivanets/bottomsheets/ktx/BottomSheetsExtensions.kt) which will simplify the creation of the common bottom sheet types in your Activities and Fragments. This module depends on the [`bottomsheets-core`](https://bintray.com/arthurimsacc/maven/bottomsheets-core/_latestVersion), [`bottomsheets-sheets`](https://bintray.com/arthurimsacc/maven/bottomsheets-sheets/_latestVersion) and the [`Adapster`](https://github.com/arthur3486/adapster) library.
## Basic Custom Implementation
**IMPORTANT**: In order to prevent the visual inconsistencies which might be caused by certain UI elements of the Application Theme, it is recommended that you specify the Application/Activity Theme without the Action Bar (any variant of the `Theme.NoActionBar` will suffice). You might also want to make your Status Bar translucent for more immersive experience.
In order to implement a basic custom bottom sheet you need to follow three simple steps:
1) Create a new class and extend it from the [`BaseBottomSheet.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-core/src/main/java/com/arthurivanets/bottomsheets/BaseBottomSheet.java).
2) Provide the custom content view for your bottom sheet in the [`onCreateSheetContentView(...)`](https://github.com/arthur3486/bottomsheets/blob/master/app/src/main/java/com/arthurivanets/demo/ui/widget/SimpleCustomBottomSheet.kt#L34).
3) Use the created bottom sheet in your Activity/Fragment.So, let's create a custom bottom sheet class - [`SimpleCustomBottomSheet`](https://github.com/arthur3486/bottomsheets/blob/master/app/src/main/java/com/arthurivanets/demo/ui/widget/SimpleCustomBottomSheet.kt) and provide our own content view:
Kotlin (click to expand)
````kotlin
class SimpleCustomBottomSheet(
hostActivity : Activity,
config : BaseConfig = Config.Builder(hostActivity).build()
) : BaseBottomSheet(hostActivity, config) {override fun onCreateSheetContentView(context : Context) : View {
return LayoutInflater.from(context).inflate(
R.layout.view_simple_custom_bottom_sheet,
this,
false
)
}}
````
Java (click to expand)
````java
public class SimpleCustomBottomSheet extends BaseBottomSheet {public SimpleCustomBottomSheet(@NonNull Activity hostActivity) {
this(hostActivity, new Config.Builder(hostActivity).build());
}public SimpleCustomBottomSheet(@NonNull Activity hostActivity, @NonNull BaseConfig config) {
super(hostActivity, config);
}@NonNull
@Override
public final View onCreateSheetContentView(@NonNull Context context) {
return LayoutInflater.from(context).inflate(
R.layout.view_simple_custom_bottom_sheet,
this,
false
);
}}
````
And now let's use the created [`SimpleCustomBottomSheet`](https://github.com/arthur3486/bottomsheets/blob/master/app/src/main/java/com/arthurivanets/demo/ui/widget/SimpleCustomBottomSheet.kt) in our Activity:
Kotlin (click to expand)
````kotlin
class MainActivity : AppCompatActivity() {private var bottomSheet : BaseBottomSheet? = null
private fun showCustomBottomSheet() {
//...
bottomSheet = SimpleCustomBottomSheet(this).also(BottomSheet::show)
}}
````
Java (click to expand)
````java
public class MainActivity extends AppCompatActivity {private BottomSheet bottomSheet;
private void showCustomBottomSheet() {
//...
bottomSheet = new SimpleCustomBottomSheet(this);
bottomSheet.show();
}}
````
## Action Picker Implementation
The implementation of the Action Picker Bottom Sheet becomes a trivial task with [`ActionPickerBottomSheet.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-sheets/src/main/java/com/arthurivanets/bottomsheets/sheets/ActionPickerBottomSheet.java), as all you need to do here is simply provide a list of options and a bottom sheet configuration.
Let's use the [`ActionPickerBottomSheet.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-sheets/src/main/java/com/arthurivanets/bottomsheets/sheets/ActionPickerBottomSheet.java) in our Activity:
* **With [`bottomsheets-ktx`](https://bintray.com/arthurimsacc/maven/bottomsheets-ktx/_latestVersion)**
Kotlin (click to expand)
````kotlin
class MainActivity : AppCompatActivity() {private var bottomSheet : BottomSheet? = null
private fun showActionsBottomSheet() {
bottomSheet = showActionPickerBottomSheet(
options = getActionOptions(),
onItemSelectedListener = OnItemSelectedListener {
// do something...
}
)
}fun getActionOptions() : List {
// your options
}}
````
Java (click to expand)
````java
public class MainActivity extends AppCompatActivity {private BottomSheet bottomSheet;
private void showActionsBottomSheet() {
bottomSheet = BottomSheetsUtils.showActionPickerBottomSheet(
this,
getActionOptions(),
new OnItemSelectedListener() {
@Override
public void onItemSelected(@NonNull Option item) {
// do something
}
}
);
}private List getActionOptions() {
// your options
}}
````
* **Without [`bottomsheets-ktx`](https://bintray.com/arthurimsacc/maven/bottomsheets-ktx/_latestVersion)**
Kotlin (click to expand)
````kotlin
class MainActivity : AppCompatActivity() {private var bottomSheet : BottomSheet? = null
private fun showActionsBottomSheet() {
bottomSheet = ActionPickerBottomSheet.init(
this,
getActionOptions().map(::ActionItem),
Config.Builder(this).build()
)
bottomSheet.setOnItemSelectedListener {
// do something...
}
bottomSheet.show()
}fun getActionOptions() : List {
// your options
}}
````
Java (click to expand)
````java
public class MainActivity extends AppCompatActivity {private BottomSheet bottomSheet;
private void showActionsBottomSheet() {
bottomSheet = ActionPickerBottomSheet.init(
this,
getActionOptions(),
new Config.Builder(this).build()
);
bottomSheet.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(@NonNull ActionItem item) {
// do something
}
});
bottomSheet.show();
}private List getActionOptions() {
// your options wrapped into ActionItem(-s)
}}
````
## Custom Action Picker Implementation
The implementation of the Custom Action Picker Bottom Sheet is not that much different from the [`Action Picker Implemenetation`](#action-picker-implementation), you just need to use the [`CustomActionPickerBottomSheet.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-sheets/src/main/java/com/arthurivanets/bottomsheets/sheets/CustomActionPickerBottomSheet.java) instead of the [`ActionPickerBottomSheet.java`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-sheets/src/main/java/com/arthurivanets/bottomsheets/sheets/ActionPickerBottomSheet.java) in conjunction with your custom [`BaseActionItem`](https://github.com/arthur3486/bottomsheets/blob/master/bottomsheets-sheets/src/main/java/com/arthurivanets/bottomsheets/sheets/adapters/actionpicker/BaseActionItem.java)-based Items and that's it.
See the example of a [Custom Action Picker in Action](https://github.com/arthur3486/bottomsheets/blob/master/app/src/main/java/com/arthurivanets/demo/ui/MainActivity.kt#L99).
## Advanced Use
See the [Sample app](https://github.com/arthur3486/bottomsheets/tree/master/app/src/main/java/com/arthurivanets/demo).
## Contribution
See the [CONTRIBUTING.md](CONTRIBUTING.md) file.
## Hall of Fame
> Using BottomSheets in your app and want it to get listed here? Email me at [email protected]!
## License
BottomSheets library is licensed under the [Apache 2.0 License](LICENSE).