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
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
440
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
1.4k
Strategy for Finding a Problem for OSS: With Real Examples
kibitan
0
130
ローカルで稼働するAI エージェントを超えて / beyond-local-ai-agents
gawa
1
220
Rethinking API Platform Filters
vinceamstoutz
0
4.8k
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
300
Smarter Angular mit Transformers.js & Prompt API
christianliebel
PRO
1
110
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.8k
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
270
PHPで TLSのプロトコルを実装してみる
higaki_program
0
720
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
740
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
330
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
240
Being A Developer After 40
akosma
91
590k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
240
Technical Leadership for Architectural Decision Making
baasie
3
300
Discover your Explorer Soul
emna__ayadi
2
1.1k
Documentation Writing (for coders)
carmenintech
77
5.3k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
350
From π to Pie charts
rasagy
0
160
Visualization
eitanlees
150
17k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Into the Great Unknown - MozCon
thekraken
40
2.3k
Side Projects
sachag
455
43k
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