Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CodeMobile 2018 - Implementing a design languag...
Search
Carrie Hall
April 04, 2018
Programming
1
150
CodeMobile 2018 - Implementing a design language in Android
Carrie Hall
April 04, 2018
Tweet
Share
Other Decks in Programming
See All in Programming
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
220
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
650
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
CSC307 Lecture 09
javiergs
PRO
1
840
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
370
ぼくの開発環境2026
yuzneri
0
240
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
Grafana:建立系統全知視角的捷徑
blueswen
0
330
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
470
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Code Review Best Practice
trishagee
74
20k
Visualization
eitanlees
150
17k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
160
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
57
50k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.7k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
83
Transcript
None
Carrie Hall IMPLEMENTING A DESIGN LANGUAGE IN ANDROID
carrie_l_hall This is me! Carrie Hall @carrie_l_hall carriehall
carrie_l_hall the world’s largest music and audio platform
carrie_l_hall 90% mobile
carrie_l_hall 2010
carrie_l_hall 2010
carrie_l_hall 2011 2010
carrie_l_hall 2010 2014 2011 The interface is the brand
carrie_l_hall 2010 2011 2015 2014
carrie_l_hall 2010 2011 2014 2016 2015 material.io
carrie_l_hall DESIGN LANGUAGE
carrie_l_hall Centralised set of principles and reusable components using a
shared language
carrie_l_hall Centralised set of principles and reusable components using a
shared language
carrie_l_hall Centralised set of principles and reusable components using a
shared language
carrie_l_hall Centralised set of principles and reusable components using a
shared language
carrie_l_hall Centralised set of principles and reusable components using a
shared language
carrie_l_hall
carrie_l_hall
carrie_l_hall SOUL SoundCloud User Experience Language
carrie_l_hall Foundation Atoms Components Component library Principles Style Guide
carrie_l_hall Foundation Atoms Components Principles Style Guide Component library
carrie_l_hall
carrie_l_hall
carrie_l_hall Foundation Atoms Components Principles Style Guide Component library
carrie_l_hall
carrie_l_hall Foundation Atoms Components Principles Style Guide Component library
carrie_l_hall
carrie_l_hall
carrie_l_hall
carrie_l_hall Foundation Atoms Components Component library Principles Style Guide
carrie_l_hall SKETCH
carrie_l_hall
carrie_l_hall ZEPLIN SKETCH
carrie_l_hall 216dp
carrie_l_hall 72dp
carrie_l_hall
carrie_l_hall Foundation Atoms Components Component library Principles Style Guide
carrie_l_hall
carrie_l_hall Consistent designs Faster iterations
carrie_l_hall
carrie_l_hall Clean code
carrie_l_hall Meaningful names
carrie_l_hall Decoupled
carrie_l_hall data
carrie_l_hall data
carrie_l_hall style data
carrie_l_hall style animations data
carrie_l_hall style accessibility animations data
carrie_l_hall limits style accessibility animations data
carrie_l_hall formatting data style accessibility animations limits
carrie_l_hall
carrie_l_hall Component library App Components Atoms Foundation
carrie_l_hall File > New > New module
carrie_l_hall Android Library
carrie_l_hall components manifests java res
carrie_l_hall components atoms
carrie_l_hall components atoms foundation
carrie_l_hall
carrie_l_hall compile project(":foundation") Components Atoms Foundation
carrie_l_hall compile project(":atoms") Components Atoms Foundation
carrie_l_hall Components Atoms Foundation App compile project(":components")
carrie_l_hall <public />
carrie_l_hall Library vs Module
carrie_l_hall Components Atoms Foundation App
carrie_l_hall <color name="soundcloudOrange">#ff5500</color> <color name="raven">#333333</color> <color name="platinum">#cccccc</color> <color name="cornflower">#3388dd</color> <color
name="mint">#e5f3f3</color> colors.xml foundation
carrie_l_hall <color name="soundcloudOrange">#ff5500</color> <color name="raven">#333333</color> <color name="platinum">#cccccc</color> <color name="cornflower">#3388dd</color> <color
name="mint">#e5f3f3</color> colors.xml foundation
carrie_l_hall <color name="soundcloudOrange">#ff5500</color> <color name="raven">#333333</color> <color name="platinum">#cccccc</color> <color name="cornflower">#3388dd</color> <color
name="mint">#e5f3f3</color> colors.xml foundation
carrie_l_hall <color name="button_bg">@color/cornflower</color> colors.xml app
carrie_l_hall private fun Int.format(): String { return NumberFormat .getInstance(Locale.getDefault()) .format(this)
} foundation
carrie_l_hall Components Atoms Foundation App
carrie_l_hall atoms
carrie_l_hall atoms 36dp 100dp
carrie_l_hall atoms 16dp 12dp
carrie_l_hall atoms 20dp 10dp 16dp
carrie_l_hall atoms Radius 4dp
carrie_l_hall atoms silver charcoal
carrie_l_hall <ConstraintLayout> <ImageView> <TextView> </ContraintLayout> atoms
carrie_l_hall res layout <> btn_heart_count.xml atoms
carrie_l_hall res values <> styles.xml atoms
carrie_l_hall res values <> styles.xml atoms
carrie_l_hall java com.soundcloud.uicomponents HeartCountButton c atoms
carrie_l_hall class HeartCountButton : ConstraintLayout HeartCountButton c atoms
carrie_l_hall .inflate(R.layout.btn_heart_count,this,true) atoms HeartCountButton c
carrie_l_hall <com.soundcloud.atoms.HeartCountButton android:id="@+id/btn_heart_count" android:layout_width="wrap_content" android:layout_height="wrap_content" /> app
carrie_l_hall interface HeartCount { fun count(count: Int) fun enable() fun
disable() } atoms
carrie_l_hall override fun count(count: Int) { count_text.text = count.toString() }
atoms
carrie_l_hall override fun count(count: Int) { count_text.text = count.format() }
atoms
carrie_l_hall override fun enable() { heart.isSelected = true } atoms
carrie_l_hall override fun enable() { heart.animate() } atoms
carrie_l_hall heartCountButton.count(8355) .enable() .disable() app
carrie_l_hall Components Atoms Foundation App
carrie_l_hall components
carrie_l_hall CompactListItem c <> compact_list_item.xml ... components
carrie_l_hall <com.soundcloud.components.CompactListItem android:id="@+id/compact_list_item" android:layout_width="match_parent" android:layout_height="wrap_content" /> app
carrie_l_hall compactListItem.username(“Username”) .location(“Location”) .followCount(6540) .following(false) .pro(true) app
carrie_l_hall data class CompactListItemViewModel( val lineOne: String, val lineTwo: String,
val followCount: Int, val isFollowing: Boolean, val isPro: Boolean, val image: Bitmap ) {} components
carrie_l_hall data class CompactListItemViewModel( val lineOne: String = "", val
lineTwo: String = "", val followCount: Int, val isFollowing: Boolean = false, val isPro: Boolean = false, val image: Bitmap = null ) {} components
carrie_l_hall CompactListItemViewModel("Username", "Location", 6540, isPro = true) app
carrie_l_hall compactListItem.render(viewModel) app
carrie_l_hall Components Atoms Foundation App Sample App
carrie_l_hall Fast
carrie_l_hall Showcase
carrie_l_hall Sample data
carrie_l_hall
carrie_l_hall tools:src="@tools:sample/avatars" tools:src="@tools:sample/first_names" tools:src="@tools:sample/cities"
carrie_l_hall
carrie_l_hall Edge cases
carrie_l_hall
carrie_l_hall But how did we do it?
carrie_l_hall Future plans
carrie_l_hall I want one!
carrie_l_hall Benefits
carrie_l_hall Work with your design team
carrie_l_hall Build a library which everyone understands
carrie_l_hall Maintain a sample app
@carrie_l_hall THANK YOU