言いたいことはそれだけか

KotlinとかAndroidとかが好きです。調べたことをメモします。٩( 'ω' )و

Android

Modifier.verticalScroll() を親に設定すると子のfillMaxHeight() が無視される仕組みを調べた

Android ComposeのModifier.verticalScroll()が親のcomposableに設定されていた場合に、子に Modifier.fillMaxHeight()を設定してもこれが無視される現象に遭遇した。どういった仕組みでそうなっているのか内部実装を読んだ時のメモを残す。 知りたいこと 例…

Pending Intentのrequest codeは注意が必要(PendingIntentの仕組み)

Notificationに設定するaction buttonで使うPending Intentについて、よくわかってなかった部分があったのでメモ。 現象 Notificationにactionを設定する際、Pending Intentを渡す必要があるが、複数のPending Intentで同じrequest codeを使いまわしていたら…

WorkManager.getInstance()に渡すContext

ちょっと気になったので調べたメモ。 Titleの通りWorkManager#getInstance()の引数のcontext1は何を渡すべきなのか、また何に使われるのか気になった。 developer.android.com 上記のAPI documentには Context: A Context for on-demand initialization. と…

「チームで育てるAndroidアプリ設計」を読んだ

[PR] 献本いただいた1「チームで育てるAndroidアプリ設計」を読んだので感想文です。 peaks.cc 全体を通して 本書は大まかに前後半に分かれていて、前半は新規開発について、後半は大規模チーム開発について、それぞれAndroidアプリ設計の勘所について述べて…

Datastoreのエラーハンドリングの仕組みを調べたメモ

Android JetpackのDatastoreがリリースされた。1 developer.android.com 非同期処理でread/writeができるshared preferenceみたいなものかというぼんやりした理解だったが、このつぶやきを拝見して SharedPreference 、ファイル IO がサイレントに失敗してて…

MotionLayoutでvisibilityを制御するときのメモ書き

MotionLayoutでvisibilityを制御するときにちょっと困ったのでメモを残す。 やりたいこと あるイベント契機でアニメーションを表示する イベントはコードからtrigger アニメーションとして画像を画面中央から上部に動かす(Twitterのお誕生日の風船みたいな…

Scoped Storageでパス指定してファイルにアクセスできなくなった

はじめに 見て見ぬふりをしてきたScoped Storageにハマったのでメモ書きを残す。 Android Q (10) から導入されたScoped Storage。「端末内部のfileやらのアクセス権限周りや保存領域が変わったんだろうなー」くらいの雑な理解で見て見ぬふりを続けてきたが思…

複数のsubscribersに対応したFlowとテストの書き方

MVVMアーキテクチャにおいて、一つのModelを複数のView Modelで共有している場合、あるイベントを複数のView Modelで同時に受け取りたいことがある。これをKotlin Coroutine Flowを使って書くとどうなるのかなぁと思ったのでやってみたメモ。テストも書いた…

Paging Library 3の内部実装読んだメモ書き

はじめに Paging Library 3が発表された際、Full Kotlinで書かれてCoroutineもたくさん使われているということで話題になった。せっかくなので内部実装を読んでみた時のメモを雑に残しておく。 今回みたバージョンは 3.0.0-alpha01 PagingLibraryをどう使う…

MotionLayoutの覚書き

はじめに MotionLayoutが発表されて随分経った。「Android Studio 4系が必須でMotion Editorが来るのを待っていた」という言い訳で長い間スルーしていたが、そろそろ4系が安定して来たという話をちらほら聞くのでちょっとさわってみた。結果、Motion Editor…

KoinのDIの仕組み

はじめに みなさん、Koinはお好きだろうか? KoinとはKotlin用の軽量DI Frameworkである。 insert-koin.io 基本的には下記の3 stepでお手軽にDIの仕組みを提供してくれる。 moduleの宣言 Koinのstart 任意の場所でinject Injectする際にinject()というcustom…

AndroidからGoogle Sign In経由、AWS Cognitoでuser管理してDynamo DBを操作する ~AWS Java SDKを添えて~

ふと、「そういえばNo SQLのDBって業務で関わったことないな」と思いついたのでAWS DynamoDBをさわってみることにした。 Androidから直接さわるためAWS Java SDKを利用したが、ググって引っかかる情報は結構古くてもう存在しないAPIを使っていたり、公式docu…

androidx.benchmarkの1.0.0がリリースされたので試してみる

Android Dev Summit 2019の下記のセッションで軽くふれられていた androidx.benchmark の1.0.0がリリースされたようなのでさわってみます。このセッションはbenchmarkの使い方を説明したものではないけど、色々と面白いのでおすすめです。 www.youtube.com …

ConstraintLayout 2.0でFlexboxLayoutとGridLayoutを代用する

はじめに ConstraintLayout 2.0から導入された Flow を使ってFlexboxLayoutやGridLayoutと同じようなことができるようになる。 androidstudio.googleblog.com developer.android.com こんな感じでできた。 (上がFlexboxLayoutっぽいやつ、下がGridLayoutっ…

Androidのdark theme

Androidのdark themeをさわってみたのでメモを残す。 Dark themeとは? 公式documentはこちら developer.android.com 電池の節約だったり、low visionなuser向けにより良いUIを提供することを目的に、黒背景のthemeがAndroid Q からサポートされた。 アプリ…

Activity Shared Element TransitionでActivityが多重起動されるとAnimationがおかしくなる

はじめに Activity Shared Element TransitionでActivityが多重起動されるとAnimationがおかしくなる現象を見つけて面白かったので調べてみた。 具体的に まずは下記のgifを見てほしい。リストアイテム押下時にわざと1秒のdelayを入れてstartActivity()して…

AppBarLayoutを使う時にlayout_behaviorをFragmentに持たせるとviewが重ねて表示される

困った問題に出会ったのでメモ。 AppBarLayoutがActivityにいて、layout_behaviorつけたscrollableなviewがFragmentにいる場合、AppBarLayoutはちゃんと動くんだけど、scrollするviewの方がAppBarLayoutと同じ高さからlayoutされるので隠れてしまう…みんな同…

Kotlin Bytecodeを読みたいけど、何から勉強したらいいかわからないあなたへ。ASMのドキュメントを読みましょう。

はじめに このblog postは半年以上下書き放置していて自分の中では旬がすぎた話題ではありますが、最近Android系日本語技術podcastであるdex.fmのep.66でbytecodeが話題になったので、勿体無い精神で公開します :pray: それではどうぞ。 Kotlin書いていると…

TabItemをxml layout fileに記述してもview hierarchyからfindViewById()できない理由

TabItem、xml layout fileに書いててもViewHierarchyに追加されないの知らなくて昨日すごく時間を無駄にしたhttps://t.co/hc8WyqfHV2— むーむー/Atsuko FUKUI (@muumuumuumuu) January 31, 2019 Tweetにリンクを貼っている通り、公式ドキュメントによると Ta…

TabLayoutでいい感じにアイコンをつけたい時のメモ

ViewPagerとかと併用してTabLayoutを使う場合に、特定のタブにアイコンを表示する時にどうすればいいかなーという時のメモ。1 今のところは Tab#setCustomView() でcustome layout resourceをセットするのが大体のケースにおいて現実解となりそう。 また、こ…

便利なTextInputLayoutとその内部実装

はじめに Material Designにいつの間にか入っていたTextInputLayoutが便利なのでメモを残す。 TextInputLayout とは 公式ドキュメント によると、TextInputLayout とは「テキストを入力する時にhintを隠す代わりにfloating labelを表示するEditTextをラップ…

RecyclerView in RecyclerViewだとAppBarLayoutがスクロールしないことがある

Nested Scroll(RecyclerView in RecyclerView)とAppBarの組み合わせでうまくいかないことがあったのでメモします。 前提 RecyclerViewが入れ子になってNested Scrollする画面で、 Parent RecyclerViewはvertical scroll Child RecyclerViewはhorizontal scro…

selectableItemBackgroundはBackgroundにセットしないと意図した挙動にならない話

タイトルが意味わからないことになっている はじめに AndroidはAPI Level 21 (Android 5.0 / Lollipop) からRipple Effectがサポートされ、これによりより良いタッチフィードバックをユーザに提供できることができる。ボタンなど、「もともとタップが想定さ…

Shared element transitionでリストの要素を並び替える

やりたいこと Fragmentを切り替えてReordering(要素を並び替え)する shared element transition の記事を見て楽しそうだったからやってみた。 medium.com 全く同じことをやっても楽しくないので、Fragment <-> Activityでやってみる。 できた いきなりだけ…

Android Frameworkのコードにbreakpointを止めるメモ

Android開発をしていると、Frameworkがどういう挙動をしているか調べたくなる時がある。そういう時はFrameworkのコードにbreakpointを置くんだけど、止まってくれたり止まらなかったりすることがあるので困っていた。 完全に理解した!と言いたいけど、ViewR…

StateListAnimatorを使ってXMLだけでAnimationをつける

こちらの記事を読んで「<selector> の中にobject animator埋め込めるの知らなかった!!すげー!!!!」となったので遊んでみたメモ。 android.jlelse.eu StateListAnimator AndroidにはStateListAnimatorというクラスがあって、Viewのdrawable stateによってAnimatio</selector>…

kotlin.concurrent.threadは新規threadが作成されるけどcurrent threadのgroupで動く

[2018.7.15 ご指摘いただき記事の最後に追記しました] あらまし 先日おもしろいTweetを見つけたのでちょっと調べてみたメモ。 別ActivityでUI操作の必要なマルチスレッド処理をしたいとき、runOnUiThreadを使わないとMarshmallowならクラッシュするけど、Ore…

RxTextView#textChanges()でdistinctUntilChangedする時にeventが流れない時がある

みんな大好きRxBinding1 ですが、ちょっとハマることがあったのでメモ。 RxTextView#textChanges() で EditText の入力イベントを監視する。その時に重複した入力をdistinctUntilChanged()で削ろうとしたら以降何もeventが流れない現象に遭遇した。 RxTextVi…

TransitionのShowcaseアプリを作って公開しました

はじめに 先日droid girls meetupに参加し、Animationのハンズオンを楽しんできた。 GoogleのオフィスでGooglerの方(Support libraryを作っている方)が講師というなんとも贅沢な回だった。 droidgirls.connpass.com そういえば業務でがっつりtransitionを…

Toolbarにセットしたheightが無視されるケース

まずはこちらのコード、どのような表示になるか考えながら読んでみてください。 (タイトルでネタバレしている気がするけど気にしないで!)