Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Composeで敷き詰めるUIを どうやって作るか

カーキ
October 25, 2024
65

Composeで敷き詰めるUIを どうやって作るか

mobile.stmn #8 登壇資料 by カーキ

カーキ

October 25, 2024
Tweet

Transcript

  1. 1SPGJMF ΧʔΩ { 👨💻 : 株式会社スタメン ⚒ : Android Dev

    🏞 : 𝕏 : @khaki_ngy 😍 : 映画 ・ 料理 ・ 読書 }
  2. ಋೖ ཁૉΛෑ͖٧ΊΔϨΠΞ΢τ͸ͭ͋Δ 1 . Lazy〇〇Grid • LazyVerticalGrid, LazyHorizontalGrid 2 .

    Flow〇〇 • FlowRow, FlowColumn ͦΕͧΕͷίϯϙʔωϯτͰɺͰ͖Δ͜ͱɾͰ͖ͳ͍͜ͱ͕͋Δ
  3. -B[Z(SJE جຊ৘ใ • Content ブロック中では LazyGridScope ブロックとなる • items() などが使

    用 できる • LazyColumnなどのようにページを再利 用 しながら、遅延読み込みを 行 う • LazyVerticalGrid / LazyHorizontalGrid がある LazyVerticalGrid LazyHorizontalGrid          
  4. -B[Z(SJE (SJE$FMMT৭ʑ • LazyGridの引数(columns, rows) • LazyVerticalGrid→columns, LazyHorizontalGrid→rows • GridCells

    の指定の仕 方 でレイアウト 方 法が変わる • GridCells.Fixed • GridCells.Adaptive • GridCells.FixedSize
  5. (SJE$FMMT"EBQUJWF ཁૉݸ౰ͨΓͷେ͖͞Λࢦఆ • GridCells.Adaptive( 8 0 .dp) ← 指定した 大

    きさで画 面 に 入 るだけ敷き詰める • あまりは要素間の余 白 になる GridCells.Adaptive( 1 2 0 .dp) GridCells.Adaptive( 4 0 .dp)
  6. (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)で指定
  7. 'MPXϨΠΞ΢τ جຊ৘ใ • ColumnやRowのコンテナのスペースが不 足 した時に、要素が次の 行 に流れ込 む性質を持ったコンポーネント •

    Lazyではないので、FlowRow in LazyColumn が可能🙆 • Chip コンポーネントを利 用 したタグ表 示 の利 用 が想定されている 現在はExperimentalLayoutApi 👈 LazyのFlowも存在する
  8. 'MPXϨΠΞ΢τͷڧΈ • 並べる要素のサイズを可変 長 なものとし て並べることができる • まさに『コンテナのスペースが不 足 した時

    に、要素が次の 行 に流れ込む性質を持ったコ ンポーネント』 • 要素の weight を 1f で指定すれば、下画 像のように 行 の中ではサイズが均 一 にす ることもできる
  9. -B[Z(SJEPS'MPX3PX ͲͪΒ͕ద੾Ͱ͠ΐ͏͔ʁ • LazyGrid では先述の通り、他のグリッド表 示 したく ないものも含めてレイアウトが可能 • スクロール可能な画

    面 で、どこを遅延表 示 させたいか によって変わる • LazyColumn + FlowRow • LazyVerticalGrid + Column ಉҰํ޲ͷMB[ZJOMB[Z͸ϨΠΞ΢τͰ͖ͳ͍
  10. 'MPXϨΠΞ΢τ͕޲͍͍ͯΔέʔε • 要素の 大 きさがものによって変わる • グリッドを遅延して表 示 させる要件がない •

    画 面 の中の1要素としてグリッド表 示 を 行 いたい場合 ← LazyGridの場合、グリッドの範囲だけ背景 色 を 変えることができないので、この画像のような要件 ではFlowでやるしかない