Tap Bar Menu

Related tags

Menu TapBarMenu
Overview

Android Arsenal Platform API

TapBar Menu

Simple library that helps creating a "Tap Bar" menu layout.

alt text alt text

Demo 1: https://youtu.be/DjY0cTWWtao

Demo 2: https://youtu.be/dWuPMN6WTOY

Install

Since version 1.0.6 this library is being distributed via JitPack

Step 1:
Add it in your root build.gradle at the end of repositories:

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

Step 2:
Add the dependency:

dependencies {
	implementation 'com.github.michaldrabik:TapBarMenu:1.0.6'
}

For versions 1.0.5 and older:

Add the dependency to your build.gradle:

dependencies {
    compile 'com.github.michaldrabik:tapbarmenu:1.0.5'
}

Use

Check sample project for a full example.

TapBarMenu is an extension of a LinearLayout so you can simply put it in your XML. For example:

<com.michaldrabik.tapbarmenulib.TapBarMenu
  android:id="@+id/tapBarMenu"
  android:layout_width="match_parent"
  android:layout_height="56dp"
  android:layout_gravity="bottom"
  android:layout_marginBottom="24dp"
  >
  
    <ImageView
      android:id="@+id/item1"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:paddingTop="10dp"
      android:paddingBottom="10dp"
      android:src="@drawable/ic_thumb_up"
      />
  
    <Space
      android:layout_width="56dp"
      android:layout_height="match_parent"
      />
  
    <ImageView
      android:id="@+id/item2"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:paddingTop="10dp"
      android:paddingBottom="10dp"
      android:src="@drawable/ic_thumb_down"
      />
   
</com.michaldrabik.tapbarmenulib.TapBarMenu>

This will create a menu with 2 icons in the bottom of the screen.

Then, in your code, call open(), close() or toggle() to open/close the menu:

tapBarMenu.setOnClickListener(new View.OnClickListener() {
  @Override public void onClick(View v) {
    tapBarMenu.toggle();
  }
});

Note: TapBarMenu will always expand to its parent width. You can choose between 2 anchors bottom or top - see attributes below.

Customize

All available XML parameters are listed below:

Attribute Format Description
app:tbm_showItems true, false Use this to show menu's items in a XML preview window.
Useful for designing your menu.
Default: false
app:tbm_backgroundColor color Menu color.
Default: red
app:tbm_buttonSize dimension Diameter of the menu button.
Default: 56dp
app:tbm_buttonPosition left, right, center Position of the menu button.
Default: center
app:tbm_buttonMarginRight dimension Button position right margin.
Default: 0
app:tbm_buttonMarginLeft dimension Button position left margin.
Default: 0
app:tbm_iconOpened drawable Custom icon for opened state. Must be an animated vector drawable.
Default: X icon
app:tbm_iconClosed drawable Custom icon for closed state. Must be an animated vector drawable.
Default: Menu icon
app:tbm_menuAnchor top, bottom Where menu should expand.
Default: bottom

Kudos

I've been inspired by Aaron Benjamin's great design.

Release Notes

1.0.6 - Update Android dependencies and migrate to JitPack
1.0.5 - Added Regular Drawable support
1.0.4 - Memory optimizations, onClick listener fixes
1.0.2 - You can now add custom icon via XML or code. See attributes.
1.0.1 - Pre 21 SDK bugfixes
1.0.0 - Initial release

License

Copyright (C) 2019 Michal Drabik

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.
Comments
  • A switch case implement issues

    A switch case implement issues

    Switch Case with onclick implement does not account for "X" (close)... so when I press it, it launches my first switch case statement instead of closing.

            mEmail = (ImageView) v.findViewById(R.id.menu_email);
            mShare = (ImageView) v.findViewById(R.id.menu_share);
            mEmail.setOnClickListener(onClickListener);
            mShare.setOnClickListener(onClickListener);
    
        private View.OnClickListener onClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int id = v.getId();
                switch(id){
                    case R.id.menu_email:
                        sendEmail();
                        Log.i("TAG", "Item email selected");
                        tapBarMenu.close();
                        break;
                    case R.id.menu_share:
                        shareButton();
                        Log.i("TAG", "Item share selected");
                        tapBarMenu.close();
                        break;
                }
    
            }
        };
    
    opened by axsddlr 9
  • Odd number of items breaks layout and function

    Odd number of items breaks layout and function

    only having 3 items included in the Tapmenu view breaks layout unless you add another space as a filler instead of readjusting layout to amount of populated items.

    and even so...toggle close is completely broken again

    Alt text

    opened by axsddlr 8
  • Animation delay

    Animation delay

    Just tried to modify a sample project, changing animationDuration resource field (res->values->ints.xml) to any other value - animation is always FAST, without any delay. Checked few times (500,5000,50000) - without any success. Finally, used some hardcoded value - instead of configuration - works fine only in GenyMotion emulator. Can't get a delay with animation on my phone... Any ideas, how to resolve it?

    opened by DerEisKoenig 6
  • Unable to compile in my project.

    Unable to compile in my project.

    Here's the error I am getting, it may be conflict with another plugin ill keep testing and let you know:

    /Users/cjones/Documents/Development/TheJonesTheory/app/build/intermediates/exploded-aar/com.wnafee/vector-compat/1.0.5/res/drawable/ic_play_vector.xml Error:Error: error in parsing "g/" :app:mergeDebugResources FAILED Error:Execution failed for task ':app:mergeDebugResources'.

    /Users/cjones/Documents/Development/TheJonesTheory/app/build/intermediates/exploded-aar/com.wnafee/vector-compat/1.0.5/res/drawable/ic_play_vector.xml: Error: error in parsing "g/"

    opened by ItsCalebJones 6
  • Can't add library 'Error:Error: error in parsing

    Can't add library 'Error:Error: error in parsing "g/"'

    I added the library to my gradle file and when attempting to sync I get this error.

    
    Error:Error: error in parsing "g/"
    Error:Execution failed for task ':app:mergeDebugResources'.
    >app/build/intermediates/exploded-aar/com.wnafee/vector-compat/1.0.5/res/drawable/ic_arrow_vector.xml: Error: error in parsing "g/"
    :app:mergeDebugResources FAILED
    
    opened by rosenpin 4
  • Some optimizations in memory usage

    Some optimizations in memory usage

    main changes:

    • animator are not reallocated each time the user press a button but reused
    • animation update is defines during the init
    • animator and button are now an array and not 5 variables. Probably will be soon a separate class.
    enhancement 
    opened by treere 3
  • Why can't the menu bar display completely

    Why can't the menu bar display completely

    I try it in the Android 4.4.4(API 19), and the menu bar can't display completely.Like this: the part of menu was gone. screenshot_2016-10-25-22-57-46-847_com example my_superindicator

    And i try it in the Android emulator (API 23)again and everything is all right. Why?

    one more thing, i found it have lag when you click the button to go to other Activity.(the same in API 23 and API 19)

    Another question, how could the TapBarMenu can applied to all Activity?(I'm newcomer) Thank you !

    opened by hwp88110 2
  • Issue when i change relative layout params

    Issue when i change relative layout params

    why it does not work correctly with Relative Layout Param, i tried to change her position after the click and make it in the button but it does not work my code :

         val  barMenu: RelativeLayout.LayoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT)
       barMenu.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
    

    then in the button click

    tapBarMenu.layoutParams = barMenu

    opened by Aniskonig 0
  • Crash in fragment use - open another fragment and coming back to original with TapBarMenu

    Crash in fragment use - open another fragment and coming back to original with TapBarMenu

    Can you please guide, I want to use in fragment (support.v4.app)

    Here is the full error Log-- E/AndroidRuntime: FATAL EXCEPTION: main Process: com.valueshipr.cargo.qa, PID: 32461 java.lang.NullPointerException: Attempt to read from null array at com.michaldrabik.tapbarmenulib.TapBarMenu.onDraw(TapBarMenu.java:349) at android.view.View.draw(View.java:17083) at android.view.View.updateDisplayListIfDirty(View.java:16065) at android.view.View.draw(View.java:16849) at android.view.ViewGroup.drawChild(ViewGroup.java:3768) at android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1230) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) at android.view.View.draw(View.java:17086) at android.view.View.updateDisplayListIfDirty(View.java:16065) at android.view.View.draw(View.java:16849) at android.view.ViewGroup.drawChild(ViewGroup.java:3768) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) at android.view.View.draw(View.java:17086) at android.view.View.updateDisplayListIfDirty(View.java:16065) at android.view.View.draw(View.java:16849) at android.view.ViewGroup.drawChild(ViewGroup.java:3768) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) at android.view.View.updateDisplayListIfDirty(View.java:16060) at android.view.View.draw(View.java:16849) at android.view.ViewGroup.drawChild(ViewGroup.java:3768) at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1379) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) at android.view.View.draw(View.java:17086) at android.view.View.updateDisplayListIfDirty(View.java:16065) at android.view.View.draw(View.java:16849) at android.view.ViewGroup.drawChild(ViewGroup.java:3768) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) at android.view.View.updateDisplayListIfDirty(View.java:16060) at android.view.View.draw(View.java:16849) at android.view.ViewGroup.drawChild(ViewGroup.java:3768) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) at android.view.View.updateDisplayListIfDirty(View.java:16060) at android.view.View.draw(View.java:16849) at android.view.ViewGroup.drawChild(ViewGroup.java:3768) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) at android.view.View.updateDisplayListIfDirty(View.java:16060) at android.view.View.draw(View.java:16849) at android.view.ViewGroup.drawChild(ViewGroup.java:3768) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) at android.view.View.updateDisplayListIfDirty(View.java:16060) at android.view.View.draw(View.java:16849) at android.view.ViewGroup.drawChild(ViewGroup.java:3768) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) at android.view.View.draw(View.java:17086) at com.android.internal.policy.DecorView.draw(DecorView.java:751) at android.view.View.updateDisplayListIfDirty(View.java:16065) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:657) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:663) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:771) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2808) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2616) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2223) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1258) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6348) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) at android.view.Choreographer.doCallbacks(Choreographer.java:683) at android.view.Choreographer.doFrame(Choreographer.java:619) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6123) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

    opened by naitiksoni92 1
Owner
Mike
Software Developer
Mike
🚀 A very customizable library that allows you to present menu items (from menu resource and/or other sources) to users as a bottom sheet.

SlidingUpMenu A library that allows you to present menu items (from menu resource and/or other sources) to users as a bottom sheet. Gradle Dependency

Rasheed Sulayman 26 Jul 17, 2022
Classic Power Menu is a Power Menu Replacement for Android 11+

Classic Power Menu is a Power Menu Replacement for Android 11+, with the main aim being restoring power menu options (Device Controls & Quick Access Wallet) on Android 12.

Kieron Quinn 385 Dec 31, 2022
an animated circular menu for Android

CircularFloatingActionMenu An animated, customizable circular floating menu for Android, inspired by Path app. Getting Started Requirements API >= 15

Oğuz Bilgener 2.7k Dec 24, 2022
Side menu with some categories to choose.

Side Menu Side menu with some categories to choose. Check this project on dribbble. Check this project on Behance. God bless Ukraine! Sample Sample &

Yalantis 5.2k Dec 23, 2022
You can easily add awesome animated context menu to your app.

ContextMenu You can easily add awesome animated context menu to your app. Check this project on dribbble Check this project on Behance Usage: For a wo

Yalantis 3.8k Dec 28, 2022
imitate Tumblr's menu, dragging animations look like a snake

android-snake-menu imitate Tumblr's menu, dragging animations look like a snake unexpected episode I found another repository some time ago which impl

stone 586 Nov 10, 2022
A menu which can ... BOOM! - Android

BoomMenu 2.0.0 Comes Finally Approximately 8 months ago, I got an inspiration to creating something that can boom and show menu, which I named it Boom

Nightonke 5.8k Dec 27, 2022
:fire: The powerful and easiest way to implement modern material popup menu.

PowerMenu ?? The powerful and easiest way to implement modern material popup menu. PowerMenu can be fully customized and used for popup dialogs. Downl

Jaewoong Eum 1k Dec 29, 2022
** A slide-out menu implementation, which allows users to navigate between views in your app.

MenuDrawer A slide-out menu implementation, which allows users to navigate between views in your app. Most commonly the menu is revealed by either dra

Simon Vig Therkildsen 2.6k Dec 8, 2022
Android Satellite Menu

#Satellite Menu 'Path' has a very attractive menu sitting on the left bottom corner of the screen. Satellite Menu is the open version of this menu. Fo

Siyamed SINIR 1.4k Nov 15, 2022
An android custom view which looks like the menu in Path 2.0 (for iOS).

ArcMenu & RayMenu ArcMenu An android custom view which looks like the menu in Path 2.0 (for iOS). RayMenu About The user experience in Path 2.0 (for i

daCapricorn 1.3k Nov 29, 2022
(UNMAINTAINED) An implemention of Filter Menu concept for android

FilterMenu This is a library project with a custom view that implements concept of Filter Menu(https://dribbble.com/shots/1956586-Filter-Menu) made by

Lin Zhang 824 Nov 28, 2022
Navigation menu for Android (based off Google+ app)

RibbonMenu Navigation menu for Android (based on Google+ app). Usage Menus are created in xml as normal, adding text and an icon. In the layout you wa

David Scott 487 Nov 24, 2022
Simple and easy to use circular menu widget for Android.

Deprecated This project is no longer maintained. No new issues or pull requests will be accepted. You can still use the source or fork the project to

Anup Cowkur 420 Nov 25, 2022
A multicard menu that can open and close with animation on android

MultiCardMenu A multicard menu that can open and close with animation on android,require API level >= 11 Demo ##Usage <net.wujingchao.android.view.

null 562 Nov 10, 2022
Implementation of "Side Navigation" or "Fly-in app menu" pattern for Android (based on Google+ app)

Android SideNavigation Library Implementation of "Side Navigation" or "Fly-in app menu" pattern for Android (based on Google+ app). Description The Go

Evgeny Shishkin 319 Nov 25, 2022
Menu with items on a rotating circle

Circle Menu This is a simple implementation of a circle menu for Android applications. Deprecated ConstraintLayout 1.1.0 is now supporting circular po

Csaba Szugyiczki 296 Nov 10, 2022
CustomMenu quickly realize about the menu

CustomMenu is a custom control that can help you quickly create Menu Features: Only the left menu Only the right menu Together with the right and left

ToviZhao 351 Nov 29, 2022