表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
17/19

Jetpack Composeについて

 【主なJetpack Composeによる画面の部品の関数】


 ・Surface ……Surface等で囲まないとダーク テーマで白文字に成らなかったり、ライト テーマで白背景に成らなかったりします。

 ・Column ……縦に並べてくれます。例えば、modifier = Modifier.verticalScroll(rememberScrollState())を設定すると縦スクロールできます。

 ・Row ……横に並べてくれます。

 ・Spacer ……縦や横の余白を作ってくれます。例えば、Spacer(Modifier.size(20.dp))とすると、20dpの余白を作ってくれます。

 ・Text ……文字を表示してくれます。いわゆる、ラベルです。

 ・Button ……ボタンを表示してくれます。

 ・OutlinedTextField ……テキスト ボックスを表示してくれます。

 ・TextField ……テキスト ボックスを表示してくれます。

 ・BoxとButton等とDropdownMenuとDropdownMenuItem ……メニュー項目やリスト ボックス?を表示してくれます。

 ・HorizontalDivider ……水平線を表示してくれます。

 ・VerticalDivider ……垂直線を表示してくれます。



 Jetpack Composeは、Surface等の中で、ColumnとRowを組み合わせて、画面の部品を配置します。



 BoxとButtonとDropdownMenuとDropdownMenuItemの例

――――――――――――――――――――――――――――――

var xxxExpanded by rememberSaveable { mutableStateOf(false) }

var xxx by rememberSaveable { mutableStateOf("デフォルト値") }


//中略


Box {

  Button(

    onClick = {

      xxxExpanded = ! xxxExpanded

    }

  ) {

    Text(xxxLabel)

  }

  DropdownMenu(

    expanded = xxxExpanded,

    onDismissRequest = { xxxExpanded = false }

  ) {

    DropdownMenuItem(

      text = { Text(text = "選択肢1") },

      onClick = {

        xxxExpanded = false

        xxx = "選択肢1の値"

      }

    )

    DropdownMenuItem(

      text = { Text(text = "選択肢2") },

      onClick = {

        xxxExpanded = false

        xxx = "選択肢2の値"

      }

    )

  }

}

――――――――――――――――――――――――――――――



 ジェットパック コンポーズでは、今までのアンドロイド ビューのSAF(ストレージ アクセス フレームワーク)のコードをrememberLauncherForActivityResultで書き換える必要が有ります。

 ちなみに、rememberLauncherForActivityResultで権限の確認もできるそう?です。



 ジェットパック コンポーズのSAF(ストレージ アクセス フレームワーク)の例

――――――――――――――――――――――――――――――

  val context = LocalContext.current


  var text by rememberSaveable { mutableStateOf("") }


  val readRememberLauncherForActivityResult = rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri ->


    if (uri == null) {

      return@rememberLauncherForActivityResult

    }


    InputStreamReader(context.contentResolver.openInputStream(uri!!), characterCodeName).use {

      text = it.readText()

    }

  }


  val saveRememberLauncherForActivityResult = rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument()) { uri ->


    if (uri == null) {

      return@rememberLauncherForActivityResult

    }


    //contentResolver.openOutputStream()で"wt"モードを指定しないと、書き込み前のテキストの文字数が大きい場合、書き込み前のテキストの先頭の一部を置換するような形に成ってしまいます。

    OutputStreamWriter(context.contentResolver.openOutputStream(uri!!, "wt"), characterCodeName).use {

      BufferedWriter(it).use {

        it.write(text)

      }

    }

  }


  //中略


      Row {

        Button(

          onClick = {


            readRememberLauncherForActivityResult.launch("*/*")

          }

        ) {

          Text("ファイル読み込み")

        }

      }

      Row {

        Button(

          onClick = {


            saveRememberLauncherForActivityResult.launch("")

          }

        ) {

          Text("ファイル保存")

        }

      }


//以下略

――――――――――――――――――――――――――――――

 ※前記の中の「*/*」はMIMEタイプです。画像ファイルだけを読み書きする場合は「image/*」のようにMIMEタイプを指定します。


評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ