• Stars
    star
    693
  • Rank 65,262 (Top 2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 9 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

ExpandableSelector is an Android library created to show a list of Button/ImageButton widgets inside a animated container which can be collapsed or expanded.

Karumi logo ExpandableSelector Build Status Maven Central Android Arsenal

ExpandableSelector is an Android library created to show a list of Button/ImageButton widgets inside a animated container which can be collapsed or expanded.

Screenshots

Demo Screenshot

Usage

To use ExpandableSelector in your application you have to follow this steps:

  • 1 - Add ExpandableSelector to your layout:
 <com.karumi.expandableselector.ExpandableSelector
      android:id="@+id/es_sizes"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
  • 2 - During your Activity/Fragment creation lifecycle create a list of ExpandableItem instances and configure them to be used inside your ExpandableSelector widget:
private void initializeSizesExpandableSelector() {
    ExpandableSelector sizesExpandableSelector = (ExpandableSelector) findViewById(R.id.es_sizes);
    List<ExpandableItem> expandableItems = new ArrayList<ExpandableItem>();
    expandableItems.add(new ExpandableItem("XL"));
    expandableItems.add(new ExpandableItem("L"));
    expandableItems.add(new ExpandableItem("M"));
    expandableItems.add(new ExpandableItem("S"));
    sizesExpandableSelector.showExpandableItems(expandableItems);
}
  • 3 - To be able to listen the animation events configure a ExpandableSelectorListener instance:
private void configureExpandableSelectorListener() {

    sizesExpandableSelector.setExpandableSelectorListener(new ExpandableSelectorListener() {
          @Override public void onCollapse() {
            //Do something here
          }

          @Override public void onExpand() {
            //Do something here
          }

          @Override public void onCollapsed() {
            //Do something here
          }

          @Override public void onExpanded() {
            //Do something here
          }
        });
}
  • 4 - To be able to listen the click events configure a OnExpandableItemClickListener instance:
private void configureExpandableSelectorClickListener() {

    sizesExpandableSelector.setOnExpandableItemClickListener(new OnExpandableItemClickListener() {
          @Override public void onExpandableItemClickListener(int index, View view) {
             //Do something here
          }
        });
}

Customization

You can easily customize the appearance of your ExpandableItem instances. Just asign a value to expandableItemSyle attribute in your theme and make it reference a custom style.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="expandableItemStyle">@style/ExpandableItemStyle</item>
</style>

<style name="ExpandableItemStyle">
    <item name="android:layout_height">@dimen/item_size</item>
    <item name="android:layout_width">@dimen/item_size</item>
    <item name="android:background">@drawable/bg_item_with_title</item>
    <item name="android:layout_margin">@dimen/item_margin</item>
    <item name="android:textColor">@color/gray</item>
    <item name="android:textSize">@dimen/item_text_size</item>
</style>

Remember that declaring a ExpandableItemStyle as described before with the layout height and width is mandatory to avoid inflation errors.

The resources you can show in the Button/ImageButton widgets automatically added to ExpandableSelector are:

  • Background resource identifier configured as Button/ImageButton background.
  • Resource identifier configured as ImageButton image source.
  • Title configured as Button text.

All this information will be provided to the ExpandableSelector inside a List<ExpandableItem> object created by the library user.

Some extra configuration parameters can be provided from the XML like styleable attributes:

  <com.karumi.expandableselector.ExpandableSelector
      xmlns:expandable_selector="http://schemas.android.com/apk/res-auto"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      expandable_selector:hide_background_if_collapsed="true"
      expandable_selector:hide_first_item_on_collapse="true"
      expandable_selector:expand_interpolator="@android:anim/accelerate_interpolator"
      expandable_selector:collapse_interpolator="@android:anim/decelerate_interpolator"
      expandable_selector:container_interpolator="@android:anim/accelerate_decelerate_interpolator"
      expandable_selector:animation_duration="100">

The attributes you can configure are:

  • expandable_selector:hide_background_if_collapsed: Changes the background associated to the ExpandableSelector widget to a transparent one while the widget is collapsed.
  • expandable_selector:hide_first_item_on_collapse: Changes the first item visibility to View.INVISIBLE when the ExpandableSelector is collapsed.
  • expandable_selector:expand_interpolator: Changes the interpolator used in the expand animation (applies to the items), you can use an interpolator available in the platform, or create your own.
  • expandable_selector:collapse_interpolator: Changes the interpolator used in the collapse animation (applies to the items).
  • expandable_selector:container_interpolator: Changes the interpolator used in the expand & collapse animation (applies to the container)
  • expandable_selector:animation_duration: Changes the animation duration in milliseconds to the one indicated.

Add it to your project

Add ExpandableSelector dependency to your build.gradle file

dependencies{
    compile 'com.karumi:expandableselector:1.0.0'
}

or to your pom.xml if you are using Maven instead of Gradle

<dependency>
    <groupId>com.karumi</groupId>
    <artifactId>expandableselector</artifactId>
    <version>1.0.0</version>
    <type>aar</type>
</dependency>

Do you want to contribute?

Please, do it! We'd like to improve this library with your help :)

License

Copyright 2015 Karumi

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.

More Repositories

1

Dexter

Android library that simplifies the process of requesting permissions at runtime.
Java
5,233
star
2

Rosie

Rosie is an Android framework to create applications following the principles of Clean Architecture.
Java
1,824
star
3

KataSuperHeroesAndroid

Super Heroes Kata for Android Developers. The main goal is to practice UI Testing.
Java
683
star
4

HeaderRecyclerView

HeaderRecyclerView is an Android library created to be able to use RecyclerView.Adapter with a header in a easy way. To use this library create your RecyclerView.Adapter classes extending from HeaderRecyclerViewAdapter.
Java
501
star
5

Dividers

Dividers is a simple Android library to create easy separators for your RecyclerViews
Java
483
star
6

AndroidAudit

Your Android app as a crime scene!!!
468
star
7

BothamUI

Model View Presenter Framework written in Swift.
Swift
347
star
8

KataScreenshotAndroid

Screenshot Kata for Android Developers. The main goal is to practice UI Testing.
Java
265
star
9

KataContactsJava

KataContacts written in Java. The main goal is to practice Clean Architecture Development.
Java
111
star
10

project-quality-assurance

Define a general guidance for tech projects quality assurance at Karumi.
102
star
11

KataSuperHeroesKotlin

Super Heroes Kata for Android Developers in Kotlin. The main goal is to practice UI Testing.
Kotlin
86
star
12

KataScreenshotKotlin

Screenshot Kata for Android Developers with Kotlin. The main goal is to practice UI Screenshot Testing.
Kotlin
76
star
13

KataSuperHeroesIOS

Super heroes kata for iOS Developers. The main goal is to practice UI Testing.
Swift
69
star
14

learnyougit

A self-guided workshop to learn the basics and some of the internals of Git
JavaScript
67
star
15

MarvelApiClientAndroid

Api client for Marvel Api
Java
66
star
16

MaxibonKataJava

Maxibon kata for Java Developers. The main goal is to practice property based testing.
Java
65
star
17

KataTODOApiClientKotlin

TODO API Client Kata for Kotlin Developers. The main goal is to practice integration testing using MockWebServer
Kotlin
60
star
18

KataContactsSwift

KataContacts written in Swift. The main goal is to practice Clean Architecture Development.
Swift
60
star
19

KataTODOApiClientJava

TODO API Client Kata for Java Developers. The main goal is to practice integration testing using MockWebServer.
Java
53
star
20

play-framework-kotlin

This repository is to show how to create an Play Framework project using Kotlin
Kotlin
48
star
21

KataContactsKotlin

KataContacts written in Kotlin. The main goal is to practice Clean Architecture Development
Kotlin
48
star
22

Hagu

Gradle plugin to enable Kotlin build configuration secrets for Kotlin, Kotlin-Native / Multiplatform.
Kotlin
47
star
23

KataSuperHeroesJetpack

SuperHeroes kata for Jetpack Developers in Kotlin
Kotlin
47
star
24

WeakDelegate

WeakReference property delegate proposal
Kotlin
47
star
25

KotlinMultiplatformApp

Application example using Kotlin multiplatform
Objective-C
43
star
26

MaxibonKataKotlin

Maxibon kata for Kotlin Developers. The main goal is to practice property based testing.
Kotlin
43
star
27

SuperHeroesKotlin

An example of architecture in kotlin
Kotlin
41
star
28

Reddo

Show messages in a 16x32 led matrix using a Raspberry Pi.
Java
39
star
29

SpringBootKotlin

Spring boot Kotlin example
Kotlin
38
star
30

BothamNetworking

Networking Framework written in Swift.
Swift
26
star
31

MaxibonKataIOS

Maxibon kata for iOS Developers. The main goal is to practice property based testing.
Swift
26
star
32

ControlFlowUI

A library that add control flow functionality to SwitUI, using the power of @functionBuilder and ViewBuilder.
Swift
25
star
33

AndroidAnimations

This is the project where we will analyze study and put into practice how to work with animations in Android
Kotlin
22
star
34

KataTODOApiClientIOS

TODO API Client Kata for iOS Developers. The main goal is to practice integration testing using Nocilla and Nimble.
Swift
21
star
35

FoursquareTop

Code for the app made as part of the NSSpain 2016 talk
Swift
21
star
36

KataSuperHeroesCompose

Super Heroes Kata implemented using Jetpack Compose and Screenshot Testing.
Kotlin
19
star
37

iOSBasicTraining

Code associated to the first level of our iOS Training.
Swift
17
star
38

KataCoroutines

Transform this game-of-life sequential implementation to a parallel version with Kotlin coroutines
Kotlin
16
star
39

ReactNativePlayground

Playground used to learn and experiment with React Native πŸš€
TypeScript
16
star
40

KataScreenshotIOS

Screenshot Kata for iOS Developers. The main goal is to practice UI Testing
Swift
16
star
41

KataLogInLogOutKotlin

Solution for the testing kata imparted during the mobile testing training written in Kotlin
Kotlin
15
star
42

MarvelApiClient

Marvel Api Client written in Swift.
Swift
14
star
43

ktlint-sbt

Ktlint Sbt Plugin
Scala
13
star
44

kodein-sample-testing

This repository aims to be a small example of how to use Kodein to provide different implementations for production code and testing code
Kotlin
11
star
45

KataSuperHeroesSpringBoot

This is a spring boot kata for the courses.
Kotlin
10
star
46

EndZone

Swift
10
star
47

hangout-slack-import

Script that help you import your google hangout chat history to Slack
Python
9
star
48

MagicCounterKataAndroid

Magic counter kata for Android developers. The main goal is to unit and integration testing.
Kotlin
9
star
49

KataSuperHeroesReactNative

Super Heroes Kata for React Native Developers in Typescript.
TypeScript
8
star
50

HotSwitchLocalizationTest

Android app implemented to show how to change the language and country used by our apps in runtime without restarting thea app. This only works for API >= 17. For API < 17 the localization change is not applied.
Kotlin
6
star
51

boilerplate-wars

Swift
6
star
52

TestingPlayFramework

Example repository used to show how to test a Play Framework application
Scala
4
star
53

KataContactsCSharp

C#
4
star
54

KataLogInLogOutSwift

Solution for the testing kata imparted during the mobile testing training written in Swift
Swift
4
star
55

LitElementPlayground

Playground used to learn and experiment with Lit Element and Web development
JavaScript
3
star
56

BasicTextFieldKeyboardBug

Repository used to show how to reproduce a bug we've found in BasicTextField component.
Kotlin
3
star
57

ExtensionProtocolforStruct

Swift
3
star
58

infrared-wifi-bridge-led

Open Hardware, Infrared Wifi bridge with an integrated LED Strip.
C
2
star
59

MaxibonKataCSharp

C#
2
star
60

SwiftMonad

Swift
2
star
61

KarumiJekyllTheme

Karumi Official Jekyll Template
CSS
2
star
62

KataSuperHeroesSwiftUI

Swift
2
star
63

MagicCounterKataIOS

Magic counter kata for iOS developers. The main goal is to unit and integration testing.
Swift
1
star