Material Chef - DevFest SP 2015

78
Material

Transcript of Material Chef - DevFest SP 2015

Page 1: Material Chef - DevFest SP 2015

Material

Page 2: Material Chef - DevFest SP 2015
Page 3: Material Chef - DevFest SP 2015

Material

Page 4: Material Chef - DevFest SP 2015

Material

Page 5: Material Chef - DevFest SP 2015

Cadê o Material Design??

Page 6: Material Chef - DevFest SP 2015

Material ChefEnhanced

#MaterialChef@_rafaeltoledo

Page 7: Material Chef - DevFest SP 2015

O Cozinheiro

Rafael Toledo

Desenvolvedor AndroidConcrete Solutions

Cozinheiro ProfissionalMinha Casa

www.rafaeltoledo.net

#MaterialChef@_rafaeltoledo

Page 8: Material Chef - DevFest SP 2015

Ingredientescompile 'com.android.support:appcompat-v7:23.1.1'

compile 'com.android.support:design:23.1.1'

compile 'com.android.support:cardview-v7:23.1.1'

compile 'com.android.support:recyclerview-v7:23.1.1'

#MaterialChef@_rafaeltoledo

Page 9: Material Chef - DevFest SP 2015

Toolbar

#MaterialChef@_rafaeltoledo

Page 10: Material Chef - DevFest SP 2015

Toolbar<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:theme="@style/MaterialChef.AppBarOverlay" app:popupTheme="@style/MaterialChef.PopupOverlay" />

#MaterialChef@_rafaeltoledo

Page 11: Material Chef - DevFest SP 2015

Toolbar - Primary Color#MaterialChef@_rafaeltoledo

Page 12: Material Chef - DevFest SP 2015

Toolbar - Colors<color name="colorPrimary">#ffc107</color><color name="colorPrimaryDark">#c99700</color><color name="colorAccent">#607d8b</color>

<style name="MaterialChef.Theme" parent="Theme.AppCompat.Light.DarkActionBar">

<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item></style>

#MaterialChef@_rafaeltoledo

Page 13: Material Chef - DevFest SP 2015

Toolbar - Toques do Chef

- Primay Color: 500- Primary Color Dark: 700

- setSupportActionBar(toolbar)

- Paletas de exemplo:http://vai.la/ixCZ

- Gerador de paleta: http://vai.la/ixD4

#MaterialChef@_rafaeltoledo

Page 14: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

TOOLBARcom muito estilo e visual consistente

Page 15: Material Chef - DevFest SP 2015

CardView

#MaterialChef@_rafaeltoledo

Page 16: Material Chef - DevFest SP 2015

CardView (Receita Simples)

- FrameLayout gourmet- Basta colocar seu conteúdo dentro dele

<android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" app:cardUseCompatPadding="true">

<include layout="@layout/seu_layout" />

</android.support.v7.widget.CardView>

#MaterialChef@_rafaeltoledo

Page 17: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

CARDVIEWtoque de Material ao nosso design

Page 18: Material Chef - DevFest SP 2015

CoordinatorLayout

#MaterialChef@_rafaeltoledo

Page 19: Material Chef - DevFest SP 2015

CoordinatorLayout- É ele quem faz a mágica acontecer

- Garante que um componente responda ao comportamento de outro

- Receitas comuns: Toolbar ocultável, Floating Action Button respondendo ao SnackBar, etc.

#MaterialChef@_rafaeltoledo

Page 20: Material Chef - DevFest SP 2015

CoordinatorLayout<!-- Circule o seu Layout --><android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent">

...

</android.support.design.widget.CoordinatorLayout>

#MaterialChef@_rafaeltoledo

Page 21: Material Chef - DevFest SP 2015

CoordinatorLayout<!-- Coloque a Toolbar dentro de um AppBarLayout --><android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content">

<android.support.v7.widget.Toolbar ... app:layout_scrollFlags="scroll|enterAlways|snap"/> </android.support.design.widget.AppBarLayout></android.support.design.widget.CoordinatorLayout>

#MaterialChef@_rafaeltoledo

Page 22: Material Chef - DevFest SP 2015

CoordinatorLayout<!-- Configure o emissor de eventos --><android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.AppBarLayout> <android.support.v7.widget.Toolbar /> </android.support.design.widget.AppBarLayout>

<android.support.v7.widget.RecyclerView ... app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>

#MaterialChef@_rafaeltoledo

Page 23: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

COORDINATOR LAYOUTcom movimento e refinamento

Page 24: Material Chef - DevFest SP 2015

FloatingActionButton

#MaterialChef@_rafaeltoledo

Page 25: Material Chef - DevFest SP 2015

FloatingActionButton- Representa a ação principal a ser realizada em

uma tela

- Possui um ícone e pode possuir sub-opções (ex.: Inbox)

- Alternativa ao widget da Design Library: http://vai.la/ixXs

#MaterialChef@_rafaeltoledo

Page 26: Material Chef - DevFest SP 2015

FAB<android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="@dimen/fab_margin" android:src="@drawable/ic_done_white_24dp" />

#MaterialChef@_rafaeltoledo

Page 27: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

FLOATING ACTION BUTTONcarinhosamente conhecido como FAB

Page 28: Material Chef - DevFest SP 2015

SnackBar

#MaterialChef@_rafaeltoledo

Page 29: Material Chef - DevFest SP 2015

SnackBar- É um Material Toast. Pode conter uma ação.

Snackbar.make(view, R.string.hello_world, Snackbar.LENGTH_LONG) .setAction(R.string.action, null)

.show();

- Passando o FAB como parâmetro, estando dentro de um CoordinatorLayout, a animação ocorre de forma mágica*

#MaterialChef@_rafaeltoledo

Page 30: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

SNACKBARnotificação com uma pitada de classe

Page 31: Material Chef - DevFest SP 2015

NavigationView

#MaterialChef@_rafaeltoledo

Page 32: Material Chef - DevFest SP 2015

NavigationView- É a implementação refinada do já conhecido

Navigation Drawer

- Posiciona-se dentro de um DrawerLayout - efeito slide

#MaterialChef@_rafaeltoledo

Page 33: Material Chef - DevFest SP 2015

NavigationView- Opções criadas a partir de um resource de menu

- Pode receber uma view para ser utilizada de header

#MaterialChef@_rafaeltoledo

Page 34: Material Chef - DevFest SP 2015

NavigationView<android.support.v4.widget.DrawerLayout android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> ... <android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/header_nav" app:menu="@menu/nav_content" /></android.support.v4.widget.DrawerLayout>

#MaterialChef@_rafaeltoledo

Page 35: Material Chef - DevFest SP 2015

NavigationView (menu)

<menu> <group android:checkableBehavior="single"> <item android:id="@+id/nav_home" android:icon="@drawable/ic_dashboard" android:title="Home" /> ... </group> <item android:title="Sub items"> <menu> <item android:icon="@drawable/ic_dashboard" android:title="Sub item 1" /> </menu> </item></menu>

#MaterialChef@_rafaeltoledo

Page 36: Material Chef - DevFest SP 2015

NavigationView (dica)

- De acordo com as guidelines, a partir da API 21+, o NavigationView deve passar por trás da status bar

<!-- values-v21/styles.xml --><style name="MaterialChef.Theme" parent="Base.Theme"> <item name="android:windowDrawsSystemBarBackgrounds"> true </item> <item name="android:statusBarColor"> @android:color/transparent </item></style>

#MaterialChef@_rafaeltoledo

Page 37: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

NAVIGATION VIEWconsistente, a navegação central do seu app

Page 38: Material Chef - DevFest SP 2015

TabLayout

#MaterialChef@_rafaeltoledo

Page 39: Material Chef - DevFest SP 2015

TabLayout- Utilizada para separar conteúdos em abas

- As abas podem ser adicionadas dinamicamente ou em conjunto com um ViewPager

- Abas fixas ou roláveis

#MaterialChef@_rafaeltoledo

Page 40: Material Chef - DevFest SP 2015

TabLayout<!-- Declaração --><android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" />

// Código JavatabLayout.setupWithViewPager(viewPager);// outabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.x));

#MaterialChef@_rafaeltoledo

Page 41: Material Chef - DevFest SP 2015

TabLayoutpublic class Adapter extends PagerAdapter {

... @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return "Page 1"; ... } }}

#MaterialChef@_rafaeltoledo

Page 42: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

TAB LAYOUTnavegação secundária simples e objetiva

Page 43: Material Chef - DevFest SP 2015

TextInputLayout

#MaterialChef@_rafaeltoledo

Page 44: Material Chef - DevFest SP 2015

TextInputLayout- Habilita a animação do hint de um EditText

- Pode ser utilizado para exibir erros de validação

- A partir da versão 23.1 da Design Library, pode também exibir contador de caracteres

#MaterialChef@_rafaeltoledo

Page 45: Material Chef - DevFest SP 2015

TextInputLayout<android.support.design.widget.TextInputLayout android:id="@+id/message_wrapper" android:layout_width="match_parent" android:layout_height="wrap_content">

<EditText android:id="@+id/message" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hello_world" />

</android.support.design.widget.TextInputLayout>

#MaterialChef@_rafaeltoledo

Page 46: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

TEXT INPUT LAYOUTentrada de texto com estilo

Page 47: Material Chef - DevFest SP 2015

Raised Button

#MaterialChef@_rafaeltoledo

Page 48: Material Chef - DevFest SP 2015

Raised Button- É o mesmo componente que já utilizamos

(Button), com um estilo da AppCompat

- Automaticamente adiciona o Ripple Effect para versões 21+

#MaterialChef@_rafaeltoledo

Page 49: Material Chef - DevFest SP 2015

Raised Button<style name="AppTheme.Button.Primary" parent="Base.Widget.AppCompat.Button">

<item name="colorButtonNormal">@color/colorPrimary</item> <item name="android:textColor">@android:color/white</item></style>

#MaterialChef@_rafaeltoledo

Page 50: Material Chef - DevFest SP 2015

Raised Button<Button android:id="@+id/show_message" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/hello_world" android:theme="@style/AppTheme.Button.Primary" />

#MaterialChef@_rafaeltoledo

Page 51: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

RAISED BUTTONsem complexidade, estiloso!

Page 52: Material Chef - DevFest SP 2015

Dialog

#MaterialChef@_rafaeltoledo

Page 53: Material Chef - DevFest SP 2015

Dialog- É só mudar o import!

// Antesimport android.app.AlertDialog;

// Agoraimport android.support.v7.app.AlertDialog;

#MaterialChef@_rafaeltoledo

Page 54: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

MATERIAL DIALOGalertas sem sustos, sem inconsistências

Page 55: Material Chef - DevFest SP 2015

Tipografia

#MaterialChef@_rafaeltoledo

Page 56: Material Chef - DevFest SP 2015

Tipografia- Sempre esteve aqui… desde a AppCompat 21

- Os estilos de texto possuem o prefixo TextAppearance.AppCompat

#MaterialChef@_rafaeltoledo

Page 57: Material Chef - DevFest SP 2015

Tipografia<TextView style="@style/TextAppearance.AppCompat.Display1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name" />

#MaterialChef@_rafaeltoledo

Page 58: Material Chef - DevFest SP 2015

Tipografia (dica)

- Consistência de fontes entre as plataformas - Calligraphy: http://vai.la/iy2D

- ...2.3: DroidSans- 3.0...4.4: Roboto- 5.0…: Roboto 1.2

#MaterialChef@_rafaeltoledo

Page 59: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

TIPOGRAFIAporque uma aparência agradável faz a diferença

Page 60: Material Chef - DevFest SP 2015

Collapsing Toolbar

#MaterialChef@_rafaeltoledo

Page 61: Material Chef - DevFest SP 2015

Collapsing Toolbar- Excelente para uso em telas onde há um

elemento gráfico em evidência

- Transição da Toolbar de transparente para sólida, redimensionando o texto também

- O único cuidado é quando as imagens podem fazer o texto e a navegação ilegíveis

#MaterialChef@_rafaeltoledo

Page 62: Material Chef - DevFest SP 2015

Collapsing Toolbar<!-- Circule o seu Layout --><android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent">

...

</android.support.design.widget.CoordinatorLayout>

#MaterialChef@_rafaeltoledo

Page 63: Material Chef - DevFest SP 2015

Collapsing Toolbar<!-- Circule o seu Layout --><android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent">

...

</android.support.design.widget.CoordinatorLayout>

#MaterialChef@_rafaeltoledo

Page 64: Material Chef - DevFest SP 2015

Collapsing Toolbar<!-- Coloque um AppBarLayout --><android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content">

... </android.support.design.widget.AppBarLayout></android.support.design.widget.CoordinatorLayout>

#MaterialChef@_rafaeltoledo

Page 65: Material Chef - DevFest SP 2015

Collapsing Toolbar <!-- Coloque um CollapsingToolbarLayout --> <android.support.design.widget.AppBarLayout>

<android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> ... </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout>

#MaterialChef@_rafaeltoledo

Page 66: Material Chef - DevFest SP 2015

Collapsing Toolbar <!-- Toolbar + ImageView --> <android.support.design.widget.AppBarLayout>

<android.support.design.widget.CollapsingToolbarLayout> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" app:layout_collapseMode="parallax" />

<android.support.v7.widget.Toolbar app:layout_collapseMode="pin" ... /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout>

#MaterialChef@_rafaeltoledo

Page 67: Material Chef - DevFest SP 2015

Collapsing Toolbar<!-- Coloque um AppBarLayout --><android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.AppBarLayout />

<android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior"> <!-- Seu conteúdo aqui -->

</android.support.v4.widget.NestedScrollView></android.support.design.widget.CoordinatorLayout>

#MaterialChef@_rafaeltoledo

Page 68: Material Chef - DevFest SP 2015

Collapsing Toolbar<!-- Coloque um AppBarLayout --><android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.AppBarLayout android:id="@+id/appbar" />

<android.support.v4.widget.NestedScrollView />

<android.support.design.widget.FloatingActionButton ... app:layout_anchor="@id/appbar" app:layout_anchorGravity="bottom|right|end" /></android.support.design.widget.CoordinatorLayout>

#MaterialChef@_rafaeltoledo

Page 69: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

COLLAPSING TOOLBARagora o negócio ficou sério!

Page 70: Material Chef - DevFest SP 2015

Shared Element Transition

#MaterialChef@_rafaeltoledo

Page 71: Material Chef - DevFest SP 2015

Shared Element Transition

- Material Design não é somente Cards e FABs… é MOVIMENTO!

- Infelizmente, esse recurso só funciona no Android 5.0+

- Support Library nos ajuda a não ter que ficar escrevendo código feio!

if (Build.VERSION.SDK_INT == ...NÃO!

#MaterialChef@_rafaeltoledo

Page 72: Material Chef - DevFest SP 2015

Shared Element TransitionPair<View, String> p1 = new Pair<>(v.findViewById(R.id.image), DetailActivity.EXTRA_IMAGE);

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, p1);

Intent intent = new Intent(this, DetailActivity.class);...

ActivityCompat.startActivity(this, intent, options.toBundle());

#MaterialChef@_rafaeltoledo

Page 73: Material Chef - DevFest SP 2015

Shared Element TransitionImageView imageView = (ImageView) findViewById(R.id.backdrop);imageView.setImageResource(image);ViewCompat.setTransitionName(imageView, EXTRA_IMAGE);

#MaterialChef@_rafaeltoledo

Page 74: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

SHARED ELEMENT TRANSITIONporque no mundo real as coisas se movimentam

Page 75: Material Chef - DevFest SP 2015

Material ChefConcluído!

#MaterialChef@_rafaeltoledo

Page 76: Material Chef - DevFest SP 2015

Material ChefVamos experimentar?

#MaterialChef@_rafaeltoledo

Page 77: Material Chef - DevFest SP 2015

Links- Cheesesquare: http://vai.la/iy6n

- MaterializeYourApp: http://vai.la/iy6r

- Plaid: http://vai.la/iy6z

- Material Design Icons: http://vai.la/iy6v

#MaterialChef@_rafaeltoledo

Page 78: Material Chef - DevFest SP 2015

#MaterialChef@_rafaeltoledo

Material Chefgithub.com/rafaeltoledo/material-chef