Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Material Chef Enhanced

Material Chef Enhanced

Apresentação sobre Material Design no DevFest São Paulo 2015.

Rafael Toledo

November 21, 2015
Tweet

More Decks by Rafael Toledo

Other Decks in Programming

Transcript

  1. O Cozinheiro Rafael Toledo Desenvolvedor Android Concrete Solutions Cozinheiro Profissional

    Minha Casa www.rafaeltoledo.net #MaterialChef @_rafaeltoledo
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. NavigationView - É a implementação refinada do já conhecido Navigation

    Drawer - Posiciona-se dentro de um DrawerLayout - efeito slide #MaterialChef @_rafaeltoledo
  11. NavigationView - Opções criadas a partir de um resource de

    menu - Pode receber uma view para ser utilizada de header #MaterialChef @_rafaeltoledo
  12. 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
  13. 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
  14. 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
  15. TabLayout <!-- Declaração --> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" /> // Código

    Java tabLayout.setupWithViewPager(viewPager); // ou tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.x)); #MaterialChef @_rafaeltoledo
  16. TabLayout public class Adapter extends PagerAdapter { ... @Override public

    CharSequence getPageTitle(int position) { switch (position) { case 0: return "Page 1"; ... } } } #MaterialChef @_rafaeltoledo
  17. 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
  18. 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
  19. Dialog - É só mudar o import! // Antes import

    android.app.AlertDialog; // Agora import android.support.v7.app.AlertDialog; #MaterialChef @_rafaeltoledo
  20. Tipografia - Sempre esteve aqui… desde a AppCompat 21 -

    Os estilos de texto possuem o prefixo TextAppearance.AppCompat #MaterialChef @_rafaeltoledo
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. Shared Element Transition Pair<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
  32. 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