Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Composeで敷き詰めるUIを どうやって作るか
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
カーキ
October 25, 2024
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Composeで敷き詰めるUIを どうやって作るか
mobile.stmn #8 登壇資料 by カーキ
カーキ
October 25, 2024
More Decks by カーキ
See All by カーキ
Gemini Nanoを使ってみよう
takarkiz
0
33
俺のフィットネスアプリ @俺の勉強会#5
takarkiz
0
1k
好きから始まるローカルキャリア
takarkiz
0
35
TaskStackBuilderの紹介
takarkiz
0
55
Gemini API でアプリをつくりたい!
takarkiz
0
250
名古屋で勉強会を主催する3つの理由
takarkiz
0
240
GitHub Issue を利用したチケット管理
takarkiz
0
150
Gitの仕組みを理解しよう
takarkiz
0
150
Jetpack Compose でやってイイこと・ダメなこと
takarkiz
2
640
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Statistics for Hackers
jakevdp
799
230k
Technical Leadership for Architectural Decision Making
baasie
3
560
Ruling the World: When Life Gets Gamed
codingconduct
0
330
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
290
The Limits of Empathy - UXLibs8
cassininazir
1
650
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
780
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
930
Become a Pro
speakerdeck
PRO
31
6.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Google's AI Overviews - The New Search
badams
0
1.6k
How STYLIGHT went responsive
nonsquared
100
6.3k
Transcript
ΧʔΩ!NPCJMFTUNO<'SJ> $PNQPTFͰෑ͖٧ΊΔ6*Λ Ͳ͏ͬͯ࡞Δ͔ -B[Z(SJEWT'MPX
1SPGJMF ΧʔΩ { 👨💻 : 株式会社スタメン ⚒ : Android Dev
🏞 : 𝕏 : @khaki_ngy 😍 : 映画 ・ 料理 ・ 読書 }
ಋೖ ҎԼͷΑ͏ͳσβΠϯ͕དྷͨ࣌ɺͲͷΑ͏ʹ࣮͠·͔͢ʁ
ಋೖ ཁૉΛෑ͖٧ΊΔϨΠΞτͭ͋Δ 1 . Lazy〇〇Grid • LazyVerticalGrid, LazyHorizontalGrid 2 .
Flow〇〇 • FlowRow, FlowColumn ͦΕͧΕͷίϯϙʔωϯτͰɺͰ͖Δ͜ͱɾͰ͖ͳ͍͜ͱ͕͋Δ
-B[Z(SJE جຊใ • Content ブロック中では LazyGridScope ブロックとなる • items() などが使
用 できる • LazyColumnなどのようにページを再利 用 しながら、遅延読み込みを 行 う • LazyVerticalGrid / LazyHorizontalGrid がある LazyVerticalGrid LazyHorizontalGrid
-B[Z(SJE (SJE$FMMT৭ʑ • LazyGridの引数(columns, rows) • LazyVerticalGrid→columns, LazyHorizontalGrid→rows • GridCells
の指定の仕 方 でレイアウト 方 法が変わる • GridCells.Fixed • GridCells.Adaptive • GridCells.FixedSize
(SJE$FMMT'JYFE ྻͨΓͷݸΛࢦఆ • GridCells.Fixed(Int) ← 指定した数字の数だけ1列に表 示 • 要素の 大
きさはよしなに決まる GridCells.Fixed( 3 ) GridCells.Fixed( 5 )
(SJE$FMMT"EBQUJWF ཁૉݸͨΓͷେ͖͞Λࢦఆ • GridCells.Adaptive( 8 0 .dp) ← 指定した 大
きさで画 面 に 入 るだけ敷き詰める • あまりは要素間の余 白 になる GridCells.Adaptive( 1 2 0 .dp) GridCells.Adaptive( 4 0 .dp)
(SJE$FMMT'JYFE4J[F ཁૉݸͨΓͷେ͖͞Λࢦఆ • GridCells.FixedSize( 8 0 .dp) ← 指定した 大
きさで画 面 に 入 るだけ敷き詰める • あまりは Arrangement.Horizontal の指定に従って処理される GridCells.FixedSize( 1 2 0 .dp) GridCells.FixedSize( 4 0 .dp) この例では Arrangement.spaceBy( 8 .dp)で指定
άϦουҎ֎ͷཁૉΛೖΕΔ
-B[Z(SJEͰϔομʔΛදݱ͢Δ (SJE*UFN4QBOͷར༻ • item メソッドを使えば別の要素として 定義できそう
-B[Z(SJEͰϔομʔΛදݱ͢Δ (SJE*UFN4QBOͷར༻ • item メソッドを使えば別の要素として 定義できそう • Gridの要素として表現されてしまう😭
-B[Z(SJEͰϔομʔΛදݱ͢Δ (SJE*UFN4QBOͷར༻ • Itemの引数としてspanを定義する • Spanを変更することで要素の 大 きさを 個別に変更することができる
'MPXϨΠΞτ جຊใ • ColumnやRowのコンテナのスペースが不 足 した時に、要素が次の 行 に流れ込 む性質を持ったコンポーネント •
Lazyではないので、FlowRow in LazyColumn が可能🙆 • Chip コンポーネントを利 用 したタグ表 示 の利 用 が想定されている 現在はExperimentalLayoutApi 👈 LazyのFlowも存在する
'MPXϨΠΞτ ෑ͖٧Ίํ • ColumnやRowのようにcontentのラム ダの中で、直接Composable関数を記述 できる • 以下2つの引数で敷き詰め 方 を変える
ことができる • horizontalArrangement • verticalArrangement 👆公式ドキュメントが詳しいです
'MPXϨΠΞτͷڧΈ • 並べる要素のサイズを可変 長 なものとし て並べることができる • まさに『コンテナのスペースが不 足 した時
に、要素が次の 行 に流れ込む性質を持ったコ ンポーネント』 • 要素の weight を 1f で指定すれば、下画 像のように 行 の中ではサイズが均 一 にす ることもできる
-B[Z(SJEͱ'MPXϨΠΞτΛ ͍͚Δ
-B[Z(SJEͱ'MPXϨΠΞτͷಛ • LazyGrid は、タイル状に物を敷き詰めるのに適したレイアウトコンポーネン ト • Flowレイアウトは、要素を並べて必要があれば折り返しを 行 うのに適したレ イアウトコンポーネント
ͦΕͧΕͷੑ࣭Λແࢹ͢Δͱɺɺ -B[Z(SJEͰ'MPXͬΆ͍λάͷϨΠΞτΛ࡞ͬͯΈΔ • 要素の幅が固定になってしまう😭 要素のサイズが可変 長 の場合は、Flowレイアウトが適切
-B[Z(SJEPS'MPX3PX ͲͪΒ͕దͰ͠ΐ͏͔ʁ • LazyGrid では先述の通り、他のグリッド表 示 したく ないものも含めてレイアウトが可能 • スクロール可能な画
面 で、どこを遅延表 示 させたいか によって変わる • LazyColumn + FlowRow • LazyVerticalGrid + Column ಉҰํͷMB[ZJOMB[ZϨΠΞτͰ͖ͳ͍
-B[Z(SJE͕͍͍ͯΔέʔε • スクロール 方 向と交差する 方 向の要素のサイズが固定である • グリッドの要素を遅延して表 示
したい要件がある • Experimental な機能を利 用 できない
'MPXϨΠΞτ͕͍͍ͯΔέʔε • 要素の 大 きさがものによって変わる • グリッドを遅延して表 示 させる要件がない •
画 面 の中の1要素としてグリッド表 示 を 行 いたい場合 ← LazyGridの場合、グリッドの範囲だけ背景 色 を 変えることができないので、この画像のような要件 ではFlowでやるしかない
-B[Z(SJEͱ'MPXϨΠΞτͰ ͦͦࢥ͕ҧ͏
ࢥΛཧղ্ͨ͠Ͱɺ-B[Z(SJEͱ 'MPXϨΠΞτΛ͍͚Α͏