CV5 Material Design Material Design • Android 5.0 (API 21) • Unifikovaný design napříč platformami (mobil, web) • Flat design • Jednoduché ovládací a navigační prvky RecyclerView • chytré ListView • Adapter (stejný jako u ListView) • LayoutManager (jak se zobrazují data) • ViewHolder (reprezentace položky) • ItemDecoration, ItemAnimator RecyclerView recycler = (RecyclerView) findViewById(R.id.my_recycler_view); layoutManager = new LinearLayoutManager(this); recycler.setLayoutManager(layoutManager); adapter = new MyAdapter(data); recycler.setAdapter(adapter); public class MyAdapter extends RecyclerView.Adapter { CoordinatorLayout • super-powered layout • fancy animace • interakce • AppBarLayout, CollapsingToolbarLayout • Behaviors SnackBar • Lepší Toast • Snackbar.make(view, “Hello”, Snackbar.LENGTH_SHORT).show(); https://developer.android.com/reference/android/support/design/widget/Snackbar.html 6+ věcí o kterých by měl dobrý Android vývojář vědět adb • Android Debug Bridge • adb devices • adb logcat • adb pull / push • adb shell Log.x • Logování do Android Console • Log.d(String, String); • Log.d, Log.wtf, Log.e, Log.w, … Fragmenty • Když aktivita je málo • Má šílený lifecycle • Mohou být vnořené Plurals %d auto %d auta %d aut getResources().getQuantityString(R.plurals.cars, 2, 2); Dialogy https://github.com/afollestad/material-dialogs new MaterialDialog.Builder(this) .title(R.string.title) .content(R.string.content) .positiveText(R.string.agree) .negativeText(R.string.disagree) .show(); Options menu @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.game_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case R.id.new_game: newGame(); return true; default: return super.onOptionsItemSelected(item); } } ButterKnife • View injection • už nikdy přetypování a findViewById class ExampleActivity extends Activity { @Nullable @Bind(R.id.title) TextView title; @Bind(R.id.subtitle) TextView subtitle; @Bind(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.bind(this); // TODO Use fields... } } http://jakewharton.github.io/butterknife/ Android Asset Studio https://romannurik.github.io/AndroidAssetStudio/ Google Play Services https://developers.google.com/android/guides/overview • Stahuje se stejně jako každá jiná aplikace • Služby jako jsou Maps, Wallet, G+, Location, Wear,… RxJava • Stream • Observable, Subscriber • http://rxmarbles.com/ http://reactivex.io/ • Crash/report analytics • User analytics • KPI • Adopce nové verze • Moc moc moc moc dat a čísel Fabric https://fabric.io Architektura • VM • View - Model • MVP • Model - View - Presenter • MVVM • Model - View - ViewModel • MVC • Model - View - Controller Kam dál? • https://developer.android.com • https://android-arsenal.com/ • Twitter - @JakeWharton, @AndroidDev, @androidstudio, @crafty, @chrisbanes, @cyrilmottier, @romannurik