visible true

技術的なメモを書く

Jetpack Compose 0.1.0-dev05から0.1.0-dev06にしたときに変更が必要だったところ

前回に引き続いて。

left, rightがstart, endに

レイアウトのleft, rightstart, endになりました。なるだろうなーと思ってたので想定どおり。

before

LayoutPadding(
  top = 16.dp
  left = 8.dp,
  right = 8.dp,
  bottom = 16.dp
)

after

LayoutPadding(
  top = 16.dp
  start = 8.dp,
  end = 8.dp,
  bottom = 16.dp
)

DrawImageを廃止

Imageを描画するDrawImageがなくなりました。代わりにSimpleImageを使います。このあたりは今後も色々と変わりそうですね。

before

Container(
  width = 100.dp,
  height = 200.dp
) {
  DrawImage(image)
}

after

Container(
  width = 100.dp,
  height = 200.dp
) {
  SimpleImage(image)
}

androidx.compose.Contextを廃止

ContextAmbientはandroidx.compose.Contextを返してましたが、androidx.compose.Contextになりました。

before

import androidx.compose.Context

after

import android.content.Context

AppBarIconを廃止

TopAppBarのnavigationIconに使うAppBarIconがなくなり、代わりにIconButtonを使う形になりました。

before

TopAppBar(
  title = {
    Text(context.getString(R.string.app_name))
  },
  navigationIcon = {
    AppBarIcon(
      icon = ImagePainter(BitmapImage(context.getBitmap(R.drawable.ic_baseline_arrow_back_24))),
      onClick = {
        backStack.pop()
      }
    )
  }
)

IconButtonを使う場合のほうが冗長ですが、children: @Composable() () -> Unitを受け取るのでより柔軟な表現が可能になってます(例えばTextを渡してもちゃんと動く)。

after

TopAppBar(
  title = {
    Text(context.getString(R.string.app_name))
  },
  navigationIcon = {
    IconButton(
      onClick = {
        backStack.pop()
      }
    ) {
      SimpleImage(
        BitmapImage(context.getBitmap(R.drawable.ic_baseline_arrow_back_24))
      )
    }
  }
)

ArrangementにVertical, Hotizontalの概念を追加

Column, RowともにArrangementが設定できますが、寄せる方向の設定がStart, Endという名前でした。なので次のように同じ値でもColumnかRowかで意味が異なります。

before

Column(
  modifier = LayoutWidth.Fill,
  arrangement = Arrangement.End // 下寄せ
) {
  Row(
    modifier = LayoutWidth.Fill,
    arrangement = Arrangement.End // 右寄せ
  ) {
    // something
  }
}

ArrangementにVertical, Hotizontalの概念を追加し、使える値を増やしつつ制限をかけています。これにより意味を理解しやすくなりました。

after

Column(
  modifier = LayoutWidth.Fill,
  arrangement = Arrangement.Bottom // Arrangement.Endは使えない
) {
  Row(
    modifier = LayoutWidth.Fill,
    arrangement = Arrangement.End
  ) {
    // something
  }
}

おわりに

今までは1ヶ月に1リリースという感じでしたが、2月は2回ありました。I/Oに向けてガガガッとスパートかけてる感じなんでしょうか。楽しみですね。