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
150
1
Share
CodeMobile 2018 - Implementing a design language in Android
Carrie Hall
April 04, 2018
Other Decks in Programming
See All in Programming
AIエージェントの隔離技術の徹底比較
kawayu
0
450
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
230
関係性から理解する"同一性"の型用語たち
pvcresin
2
630
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
120
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.5k
CSC307 Lecture 17
javiergs
PRO
0
310
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
340
AIエージェントと協働するCLI開発 — BunとOpenClawで学んだこと
yoshikouki
1
230
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
1.3k
RailsTokyo 2026#4: AI様があれば、 Hotwireの弱点は消えるか?
naofumi
5
1k
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
700
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.3k
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
210k
How to make the Groovebox
asonas
2
2.2k
Fireside Chat
paigeccino
42
3.9k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
420
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
260
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
840
Optimising Largest Contentful Paint
csswizardry
37
3.7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Designing for Performance
lara
611
70k
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