25
Udacity Advanced Android Course Material Design Ken Yee [email protected]

Android Material Design APIs/Tips

  • Upload
    ken-yee

  • View
    346

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Android Material Design APIs/Tips

Udacity Advanced Android CourseMaterial Design

Ken Yee [email protected]

Page 2: Android Material Design APIs/Tips

Changes to Sunshine App• Color Theme

• Toolbar

• Material Design Spacing (16dp vertical, 32p horizontal) and Elevation

• CardView (elevations), Recyclerview

• CoordinatorLayout

• Transition Animations

Page 3: Android Material Design APIs/Tips

Web UI History

Page 4: Android Material Design APIs/Tips

Android UI History

Page 5: Android Material Design APIs/Tips

<resources> <!-- inherit from the material theme --> <style name="AppTheme" parent="Theme.AppCompat"> <!-- your app branding color for the app bar --> <item name="android:colorPrimary">@color/primary</item> <!-- darker variant for the status bar and contextual app bars --> <item name="android:colorPrimaryDark">@color/primary_dark</item> <!-- theme UI controls like checkboxes and text fields --> <item name=“android:colorAccent">@color/accent</item> <!-- text color for toolbar titles --> <item name="android:textColorPrimary">@color/text_primary</item> <!-- text color for subtitles in lists --> <item name="android:textColor">@color/text_secondary</item> <!-- capacitive button toolbar color --> <item name="android:navigationBarColor">@color/primary_dark</item> </style> </resources>

Material Color Theming

Page 6: Android Material Design APIs/Tips

Choosing Colors

500 = Base/Primary700/800=Dark A = Accent 100 = Light

Page 7: Android Material Design APIs/Tips

Color Wheel for Accents

Page 8: Android Material Design APIs/Tips

Material Palette

Page 9: Android Material Design APIs/Tips

Other Material Design Aspects• Animation

• Elevation

• Spacing (Margins/Keylines)

Page 10: Android Material Design APIs/Tips

Support Library *Compat• Versions back to Gingerbread but especially 4.x

• Theme.AppCompat

• extend ActionBarActivity if not using v7,Toolbar

• DrawableCompat for tinting

• MenuItemCompat for updating menus

• android.support.v7.widget.Toolbar w/ Theme.AppCompat.NoActionBar

Page 11: Android Material Design APIs/Tips

Toolbar• android.support.v7.widget.Toolbar & Theme.AppCompat.NoActionBar

• get/setSupportActionToolbar

• add logo to the <android.support.v7.widget.Toolbar> view group

Page 12: Android Material Design APIs/Tips

Dimension Attributes• @dimen/abc_action_bar_content_inset_material

• @dimen/abc_list_item_padding_horizontal_material

• @dimen/appbar_elevation

• ?attr/actionBarSize

• ?attr/listPreferredItemHeight

Page 13: Android Material Design APIs/Tips

Elevation• android:elevation attribute

• Stacking

• Movement

Page 14: Android Material Design APIs/Tips

CardViewRounded corners/padding don’t work well before Lollipop

Page 15: Android Material Design APIs/Tips

RecyclerView• Total rethink of Listview/Gridview w/ Animations

• Headers (Decorators) and Empty Views

• LayoutManager w/ Horizontal Listview, Staggered Grid

• Official ViewHolder support

• Lots of new APIs…just use RZ’s UniversalAdapter

• Compatibility w/ CoordinatorLayout

Page 16: Android Material Design APIs/Tips

CoordinatorLayout• Parallax

• Collapsing

• Element Movement

Page 17: Android Material Design APIs/Tips

CoordinatorLayout<CoordinatorLayout>

<AppBarLayout android:id=“@+id/appbar”><CollapsingToolbarLayout app:layout_scrollFlags=“scroll|exitUntilCollapsed”>

<ImageViewapp:layout_collapseParallaxMultiplier="0.7" app:layout_collapseMode=“parallax”><android.support.v7.widget.Toolbar app:layout_collapseMode=“pin”>

</AppBarLayout><NestedScrollView android:layout_behavior=“@string/appbar_scrolling_view_behavior”>

<FloatingActionButton app:layout_anchor=“@id/appbar” app:layout_anchorGravity=“bottom|right|end”>

Page 18: Android Material Design APIs/Tips

AppbarLayout’s layout_scrollFlags• enterAlways - scroll on any downwards scroll event even if

scrolling view is not scrolling

• enterAlwaysCollapsed - initially scroll returning view into collapsed state

• exitUntilCollapsed - scroll until collapsed when going offscreen

• scroll - scroll w/ scroll events

• snap - snap to closest edge when partially visible

Page 19: Android Material Design APIs/Tips

Activity Transitions

Page 20: Android Material Design APIs/Tips

Changes for Activity Transitions• v4.app.FragmentActivity or v7.app.AppCompatActivity

• tag shared elements in both layouts with android:transition_name attribute w/ a strings.xml reference w/ translatable=“false”

• ActivityCompat and ActivityOptionsCompat

• for Lollipop+, use activity themes

• activity.supportPostponeEnterTransition and activity.supportStartPostponedEnterTransition when containers and images set up

Page 21: Android Material Design APIs/Tips

Transitions in Activity’s Theme

<style name="BaseAppTheme" parent="android:Theme.Material"> <!-- enable window content transitions --> <item name="android:android:windowActivityTransitions">true</item>

<!-- specify enter and exit transitions --> <item name="android:windowEnterTransition">@transition/explode</item> <item name="android:windowExitTransition">@transition/explode</item>

<!-- specify shared element transitions --> <item name="android:windowSharedElementEnterTransition"> @transition/change_image_transform</item> <item name="android:windowSharedElementExitTransition"> @transition/change_image_transform</item> </style>

Page 22: Android Material Design APIs/Tips

Starting Activity w/ Transitions

import android.support.v4.util.Pair;

Intent intent = new Intent(this, Activity2.class); Pair[] transitionViews = new Pair[] { new Pair(viewHolder.BackgroundImage, getString(R.string.transition_name_image)), new Pair(viewHolder.Title, getString(R.string.transition_name_title)) };

ActivityOptionsCompat options = ActivityOptionsCompat .makeSceneTransitionAnimation(this, transitionViews); // start the new activity ActivityCompat.startActivity(intent, options.toBundle());

Page 23: Android Material Design APIs/Tips

Waiting for RecyclerView

public void onActivityCreated(Bundle savedInstanceState) { getActivity().supportPostponeEnterTransition(); }

public void onInflate() - inflate views mRecyclerView.getViewTreeObserver().addOnPreDrawListener() -> { if (mRecyclerView.getChildCount() > 0) { mRecyclerView.getViewTreeObserver().removeOnPreDrawerListener(this); - set selected item in recycler view getActivity().supportStartPostponsedEnterTransition();

public void onLoadFinished() { if (noData) { getActivity().supportStartPostponsedEnterTransition();

Page 24: Android Material Design APIs/Tips

What’s New• Split Screens

• Bottom Nav Bars

Page 25: Android Material Design APIs/Tips

Resources• http://www.hongkiat.com/blog/material-design-resources/

• http://www.materialpalette.com/

• http://www.materialup.com/

• https://github.com/Raizlabs/UniversalAdapter

• http://saulmm.github.io/mastering-coordinator

• https://medium.com/@bherbst/fragment-transitions-with-shared-elements-7c7d71d31cbb#.f9bztfdsg