WorkFactory を使って WorkManager の Worker を生成する
WorkerFactory を使うので Worker のコンストラクタでは任意の引数を取れる。 class MyWorker( context: Context, params: WorkerParameters, private val api: MyApi, private val dataStore: DataStore ) : CoroutineWorker(context, params)...
View Articleアプリ内から Google Play にレビューを投稿できるようになりました。
In-App Review APIは Java/Kotlin のほか、native code と Unity からも使えます。 In-App Review API のガイドラインを確認して利用しましょう。例えば レビューのUI(ドキュメントではカードと呼んでいる)を出す前に "Do you like the app?"のような意見を聞く質問を出してはいけない。...
View ArticleACTION_GET_CONTENT で複数の MIME type を指定したいときは EXTRA_MIME_TYPES を使う
画像を ACTION_GET_CONTENTで取りたいけれど、image/* ではなく image/png と image/jpeg だけにしたいという場合は EXTRA_MIME_TYPESを指定します。このとき type には */* を指定しておきます。 val intent = Intent(Intent.ACTION_GET_CONTENT) .setType("*/*")...
View ArticleKotlin でスプレット演算子を使うと enum の values() に値を追加したリストを簡単に作れる
以下のような Rank クラスがあるとして、 enum class Rank { GOLD, SILVER, BRONZE } ランクなしという意味の null を含むリストを作りたいとします。 ↓ 作りたいリスト val list: List<Rank?> = ... println(list) // [null, GOLD, SILVER, BRONZE] Rank の一覧は...
View ArticleDevFest 2020 で Material Design Components のカスタマイズについて話してきました。
資料はこちらです。 Android Studio 4.1 についてと、まとめの後のおまけにいくつかページを追加しています。MDC をカスタマイズするときは便利だと思うので、是非参考にしてください。
View ArticleAndroid 11 では ACTION_CREATE_DOCUMENT と ACTION_OPEN_DOCUMENT には 指定が必要
Intent.ACTION_CREATE_DOCUMENT および Intent.ACTION_OPEN_DOCUMENT を startActivityForResult() で呼び出す以下のコードは、targetSdkVersion が 29 (Android 10)までは問題なく動きます。 private fun createDocument() { val intent =...
View ArticleConstraintSet を使って Activity を再生成せずにレイアウトを切り替える
自分で縦横レイアウトを切り替えるので Manifest に設定を追加 <activity android:name=".MainActivity" android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"> ... </activity>...
View ArticleKotlin メモ : vetoable
vetoable変更を拒否(veto)するかどうかのコールバックを指定できる property delegate を返す。 fun main() { var value: Int by Delegates.vetoable(0) { property, oldValue, newValue -> newValue > 0 } println(value) // 0 value = 10...
View Article複数の nullable な mutable 変数の null チェック
nullable な mutable 変数 a と b があって、両方 non-null のとき何かしたいという場合、 これだとコンパイルエラーになる var a: String? = "Hello" var b: String? = "Android" fun main() { if (a != null && b != null) { println(a.length +...
View ArticleMaterialAlertDialogBuilder のボタンの色を変更する
non-Bridge なテーマで MaterialAlertDialogBuilder を使うと、ダイアログのボタンの色は colorPrimaryになります。 そのため colorPrimary に黒っぽい色を指定した DayNight テーマだと、Dark Mode のときにボタンの文字が見えないという状態になってしまいます。 <resources> <style...
View ArticlemutableStateOf() の 3 つの使い方
val mutableState: MutableState<String> = mutableStateOf("") val v = mutableState.value mutableState.value = "1" destructuring declaration val (value: String, setValue: (String) -> Unit) =...
View ArticleJupyter notebooks + Kotlin で移動平均を描画する(その1): lets-plot-kotlin で線を描画する
このエントリは Fintalk Advent Calendar 2020の7日目です。 今年は3つも割当たっているので、Covid-19 のデータで件数とその移動平均をグラフに描画する、というのを3回シリーズでやりたいと思います。 Jupyter notebooks + python でやる方法はいっぱい情報があると思うので、ここでは Kotlin でやっていきます。 Kotlin +...
View ArticleJupyter notebooks + Kotlin で移動平均を描画する(その2): krangl で csv データを操作する
このエントリは Fintalk Advent Calendar 2020の14日目です。 今年は3つも割当たっているので、Covid-19 のデータで件数とその移動平均をグラフに描画する、というのを3回シリーズでやりたいと思います。 Jupyter notebooks + Kotlin で移動平均を描画する(その1): lets-plot-kotlin で線を描画するJupyter...
View ArticleJupyter notebooks + Kotlin で移動平均を描画する(その3): 移動平均を計算する
このエントリは Fintalk Advent Calendar 2020の21日目です。 今年は3つも割当たっているので、Covid-19 のデータで件数とその移動平均をグラフに描画する、というのを3回シリーズでやりたいと思います。 Jupyter notebooks + Kotlin で移動平均を描画する(その1): lets-plot-kotlin で線を描画するJupyter...
View Articleandroid:fontFamily="sans-serif-medium"の文字の太さを動的に変更する
android:fontFamily に "sans-serif"または "sans-serif-medium"、android:textStyle に "normal"または "bold"を指定したときに生成される Typeface の weight, style, isBold は次のようになります。 <TextView ......
View ArticleDispatchers.Main.immediate ってなに?
Dispatchers.Main は MainCoroutineDispatcher です。 package kotlinx.coroutines ... public actual object Dispatchers { ... @JvmStatic public actual val Main: MainCoroutineDispatcher get() =...
View Articleと FragmentContainerView では Fragment のライフサイクルメソッドの呼ばれるタイミングが違う
動作確認は androidx.fragment:fragment-ktx:1.2.5 でしています。今後のバージョンで動作が変わる可能性があります。 fragment-ktx:1.2.5 で <fragment> を使うと FragmentContainerView を使うようにメッセージがでます。 このメッセージに従って FragmentContainerView...
View ArticleAnimator メモ
single object, single property → ObjectAnimator val animator = ObjectAnimator.ofFloat(view, View.ALPHA, 0f, 1f) single object, multiple property, parallel → PropertyValuesHolder + ObjectAnimator val...
View ArticleFragment.viewLifecycleOwnerLiveData で LiveDataが取れます
AndroidX の Fragment に getViewLifecycleOwnerLiveData()というメソッドがあります。 @NonNull public LiveData<LifecycleOwner> getViewLifecycleOwnerLiveData() { return mViewLifecycleOwnerLiveData; } これは...
View ArticleviewLifecycleOwnerLiveData を使って Fragment の onDestroyView() で自動で null がセットされる...
ViewBinding のドキュメントでは Fragment で使う時の実装はこのようになっています。 class LoginFragment : Fragment() { private var _binding: FragmentLoginBinding? = null private val binding: FragmentLoginBinding get() = _binding!!...
View Article