Playing with Material Design, Toolbar and Palette
Since Android L(ollipop) was presented in June at Google I/O, only two devices on market can run it officially. Nexus 6 and Nexus 9 were released a week ago, and these two guys are ready to go with most recent system from Google, but what about other devices? My Nexus 5 is trying to update everyday, but still no effects :) Hopefully, we can use some part of Material Design with devices running Android 2.1 and higher, because most of implementation was placed in android-support-v7.
I wrote simple app which displays images in grid with possibility to pick them to see them in full size with ActionBar colors based on picked image. App uses new classes: Palette and Toolbar.
It looks like this:
Let’s code.
All dependencies we need:
as you can see Google split android.support and put Palette as separate lib (similar to RecyclerView and CardView). I used Picasso to simple load images from web.
Next, define AppTheme with parent as Theme.AppCombat
. You can also specify colorPrimary
and accentColor
which are used by framework to color surface background of widgets such as text fields, checkboxes etc.
Apply style to application:
App has two activities. First MainActvity
extends ActionBarActivity
so framework will show window with ActionBar
(see first screenshot with GridView). ImageActivity
is just Activity
, so by default window will be rendered without ActionBar
. But look at other screenshots, they have an ActionBar
, but wait… actually it’s Toolbar
!
Toolbar
is more flexible (easier to customize) standard View
, so you can put it everywhere in layout, multiple times… and it still can act as ActionBar
(see setActionBar)
Let’s look at the layout file:
It’s simple. Nothing special here, except using of Toolbar
.
Finally we can use Pallete
to extract prominent colors from image and change style of Toolbar
at runtime.
Look at the screenshots, I think they look pretty well and we didn’t need a graphic designer to choose correct colors ;)
See full source code at github.
See Creating Apps with Material Design.
See Material Design specification.