Like many things material design Google introduced Bottom navigation bars on Android via the design library but failed to provide one key component — a scroll behavior for them. This is frustrating because the official material design specs specify that the bottom bar can hide on scroll. For my app, Curated I needed this behavior.

Image for post
Image for post
Google+ app bottom scroll bar hiding

While there are good third party libraries which will provide a custom Bottom bar for you that does this, I decided to find a way to add this (seemingly simple) requirement to the normal BottomNavigationView. I was inspired by the implementation of the Google+ app…

In my team we’ve started using TravisCI for our projects — namely, for automatically building our app, Curated. We’re happy with the way it integrates with our Github repositories and its easy configurability. It’s also free to use for open source projects — a great quality for any tool.

Doing the initial setup — building the app by pulling the correct tools and then running unit tests when a PR is opened — was easy enough. Our next big hurdle was how to have Travis build a signed, release version of our APK? We wanted to be able to do…

In almost all RxJava example code and tutorials there is one class that reigns supreme — the Observable. It is the object which makes the whole magic of reactive programming possible. It’s simple — you only have to track 3 events — onNext, onError, and onCompleted and you can apply all of the hundreds of possible operators to make it do your bidding. Why would you need anything else, right?

Have you considered whether you actually need to know about those 3 events every time? Hint — in most cases, you don’t. The documentation over at ReactiveX goes on about…

I’m a big RxJava enthusiast. As an Android developer, I use it because it helps streamline my development by cutting down on a lot of the boilerplate that’s generally associated with asynchronous tasks.

As I got more comfortable with Rx, though, I noticed that a lot of my use cases for RxJava follow the same pattern in their setup and finish logic. A common example — loading data for a screen in an app. The code in almost all cases goes like this:

  1. Show loading state
  2. Load data
  3. When data has loaded hide loading state and update UI.
  4. Or if…

Valentin Hinov

I'm passionate about building applications which are both well designed and intelligently architected. Find me at

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store