├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── mayojava │ │ └── sample │ │ └── bottomsheetdemo │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── mayojava │ │ │ └── sample │ │ │ └── bottomsheetdemo │ │ │ ├── CustomBottomSheetDialog.java │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ ├── activity_main.xml │ │ └── layout_custom_bottom_sheet.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── mayojava │ └── sample │ └── bottomsheetdemo │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .idea/ 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BottomSheetDemo 2 | Sample Android app that shows how to use [BottomSheet](http://android-developers.blogspot.com.ng/2016/02/android-support-library-232.html) in your android applications, [related article](http://mayojava.github.io/android/bottom-sheets-android/) 3 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | apply plugin: 'android-apt' 4 | 5 | android { 6 | compileSdkVersion 23 7 | buildToolsVersion "23.0.3" 8 | 9 | defaultConfig { 10 | applicationId "com.mayojava.sample.bottomsheetdemo" 11 | minSdkVersion 15 12 | targetSdkVersion 23 13 | versionCode 1 14 | versionName "1.0" 15 | } 16 | buildTypes { 17 | release { 18 | minifyEnabled false 19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 | } 21 | } 22 | } 23 | 24 | dependencies { 25 | compile fileTree(dir: 'libs', include: ['*.jar']) 26 | testCompile 'junit:junit:4.12' 27 | compile 'com.android.support:appcompat-v7:23.4.0' 28 | compile "com.android.support:design:23.4.0" 29 | 30 | compile 'com.jakewharton:butterknife:8.1.0' 31 | apt 'com.jakewharton:butterknife-compiler:8.1.0' 32 | } 33 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/mayowa.adegeye/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/mayojava/sample/bottomsheetdemo/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.mayojava.sample.bottomsheetdemo; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/mayojava/sample/bottomsheetdemo/CustomBottomSheetDialog.java: -------------------------------------------------------------------------------- 1 | package com.mayojava.sample.bottomsheetdemo; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.design.widget.BottomSheetDialogFragment; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | 10 | /** 11 | * Created by mayowa.adegeye on 28/06/2016. 12 | */ 13 | public class CustomBottomSheetDialog extends BottomSheetDialogFragment { 14 | public static CustomBottomSheetDialog getInstance() { 15 | return new CustomBottomSheetDialog(); 16 | } 17 | 18 | @Nullable 19 | @Override 20 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 21 | return inflater.inflate(R.layout.layout_custom_bottom_sheet, container, false); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/mayojava/sample/bottomsheetdemo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.mayojava.sample.bottomsheetdemo; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.design.widget.BottomSheetBehavior; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.os.Bundle; 7 | import android.view.View; 8 | import android.widget.Button; 9 | import android.widget.TextView; 10 | 11 | import butterknife.BindView; 12 | import butterknife.ButterKnife; 13 | import butterknife.OnClick; 14 | 15 | public class MainActivity extends AppCompatActivity { 16 | @BindView(R.id.button_show_bottom_sheet) Button mButtonShowBottomSheet; 17 | @BindView(R.id.button_collapse_bottom_sheet) Button mCollapseBottomSheet; 18 | @BindView(R.id.button_hide_bottom_sheet) Button mHideBottomSheet; 19 | @BindView(R.id.button_show_bottom_sheet_dialog) Button mShowBottomSheetDialog; 20 | @BindView(R.id.layout_bottom_sheet) View mLayoutBottomSheet; 21 | @BindView(R.id.text_view_sheet_title) TextView mTextViewBottomSheet; 22 | 23 | private BottomSheetBehavior mBottomSheetBehavior; 24 | 25 | @Override 26 | protected void onCreate(Bundle savedInstanceState) { 27 | super.onCreate(savedInstanceState); 28 | setContentView(R.layout.activity_main); 29 | 30 | ButterKnife.bind(this); 31 | 32 | mBottomSheetBehavior = BottomSheetBehavior.from(mLayoutBottomSheet); 33 | mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 34 | @Override 35 | public void onStateChanged(@NonNull View bottomSheet, int newState) { 36 | switch (newState) { 37 | case BottomSheetBehavior.STATE_EXPANDED: 38 | mTextViewBottomSheet.setText(getString(R.string.text_showing_sheet_content)); 39 | break; 40 | default: 41 | mTextViewBottomSheet.setText(getString(R.string.text_pull_to_show_more)); 42 | break; 43 | 44 | } 45 | } 46 | 47 | @Override 48 | public void onSlide(@NonNull View bottomSheet, float slideOffset) { 49 | 50 | } 51 | }); 52 | } 53 | 54 | @OnClick(R.id.button_show_bottom_sheet) 55 | public void showBottomSheet() { 56 | mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); 57 | } 58 | 59 | @OnClick(R.id.button_collapse_bottom_sheet) 60 | public void collapseBottomSheet() { 61 | mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 62 | } 63 | 64 | @OnClick(R.id.button_hide_bottom_sheet) 65 | public void hideBottomSheet() { 66 | mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); 67 | } 68 | 69 | @OnClick(R.id.button_show_bottom_sheet_dialog) 70 | public void showBottomSheetDialog() { 71 | CustomBottomSheetDialog bottomSheetDialog = CustomBottomSheetDialog.getInstance(); 72 | bottomSheetDialog.show(getSupportFragmentManager(), "Custom Bottom Sheet"); 73 | } 74 | 75 | 76 | } 77 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 |