Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Spannable芸 〜郵便番号編〜
HiroYUKI Seto
March 13, 2018
Programming
4
1.9k
Spannable芸 〜郵便番号編〜
2018/3/13
potatotips #49
Sample project
https://github.com/hiroyuki-seto/PostalCodeSample
HiroYUKI Seto
March 13, 2018
Tweet
Share
More Decks by HiroYUKI Seto
See All by HiroYUKI Seto
Androidアプリの 安全なリファクタリングを行うパターン集
seto_hi
1
4.6k
UI TestやVisual Regression Testを コスパ良くやる
seto_hi
3
1.4k
事業支援というお仕事
seto_hi
0
310
MDCの内部実装から学ぶ 表現力の高いViewの作り方
seto_hi
5
1.5k
CoordinatorLayoutのBehaviorを使い倒す
seto_hi
1
230
Jetpack Compose
seto_hi
2
520
UI改善に繋がるエンジニアの立ち回り
seto_hi
2
3.9k
MDCのButtonのCorner Family
seto_hi
1
120
MDCのBottomAppBarのShadowの実現方法
seto_hi
0
690
Other Decks in Programming
See All in Programming
Automating Gradle benchmarks at N26
ubiratansoares
PRO
1
140
実践的!FPGA開発セミナー vol.11
fixstars
0
110
Isar勉強会
hoddy3190
0
330
「困りごと」から始める個人開発
ikumatadokoro
4
240
段階的な技術的負債の解消方法.pdf
ko2ic
2
870
Pythonによる開発をアップデートするライブラリの紹介
daikikatsuragawa
1
330
YATA: collaborative documents and how to make them fast
horusiath
1
140
NestJS_meetup_atamaplus
atamaplus
0
200
アジャイルで始める データ分析基盤構築
nagano
1
850
動画合成アーキテクチャを実装してみて
satorunooshie
0
540
Atomic Design とテストの○○な話
takfjp
2
790
FargateとAthenaで作る、機械学習システム
nayuts
0
160
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
14
3.8k
Navigating Team Friction
lara
175
11k
Designing for humans not robots
tammielis
241
24k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
15k
Reflections from 52 weeks, 52 projects
jeffersonlam
337
17k
Making the Leap to Tech Lead
cromwellryan
113
7.4k
What’s in a name? Adding method to the madness
productmarketing
11
1.6k
Music & Morning Musume
bryan
35
4.3k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
The Illustrated Children's Guide to Kubernetes
chrisshort
18
40k
The Invisible Customer
myddelton
110
11k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
213
11k
Transcript
Spannable芸 〜郵便番号編〜 potatotips #49 株式会社ノハナ 瀬戸優之 @seto_hi
自己紹介 • 瀬戸優之 Seto HiroYUKI @seto_hi • Androidエンジニア & アプリデザイン
• 株式会社ノハナ ◦ 一組でも多くの家族に笑顔を届ける ◦ 絶賛採用中 • Material Design大好き • 好きなAPIはCanvas#saveとViewGroup#layout
最高の 郵便番号入力欄を 作りたい
最高の郵便番号入力欄 要件 • 3桁目と4桁目の間にハイフンを表示したい • 3桁目を打ったらハイフンの後にカーソルが移動 ◦ ハイフンは入力させたくない ◦ アプリ側で入力したくもない
◦ inputType=numberでやりたい • 上3桁と下4桁をシームレスに移動したい ◦ カーソル、文字削除、ペースト
郵便番号入力欄問題 • EditText2つ ◦ 2つのEditText間のカーソル移動問題 ◦ 削除、ペースト問題 • EditText1つ ◦
ハイフンが表示できない ◦ or ハイフンが文字として入力される • 恐らくクレカ番号入力欄でも同じ課題がある
簡単!写真1枚で 子どもの成長を届ける カレンダー付き ポストカードアプリ
Spannableで解決
Spannable • 文字列のデコレーションのinterface • SpannableStringBuilderなどが対応 • 文字(列)に対してSpanを設定する ◦ URLSpan, StyleSpan,
TypefaceSpan, etc.. • 未確定文字列の色や下線もSpan
ReplacementSpan
ReplacementSpan • TextViewの文字列を置換するSpan • 独自絵文字やデコ絵文字などに使われている • 文字列の描画幅を任意に変更できる • 文字列と描画を異なるものにできる
実装
サンプル https://github.com/hiroyuki-seto/PostalCodeSample
カスタムEditText+カスタムSpan • EditText ◦ 3文字目にカスタムSpanを設定 ◦ onDrawでハイフンを描画 • Span ◦
ReplacementSpanを継承 ◦ getSizeで対象の文字の幅+ハイフンの幅を返す ◦ drawで対象の文字を描画
罠
罠 • 0文字の際はReplacementSpanが効かない →仕様 • 未確定文字列の背景の描画 →サンプル見てね! • SurrogatePairを考慮したSpan →気合
かなり地道に実装する必要がある
Have a nice Spannable!