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
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
130
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.3k
組織で育むオブザーバビリティ
ryota_hnk
0
180
2026年 エンジニアリング自己学習法
yumechi
0
140
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
210
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
Building an army of robots
kneath
306
46k
How to make the Groovebox
asonas
2
1.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
440
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Cult of Friendly URLs
andyhume
79
6.8k
Mind Mapping
helmedeiros
PRO
0
88
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