📝

Jetpack Composeであれってどうやるんだっけメモ

2023/08/10に公開

これは何?

Android Viewで行っていた諸々をJetpack Composeでやるための自分用備忘録。
随時追記していきます。

Text

打消し線をあてたい

buildAnnotatedStringで装飾したAnnotatedString型の値をTextの第1引数に渡してやる。
ちなみにソースを見たところ通常利用しているTextは第1引数がString型だった。

Text(
  buildAnnotatedString {
    withStyle(
      SpanStyle(
        textDecoration = TextDecoration.LineThrough
      )
    ) {
      append("hoge")
    }
  }
)

こうやって汎用的にしておくのもありかも。

@Composable
fun StrikethroughText(text: String) {
    val annotatedString = buildAnnotatedString {
        withStyle(style = SpanStyle(textDecoration = TextDecoration.LineThrough)) {
            append(text)
        }
    }
    Text(text = annotatedString)
}

AlertDialog

ボタンを押しても閉じない

ボタンを押せば閉じるAndroid Viewのダイアログと異なり、Jetpack Composeのダイアログは表示フラグをOFFにしてやる必要がある。
それぞれのボタンのonClickでonDismissが実行されるようにし、呼び出し元でフラグをOFFにしてやる必要があり。

@Composable
fun SampleDialog(
  onDismiss: () -> Unit
) {
  AlertDialog(
    title = {
      Text("title")
    },
    text = {
      Text("message")
    },
    confirmButton = {
      TextButton(
        onClick = {
          onDismiss()
        }
      ) {
        Text("OK")
      }
    },
    dismissButton = {
      TextButton(
        onClick = {
          onDismiss()
        }
      ) {
        Text("Cancel")
      }
    }
} 

setCancellable(false)したい

AlertDialogにはsetCancellable項目がない。
代わりにバックキーや外部をタップしたときに呼ばれるonDismissRequestを空にしておく。

逆にsetCancellable(true)したいときには、onDismissRequestの中で上述のonDismissを読んでやれば同等の挙動になる。

Discussion