Code Monkey home page Code Monkey logo

tapbarmenu's Introduction

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.

tapbarmenu's People

Contributors

max890 avatar michaldrabik avatar pavlospt avatar treere avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tapbarmenu's Issues

sdk15

i hope the lib will support sdk 15 / now min sdk is 16

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

Selected Item

How to make the selected item appears as selected

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 !

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)

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

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;
            }

        }
    };

Listeners

Hi!
Thanks for this cool menu!
It would be nice to have listeners for various events like onClose, onOpen.

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?

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

I tried to use 1.0.5 as well as 1.0.6, both are showing errors

I tried using the 1.0.5 version first. I added the dependency and the implementation in my build.gradle file as:

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

and

implementation 'com.github.michaldrabik:TapBarMenu:1.0.5'

The gradle sync and build happened smoothly, then when I tried to run my application, this is what showed up

Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':app:debugRuntimeClasspath'.

Then I tried using the 1.0.6 version, I updated my dependency as:

implementation 'com.github.michaldrabik:TapBarMenu:1.0.6'

The gradle sync happened smoothly and then after when I tried running the application, this came up

Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable

Please help me with this!!!

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/"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.