Androidアプリ開発の覚書き

Androidアプリ開発を、Kotlin, Jetpack Composeで行っています。気になったことをChatGPTに聞いて記事にしています。

UI

Excelのような編集可能な表を表示する(Jetpack Compose)

LazyColumn, LazyRow, TextFieldといった基本コンポーネントを並べて表示するというごくごく標準的な方法を教わりました。 ただ、その中で、数値のフォーマットや、列幅の調整等の実装を記述する必要があり、結果的にJetpack Composeでの基本的なコンポーネ…

Jetpack ComposeのUIのテスト(詳細)

Jetpack ComposeのUIのテストについてかなり詳しく聞きました。 よく分かりませんでしたが、ドラッグアンドドロップのような複雑な動作もテストできるようです。 Jetpack Composeのテストについて、createComposeRule() が返すオブジェクトを用いてできるこ…

Kotlin, Androidのテストの基本(1)

AndroidではJUnit4がテストフレームワークとして用いられることが多いそうです。 通常のクラスを初め、Jetpack ComposeのUIのロジックまで、テスト駆動開発の手法が使えるそうで、仕事で業務アプリを作成したときのUIのテストで散々苦しんだ経験のある僕とし…

Jetpack ComposeではEditViewではなくTextFieldを用いる

Jetpack Composeでは、EditViewではなく、TextFieldを用います。 また、保持するテキストは、SpannableStringではなく、AnnotatedStringです。 再表示周りの処理が従来のものと異なるので、似た機能の別コンポーネントが用意されているということだと思いま…

Jetpack ComposeとConstraintLayout

UI

Jetpack Composeでは、ConstraintLayoutは第一の選択肢でないようです。 Bootstrapのグリッドシステムっぽい手法に近いのかとも思いましたが、それとも違うようです。 Jetpack ComposeのConstraintLayoutの例を示してください。 ConstraintLayoutの方が一般…

Android, Kotlinの非同期処理

Jetpack ComposeでUIをデザインする際、Composable関数内に登場するStateFlow。 StateFlowのvalueが更新されることで、関連するComposable関数が再実行され、結果、StateFlowのvalueを参照するコンポーネントの表示も変わることになります。 ところで、非同…

Androidアプリ全体のデザイン:Scaffold

メニューの作成も、各画面への遷移も、Jetpack Composeを使うとかなり楽になりますね。 Scaffoldを用いたメニューのデザイン、画面の遷移、Androidデバイスによるメモリ管理に関わらず値を保持する方法など、教えてください。 sharedPreferencesを用いたデー…

Androidアプリの開発手法の変遷について

ChatGPTに教えてもらいました。 僕は、Androidアプリ開発における、ViewModel以前を知りません。 Androidアプリの開発手法の変遷について教えてください。 このような変遷における、ViewModelの意義を教えてください。 データモデルとUIの間にViewModelを置…

Jetpack Compose:既存のRecyclerViewとLazyColumn/LazyRowの比較

UI

既存のRecyclerViewと、LazyColumn, LazyRowを比較しつつ、解説してもらいました。 Jetpack Composeに、既存のRecyclerViewに相当するComposable関数はありますか? RecyclerViewと、LazyColumn/LazyRowの機能を比較してください。 LazyPagingItemsの概要と…

AndroidView関数:WebView等の既存ViewをCompose内で使用する

UI

Composable関数が未提供の既存ViewをComposeで使用する方法です。 WebViewほか、MapViewなどはまだ未提供なため、以下で教わった方法が必要らしいです。 Jetpack ComposeでWebViewに対応する機能を持つComposable関数があれば教えてください。 AndroidViewシ…

Jetpack Compose:複数画面を遷移するのに、Fragmentは使わないようです

UI

いやあ・・ほんまに、複数画面の行き来などの処理も含めて、全部、Kotlinのコードだけを用いて簡略化できるのですね。本当にびっくりしました。 Jetpack Composeで、複数画面を行き来するような処理を書く場合、どのようにするのですか? NavHostスコープのc…

Jetpack Compose:Modifierの概要

UI

Jetpack Conposeでいつも目にするModifierの意義と役割が分からなかったので聞いてみました。 マージン、パディング、イベントハンドラなど、あらゆる描画要素に共通する値をパッケージしたオブジェクトのようです。 チェーンの仕組みによって、値を上書きで…

Canvasでアニメーションを描画する場合は、ダブルバッファリングは不要

Jetpack ComposeのComposable関数で描画要素を定義する場合、その要素が参照する'State'のオブジェクトの値の変更は常にフレームワークによって検出されるよう構成され、値の変更に影響する部分のみが効率的に再描画されるようです。 昔、ゲームプログラミン…

2次元でキャラクターを操作するゲーム

Jetpack Composeで作った2次元ゲームの例を挙げてもらいました。 こんなにシンプルにできるんだと、びっくりしました。 AndroidのKotlinとJetpack Composeで、2次元でキャラクターを操作するゲームを作りたいです。 サウンドは後回しで良いです。キャラクタ…

Jetpack Compose:親コンポーネントから孫以降コンポーネントへ直接データを渡す(CompositonLocal)

UI

本を読んでいて分からなかった箇所を、ChatGPTに聞きました。Jetpack Compose以前の方法との比較など、色んな選択肢の意義や比較をすぐに教えてもらえるので、すごく助かります。 Jetpack ComposeのCompositionLocalが何をしているのか分かりません。 LocalT…

簡単なゲームのUIには、Jetpack Composeが良いかも

画面上のキャラクターがタップで動いたりするような、簡単なグラフィックスのゲームを作るには、Jetpack Composeが良さそうです。 また、それに限らず、UIをXMLではなくKotlinのコードで作成出来るというのは、僕にとってはすごく心惹かれます。 早速、本を…

ボタン押下後の長い処理とか、二度押し禁止とか

本職で何年かプログラマーをしていましたが、その頃に比べても、非同期処理を普通に用いるAndroidプログラミングはすごく難しく感じます。 ChatGPTがなかったら、ずっと悩んだままだったかもしれません。 ボタンを押した後、時間がかかる処理をするときは、c…

タブのあるページは、ViewPager2とTabLayoutで作成する

(Jetpack Composeを用いない、古い手法になります。別記事 で少しだけ、Jetpack Composeでのコード例があります。) また、ChatGPTに聞いてみました。 Androidアプリを、KotlinとJetpackを用いて開発しています。タブを自由に増減できるページを作りたいので…

Fragment間の引数付き移動

(Jetpack Compose以前の古い手法になります。詳しくは別記事参照。) JetpackでのFragment間の移動と従来の移動との違いが整理しきれていなかったので、ChatGPTに聞いてみました。 Androidアプリをkotlinで開発しています。次のコードがしていることを教えて…

WebViewでハイライトを動的に追加するには

(Jetpack Compose以前の手法です。Jetpack Compose内でWebViewを使用するためには、AndroidView関数を経由して、WebViewを生成する必要があります。詳細は別記事参照。) また、ChatGPTに聞いてみました。 WebViewでハイライトをするには、Javascriptを用いて…

EditViewでハイライトを動的に追加するには

(Jetpack Composeでは、TextFieldを用います。別記事参照) ChatGPTに聞いてみました。 TextViewまたはEditTextのSpannableStringオブジェクトの値を変更することでハイライトが付加出来るようです。 編集に関しては、表示させたメニューで色を指定するタイミ…