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

Androidでウィジェットサイズを固定したい時の困りごととその対処法

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for MiyabiGouji MiyabiGouji
November 21, 2024

 Androidでウィジェットサイズを固定したい時の困りごととその対処法

Avatar for MiyabiGouji

MiyabiGouji

November 21, 2024
Tweet

More Decks by MiyabiGouji

Other Decks in Technology

Transcript

  1. ハッシュタグ #nikkei_tech_talk 問題が起きた実装 class SearchMenuWidget : GlanceAppWidget() { override suspend

    fun provideGlance(context: Context, id: GlanceId) { provideContent { Content() } } companion object { val LAYOUT_BREAKPOINT = 220.dp internal val NORMAL_SIZE = DpSize(250.dp, LAYOUT_BREAKPOINT) internal val LOW_SIZE = DpSize(250.dp, 92.dp) } 6 レイアウトが変わる縦サイズ
  2. ハッシュタグ #nikkei_tech_talk 問題が起きた実装 @Composable private fun Content() { GlanceTheme {

    when (LocalSize.current) { NORMAL_SIZE -> NormalSizeWidget(MenuItem.entries) LOW_SIZE -> LowSizeWidget() } } } override val sizeMode: SizeMode = SizeMode.Responsive( setOf(NORMAL_SIZE, LOW_SIZE), ) 7 サイズによる それぞれのレイアウト
  3. ハッシュタグ #nikkei_tech_talk 問題が起きた実装 @Composable private fun NormalSizeWidget() { Column( modifier

    = GlanceModifier .wrapContentHeight() .fillMaxWidth() .background(R.color.widget_bg) .padding(16.dp) ) { LogoAndSearch() MenuButton() ….. ウィジェット全体の padding: 16dp メニューボタン : 60dp ボタン間の padding: 12dp ウィジェット全体の高さ : 236dp 8
  4. ハッシュタグ #nikkei_tech_talk 問題が起きた実装 @Composable private fun LowSizeWidget() { Box( modifier

    = GlanceModifier .wrapContentHeight() .fillMaxWidth() .background(R.color.widget_bg) .padding(16.dp) ) { LogoAndSearch() } } ウィジェット全体の padding: 16dp メニューボタン : 60dp ウィジェット全体の高さ : 92dp 9
  5. ハッシュタグ #nikkei_tech_talk 困りごと①の対処法 4x1の最小サイズを用意 11 companion object { // デフォルトサイズ.

    4x2 internal val MEDIUM_HEIGHT_SIZE = DpSize(250.dp, 220.dp) // 4x1 internal val SMALL_HEIGHT_SIZE = DpSize(250.dp, 92.dp) // 最小サイズ internal val X_SMALL_HEIGHT_SIZE = DpSize(250.dp, 40.dp) } 元の実装 追加の実装
  6. ハッシュタグ #nikkei_tech_talk メニューアイテム内の縦方向のpaddingを無くし、各アイテム・ ウィジェット全体の縦方向のサイズを固定 困りごと②の対処法 14 private val searchBarHeight :

    Dp = 56.dp private val menuButtonHeight: Dp = 54.dp private val fullWidgetHeight: Dp = 224.dp Pixel8 / API 34 文字サイズ200% object Size { internal val FULL = DpSize(250.dp, fullWidgetHeight) internal val ONLY_SEARCH = DpSize(250.dp, 88.dp) internal val ONLY_SEARCH_SMALL = DpSize(250.dp, searchBarHeight) }
  7. ハッシュタグ #nikkei_tech_talk 困りごと②の対処法 @Composable private fun NormalSizeWidget() { Column( modifier

    = GlanceModifier .wrapContentHeight() .fillMaxWidth() .background(R.color.widget_bg) .padding(16.dp) ) { LogoAndSearch() MenuButton() ….. 15 @Composable private fun NormalSizeWidget() { Column( modifier = GlanceModifier .height(SearchMenuWidget.Size.FULL.height) .fillMaxWidth() .background(R.color.widget_bg), verticalAlignment = Alignment.CenterVertically, ) { LogoAndSearch() MenuButton() Befor e After 元の実装 高さを指定して 縦方向の中央寄せ
  8. ハッシュタグ #nikkei_tech_talk ウィジェットの高さを小さめに設定 困りごと③の対処法 17 private val searchBarHeight : Dp

    = 48.dp private val menuButtonHeight: Dp = 46.dp private val fullWidgetHeight: Dp = 200.dp private val searchBarHeight : Dp = 56.dp private val menuButtonHeight: Dp = 54.dp private val fullWidgetHeight: Dp = 224.dp