【Jetpack Compose】メールアプリを最も簡単に開く方法

指定したURLでWEBブラウザを開くならこう書けます。


@Composable
fun OpenLinkButton(
  urlHandler: UriHandler = LocalUriHandler.current
) {
  Button(
    onClick = {
      urlHandler.openUri("https://android.benigumo.com/")
    }
  ) {
    Text("Open Web link")
  }
}

では、

指定した宛先メールアドレスでメールアプリを開く場合。


@Composable
fun OpenMailAppButton(
  urlHandler: UriHandler = LocalUriHandler.current
) {
  Button(
    onClick = {
      urlHandler.openUri("mailto:support@benigumo.com")
    }
  ) {
    Text("Open Mail App")
  }
}

旧来の Intent は Jetpack Compose では使わないことが多くなってきました!

👉 顔文字 (かおもじ) パック - Google Play のアプリ


Android Architecture Samples でみる JetpackCompose UI コンポーネントのネスト



表示されてるコンテンツまでにいくつかのコンポーネントを経由している。

👉 architecture-samples/app/src/main/java/com/example/android/architecture/blueprints/todoapp/TodoNavGraph.kt at 130f5dbebd0c7b5ba195cc08f25802ed9f0237e5 · android/architecture-samples

中心は、NavGraph として利用されている NavHost

ModalDrawer ごと切り替えてる。


Activity
  + NavHost
    + ModalDrawer
      + 【Screen】
        + Scaffold
          + SwipeRefresh
            + 【Content】    
    + ModalDrawer
      + 【Screen】
        + Scaffold
          + SwipeRefresh
            + 【Content】
    + ModalDrawer
      + 【Screen】
        + Scaffold
          + SwipeRefresh
            + 【Content】

きっと、使いやすい理にかなった入れ子関係なのだろう。


Activity
   ↓
NavHost
   ↓ 1:*
ModalDrawer
   ↓
【Screen】
   ↓
Scaffold
   ↓
SwipeRefresh
   ↓
【Content】

参考にしたいですね。

👉 android/architecture-samples: A collection of samples to discuss and showcase different architectural tools and patterns for Android apps.


Jetpack Compose Material3 の ListItem で設定画面を秒でつくる

実際、秒、ってことないけども。

まあまあ簡単で見た目も綺麗にできます。

Jetpack Compose Material3 の ListItem を使います。


@Composable
fun ListItem(
    headlineContent: @Composable () -> Unit,
    modifier: Modifier = Modifier,
    overlineContent: (@Composable () -> Unit)? = null,
    supportingContent: (@Composable () -> Unit)? = null,
    leadingContent: (@Composable () -> Unit)? = null,
    trailingContent: (@Composable () -> Unit)? = null,
    colors: ListItemColors = ListItemDefaults.colors(),
    tonalElevation: Dp = ListItemDefaults.Elevation,
    shadowElevation: Dp = ListItemDefaults.Elevation
): Unit


👉 androidx.compose.material3  |  Android Developers

Card を利用して、設定項目をグループ分けします。

👉 Card  |  Jetpack Compose  |  Android Developers

以下のようなレイアウト構成。


SettingScreen
  LazyColumn
    Card - Group
      ListItem - Clickable
      ListItem - Switch
      ListItem - Checkbox
    Card
      ListItem - Clickable
      ListItem - Switch
      ListItem - Checkbox
    ...

こう書けました。

こんな感じです。

Material3 って、今では結構使えるんですね!