前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Jetpack Compose:TopAppBarとPullToRefreshContainerがうまく連動しない

課題 androidx.compose.material3:material3 を 1.2.0 にしたところ、TopAppBarとPullRefreshがうまく連動して動作しなくなった(TopAppBarDefaults.exitUntilCollapsedScrollBehaviorの場合に下にスクロールしてもTopAppBarが降りてこない)。どうすればよ…

Jetpack Compose:特定の条件のときだけClickableにしたい

内容 あるコンポーサブルをにclickable属性を付与したいが、条件によってはoffにしたい。 クリックイベントを空 {}にしてもタップエフェクトが発生してしまう。どうすればよいか。 対応 Modifier.clicable()のenabled パラメータを使う @Composable fun Some…

Jetpack Compose:Tab, Pagerでページが変更されたことを検知する

内容 TabLayoutとPagerの組み合わせはAndroidではお約束だが、Tab(TabRow, TabColumn)とPager(HorizontalPager, VerticalPager)それぞれのComposableにはページが変更された、といういい感じの関数をセットする方法がない。どうすればよいか。 対応 Tab側…

Duplicate class対応:Google Play Coreライブラリの分割

内容 androidx.navigation関連のライブラリを2.6.0にあげたところDuplicate classエラーが発生した。 > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable > Duplicate class com.google.android.play.c…

PagingDataのテストデータを作成する

内容 Jetpack ComposeでPagingライブラリのレスポンスであるFlowを使ったComposableを Preview、テストしたい。どうすればよいか。 対応 Version 3.0.0-alpha04 から PagingData.from(List<T>) が使えるようになったのでこれを使う。 // 本の一覧があるとする v</t>…

BuildConfigが生成されない

内容 Android Gradle Pluginを8.0.0にアップデートとしたところ、BuildConfigの部分がコンパイルエラーになった。 コンパイル時にBuildConfigが生成してくれていないようである。 原因 BuildFeatures.ktを見るとbuildConfigのデフォルト値がfalseになってい…

Iconコンポーサブルをtintを指定せずに使いたい

内容 アイコンのSVGデータなのでIconコンポーサブルを使って表示したいが、SVGデータが2色以上になっていて、 Iconコンポーサブルを使うと1色になってしまい、正しく表示されない。どうすればよいか。 対応 tint(色付) をColor.Unspecified (不特定)にす…

Jetpack Compose:TextのmaxLines指定時に表示した文字列と隠れた文字列を知るには

内容 コンテンツをリスト表示する際に、記事などの長文を部分表示したい場合に maxLinesパラメータを使って表示を制限するが、現在どこまで文字列が表示されているかを知りたい。どうすればよいか。 対応 TextViewの場合にはTextUtils.ellipsize() という関…

KMMチュートリアル中にハマった箇所

内容 Kotlinの公式サイトにあるKMMのチュートリアル Get started with Kotlin Multiplatform Mobile を進めていくうち、2023年1月20日現在で動かない箇所があったのでそのメモと対策。ある時期だけ意味をなすと思われる消費期限のありそうな記事。あと使用し…

Jetpack Compose:LazyColumnのスクロール位置が先頭に戻ってしまう

内容 Paging3とLazyColmnを使用して一覧を表示しているが、画面遷移して戻るとスクロール位置が先頭に戻ってしまう。どうすれば良いか 補足 以前同じ問題を対処するため以下の記事を書いたが、不完全だったのと個人的により良い方法が見つかったため改めて。…

Jetpack Compose:Snackbarの色を指定する

課題 Jetpack ComposeでSnackbarを表示しようとしたら想定とは違った色で表示された。色を指定するにはどうすればよいか。 対応 SnackbarではColorsで指定した色がデフォルトで使われるのでそれを変更する手もあるのだが、ちょっと加工して使われるので、こ…

Jetpack Compose:BOMによるバージョン指定

内容 Jetpack Compose関連のライブラリのバージョン指定をこれまで個別に行なってきたが、Firebaseと同様にBOM(Bill of Materials)が提供されるようになった。依存関係をカバーしてくれるので早速使っていきたい。 対応 基本となる設定を確認。既に書いて…

Firebase CrashlyticsのエラーがAndroid Studioで参照できるようになった件

内容 Android StudioのElectric Eelから、App Quality Insights で Firebase Crashlyticsに記録された内容が参照できるようになった。 対応 Android StudioにFirebase Crashlyticsで使っているアカウントでログインするだけ。既に別アカウントでログインして…

Android : Compose : TextStyleを効率的に定義する

課題 TextStyleを使って文字コードやフォントサイズ、色などを指定できるが、画面ごとに微妙に変わることがあり、その度にスタイルを作っていくと数が増え過ぎてしまう。どうすればよいか。 回答 TextStyle.copy()を使おう。 実践例 メインで使うテキストカ…

Android: Fragment内のComposeでスクロール位置を復元する

追記 新しい記事を書いたのでこちらをご参考ください。 takerpg.hatenablog.jp 内容 Fragment内に ComposeVIew を作成し、LazyColumn でリストを表示したが、画面遷移から戻るとスクロール位置が元に戻ってしまう。 どうすればよいか。 TODO まず、ComposeVi…

Android: RoomのアノテーションプロセッサをKSPに変更する

内容 Kaptに代わるアノテーションプロセッサとして登場したKSP。Roomが対応しているので適用する。 対応 app/build.gradleを編集する。 変更前 dependencies { val room_version = "2.4.2" implementation("androidx.room:room-ktx:$roomVersion") kapt("and…

Android: LazyColumn(LazyVerticalGrid)にヘッダー、フッターを表示する

内容 LazyColumnで一覧を表示する際にローディングのフッターを表示したい。どうすればよいか。 対応 LazyColumn、LazyVerticalGridなどで一覧を表示する場合、通常は各Scope関数であるitemsに一覧データを渡してアイテムごとに処理を行うが、単にLazyColumn…

Android: Twitterアプリ経由でログインできない(解決済み)

内容 Twitterアカウントでのログインを可能にしているアプリで、Twitterアプリのバージョンを 9.54.0-release.0 の場合に 認証トークンを取得できずにログインできなくなる。 対応 Twitterアプリのバージョンを 9.54.1-release.0 にアップデートする。 感想 …

Android: LazyVerticalGridでPaging3を使えるようにする

追記 https://developer.android.com/jetpack/androidx/releases/paging#1.0.0-alpha19 1.0.0-alpha19ですべてのLazyLayoutに対して利用可能な低レベルの拡張メソッドが提供されるようになっため、以下の対応はすでに不要となっている。 内容 LazyVerticalGr…

Android:desugar_jdk_libsを1.2.0に更新する

内容 com.android.tools:desugar_jdk_libsを1.2.0に更新したところ、以下のエラーに遭遇した。どうすればよいか。 Unsupported desugared library configuration version, please upgrade the D8/R8 compiler 対応 Android Gradle Pluginのバージョンを上げ…

Android:Compose:Modifier.weightについてのメモ

内容 Modifier.weightの使い方について迷った箇所があったのでまとめておく Modifier.weightの仕組み ある範囲内(Row, Columnなど)に並べられたComposableの幅を比率で確保するための仕組み weightを付けなかったComposableはそのまま描写される weightの…

Android:okhttp3で画像データ取得時にエラーが発生する

内容 Coilのバージョンを 1.4.0 から 2.1.0 に上げたところ、一部のバナー画像が表示されなくなった。 調査 エラーは以下のようなもので、レスポンスヘッダーのcontent-disposition に無効なキャラクタが含まれているようだ。filenameの「バナー」の部分だろ…

Android: WebViewで発生したエラー一覧

内容 WebViewでページをロードした際に WebViewClient.onReceivedError で拾ったエラーのリスト。 新しいものを見かけた場合には随時追加したい。 Description errorCode description 内容 -1 ERR_FAILED -1 ERR_HTTP2_PROTOCOL_ERROR サイトに接続できない …

Jetpack Compose : TextFieldにdisabledTextColorを適用するには

内容 TextFieldをdisabledな状態にしたい。どうすればよいか。 対応 enabledパラメータをfalseにする。基本はこれだけで、フォーカスが当たらなくなり、編集不可になる。 // 抜粋 TextField( enabled = false ) 色が変わるようにする enabled=falseになった…

twitter-kit-androidを使ってツイートしようとするとDM送信画面が起動する

内容 アプリからのツイートをtwitter-kit-androidライブラリを使って行っているが、最近TwitterアプリのDM送信画面が起動するようになったので調査する。 調査 TwitterアプリのIntentFilterを確認する ツイートにはIntent.ACTION_SENDを使用しているので、本…

Android: android gradle pluginを7.0.4から7.1.1にアップデートする

内容 少し前からGradle 7.1.1にアップデートしろとの案内が出ていたが、対応できずにいたものをまとめて対応。 同じようなタイミングでターゲットSDKも変えたのでもしかしたらそちらの影響もあるかも。 基本的にはUpgrade Assittantが勝手にやってくれるが、…

次期Android SDKはTiramisuに

Android 9.0 (Pie)以降、SDK Platformに名前がついていなかったが(あったのかもしれないが)Tで復活したようだ。 Tiramisuだそうな。勝手な予想だけど誰かの強い意志が働いてそうな気がするw ちなみにAndroid Studioにもアルファベット順にコードネームが…

Android StudioでViewBindingがRun App後にエラー表示される件

課題 アプリ開発でViewBindingを使っているが、Run Appしてアプリを実行したあとでエディタのViewBindingに関する部分がコンパイルエラー扱いになる場合がある。どうすればよいか。 対応 対応というか解決してないんだけど、とりあえずGradleと同期するとコ…

Android : bindingAdapterPositionとabsoluteAdapterPositionの違い

課題 RecyclerView.ViewHolderのgetAdapterPositionがdeprecatedになったので、getBindingAdapterPositionかgetAbsoluteAdapterPositionのどちらかに変更する必要がある。どちらを選択すればよいか。 結論 bindingAdapterPositionはadapterごとの位置情報を…

Android:Jetpack ComposeでNoto Sans JPフォントを使えるようにする

追記 Issueが解決され、記事になっていた。今後は includeFontPadding=falseがデフォルトで適用されるようになるため 本記事の問題は影響しなくなるだろう。 medium.com 課題 これまでアプリでGoogle FontsからNotoフォントをダウンロードして使っていたが、…