Android
内容 ベクター画像をデザイナーさんからもらって使っているけれど、ちょっとしたものは自分で書いて済ませてしまいたい。そんな時に。 四角形 <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> </vector>
課題 Jetpack Composeの実装中、Deploy Preview で端末に特定のComposeをデプロイしようとしたところ、以下のエラーが発生してデプロイできない。 androidx.compose.ui.tooling.PreviewActivity is not an Activity subclass or alias ArcticFox 2020.3.1 Co…
課題 マテリアルコンポーネントのBottomNavigationViewを使いたいが、一部のアイコンだけログインユーザーの画像にしたところ、すべてのタブに自動的にColorListが適用されてしまい画像が表示されない。どうすればよいか。 対応 BottomNavigationViewはタブ…
課題 既存アプリでMaterial Components 対応をするため、テーマを適用してみた。 <style name="AppTheme" parent="Theme.MaterialComponents.Light" /> <style name="AppTheme.NoActionBar" parent="Theme.MaterialComponents.Light.NoActionBar" /> すると、ボタンやテキストボックスの色がまとめて違うものになってしまった。 全部を個別に対応するのは大変なので段階的に対応したい。どうすればよいか。 対応 Theme.Mate…
内容 Android開発時にFragmentにHiltの @AndroidEntryPoint アノテーションを付けてインジェクションを行った際、requireContextを呼んだ場合など context の中身が ViewComponentManager.FragmentContextWrapper になる。 これの何が問題かというと、これま…
内容 Jetpack Composeはこれまで Kotlin 1.4.32が対応バージョンとなっていたが、1.0.0-beta09からKotlinの1.5.10に対応となったようだ。 android { buildFeatures { compose = true } composeOptions { kotlinCompilerVersion = "1.5.10" kotlinCompilerExt…
課題 Android Gradle pluginのバージョンを 7.0.0-beta03 にあげたところ、Gradle project sysnc faildが発生した。 エラーメッセージは以下のとおり Unable to find method ''void com.android.build.api.extension.AndroidComponentsExtension$DefaultImpl…
課題 Paging3でデータをセットしたはいいが空にしたいときにはどうすればいいか。 データを空にする PagingData.empty() をsubmitDataに渡してあげればよい。 adapter?.submitData(lifecycle, PagingData.empty()) 参考 stackoverflow.com
課題 APIのレスポンスを処理する際にkotlin.runCatchingを用いて結果をLiveData<Result>に格納しているが、まれにkotlin.runCatchingのブロック内で戻り値とは別にLiveDataにResultをセットすることがあった。 private val _hoge: MutableLiveData<Result<Hoge>> by lazy { Mutabl</result<hoge></result>…
課題 Room採用のためRealmDBからSQLiteにDBを移行するにあたり、BroadcastReceiverでIntent.ACTION_MY_PACKAGE_REPLACED イベントを受取って、そのタイミングでデータ移行プログラムを実行させるようにしたところ、一部の端末でデータが消えたとの報告があっ…
内容 ViewPager2を導入したら子FragmentのSwipeRefreshLayoutによる縦スワイプ中にグラグラと横スワイプが発生するようになった。 対策 SwipeRefreshLayout自身のイベントリスナーなどを探すと存在せず、無駄に時間を浪費することになる。 正解(?)はSwipe…
内容 最近リリースしたアプリのFirebase Crashlyticsをみると IllegalStateException が妙に増加していた。 メッセージをみると XXXFragment not associated with a fragment manager が書いてあるんだけど、 なんでこのタイミングで起こるの?という感じの…
FragmentStatePagerAdapterがdeprecatedになったのでViewPager2に移行作業中。 新しいFragmentStateAdapterからRecyclerView.Adapterを継承するようになったのだけど、 そのせいかPageコンテンツである子Fragmentの縦スクロール中に横スワイプが反応しやすく…
課題 Jetpack Composeでボタンを表示しようとしたが以下のエラーになってしまい表示できない。 NoSuchMethodError: No static method clickable Stacktraceはコピーするの忘れたのでありません。 対応 composeのバージョンが古い場合に発生。 自分の場合、1.…
Jetpack Compseで Compsableにpaddingの挙動が気になったのでちょっと確認してみた。 @Preview(name = "PaddingとWidthの確認", showBackground = true) @Composable fun BoxPreview() { Surface( modifier = Modifier .padding(20.dp) .width(200.dp) .heig…
試行錯誤の記録。慣れるまでが一苦労。Android Studioのレイアウトエディターとか完全に無用の長物になってしまったな。 アイコン付きテキスト 左にアイコンがあってテキストが続くようなよくあるケース @Composable fun TextWithIcon() { Row(verticalAlign…
課題 Retrofit2でレスポンスが空のsuspend関数を定義したい場合、以下の書き方だとエラーになる。 suspend fun like( itemId:Int ) :Unit // 単にCallを外しただけだとNG。Void, Unit?も同様 <クラス名> was null but response body type was declared as no…
タイトルも本文も何言ってるか分からないかもしれないけれどちょっと感動したので。 課題 ViewModel内の関数で、コルーチン内部でラムダを実行させたい。 このラムダは内部でRetrofitによるsuspend関数のAPI呼び出しを行うためsuspend関数の実行が必要である…
課題 こんなコードがあったとして // 1 getter val nickname: String? get() = _user.value?.nickname // 2 代入 val nickname: String? = _user.value?.nickname // 3 by lazy val nickname: String? by lazy { _user.value?.nickname } // 4 関数 fun nick…
課題 画面間の値渡しでBundleにEnumの値をセット、取得したい。どうすればよいか。 対応 EnumはSerializableなので Bundleの putSerializable メソッドが使える。 enum class Mark { HEART, SPADE, DIAMOND, CLUB } fun newInstance(): CardFragment { retur…
Android Gradle Plugin を4.0.0以上にするとD8/R8のDesugaringによってほぼすべての端末でJava8の追加APIが利用できるようになりますよ、という記事。 medium.com 設定は以下の通り。coreLibraryDesugaringEnabled と coreLibraryDesugaring を追加すれば良…
課題 Viewの表示・非表示を一括で管理するために androidx.constraintlayout.widget.Group でVIewをまとめたところ、そのGroup内のViewに対して 個別のVisibilityを設定しても反映されなくなった。 対応 Groupを使うのを諦め、ViewGroupで囲んでしまうのが無…
課題 これまでButterKnifeを使ってFragment及びViewHolderのView操作を記述してきたが、ViewBinding登場に伴いButterKnifeはdeprecatedになった。 ViewHolderをViewBindingを使って書き換えたいが、どうすればよいか。 対応 user.xmlとかいうユーザー一覧の…
課題 ViewModelのSavedStateHandleの特性について知りたい 結論 SavedStateHandleはプロセスがKillされた場合に状態が保持される アプリを正常終了した場合は状態がクリアされる SharedPreferenceの代替とはならない 調査 ViewModelの作成 まずViewModelを作…
課題 Android Studio 4.1 Beta 1がリリースされたため早速ダウンロードして起動してみたところ、 以下のエラーが出てビルドできなくなった。 Gradle sync failed: No such property: scope for class: com.android.build.gradle.internal.variant.Applicatio…
課題 UserをViewModelにLiveDataとして設定したが、Userオブジェクトのプロパティの変更を知りたい。どうすればよいか。 対応 LiveDataはvalueに値が代入されたタイミングでないとObserverに伝えてくれない。 参考サイトにはいくつかの対応案があるが、LiveD…
Toolbox Appとは ご存知の方も多いかもしれないが、Android StudioはJetBrainsの製品をベースに開発されている。 そのJetBransには多くの言語をサポートするためのそれぞれのIDE製品を提供しており、それらのIDEを管理するために Toolbox Appというものも出…
課題 これまで以下のような感じでメールを送信していたが、いつ頃からか'EXTRA_SUBJECT', 'EXTRA_TEXT'がGmailにセットされなくなった。 /** * メール送信用Intentを生成する */ fun getMailIntent(mailTo: String, subject: String, body: String): Intent …
課題 コンテンツのシェア機能利用時に Intent.createChooser したIntentに対し、EXTRA_INITIAL_INTENTS で ターゲットアプリごとに特別にカスタマイズしたLabeledIntentを渡していたが、Android10端末でシェア対象のアプリが数件しか表示されなくなった。 原…
課題 Androidの8.0からAutofill機能が追加され、メアドとパスワードを記憶、自動セットしてくれるようになったが、 新規入力画面ではメールアドレス、パスワードの保管を無効化したい。どうすればよいか。 対応 importantForAutofill を no にする <TextView android:importantForAutofill="no" /> 逆に yes</textview>…