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
Composeで敷き詰めるUIを どうやって作るか
Search
カーキ
October 25, 2024
110
0
Share
Composeで敷き詰めるUIを どうやって作るか
mobile.stmn #8 登壇資料 by カーキ
カーキ
October 25, 2024
More Decks by カーキ
See All by カーキ
Gemini Nanoを使ってみよう
takarkiz
0
17
俺のフィットネスアプリ @俺の勉強会#5
takarkiz
0
970
好きから始まるローカルキャリア
takarkiz
0
29
TaskStackBuilderの紹介
takarkiz
0
48
Gemini API でアプリをつくりたい!
takarkiz
0
220
名古屋で勉強会を主催する3つの理由
takarkiz
0
230
GitHub Issue を利用したチケット管理
takarkiz
0
130
Gitの仕組みを理解しよう
takarkiz
0
140
Jetpack Compose でやってイイこと・ダメなこと
takarkiz
2
630
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
2
1k
We Are The Robots
honzajavorek
0
220
30 Presentation Tips
portentint
PRO
1
290
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
340
A Tale of Four Properties
chriscoyier
163
24k
Unsuck your backbone
ammeep
672
58k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Statistics for Hackers
jakevdp
799
230k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.4k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
34
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ϨΠΞτΛ͍͚Α͏