fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

FloatingActionButtonのBackgroundTintにselectorを使うには

FloatingActionButtonsetEnabled(false)とかいう邪道なことをしようとしていて、状態に合わせて色を変えたかったのでcolorリソースのselectorを次のような感じで指定しようとした。

ColorStateList colorList = ContextCompat.getColorStateList(getContext(), R.color.selector);
fab.setBackgroundTintList(colorList);

ところが、これでいざenabledをtrueとかfalseに変えてもずっとenabled=falseの色のまま変わらなかった。ボタン自体の状態は変わっているようで、enabled=falseの時はリスナに登録したアクションは起きないし、trueの時はちゃんと起きる。

先にsetBackgroundTintMode(Mode)を呼ぶといいという情報を見て試したり、ViewCompat.setBackgroundTintList()を試してみたが効果はなかった。

調べているといろんなバグレポートが見つかるので、いまちゃんと動かないのかなと半ば諦めていたが、layoutリソースにapp:backgroundTint=@color/selectorで指定することで思った通りの動きになった。最初にandroid:backgroundTintを使おうとしてAPI Level 21以上でしか有効でないという警告が出たのでjavaソースのほうで解決しようとしたのが敗因だった。

appパッケージの方もサジェストされてほしいものだ。

(support-lib: 24.0.0で確認)

Custom ViewがRecyclerViewの何番目にあるかをEspressoでさがす

この記事はEspresso 2.2.2時点のもの。

ポイントは次の二つ。

  • Espresso.onView()にcustom viewのクラスを探すcustom matcherを渡す
    • BoundedMatcherの型引数にcustom viewのクラスを渡してやると便利
    • TreeIterables.breadthFirstViewTraversal(View)でcustom view以下の子ビューをトラバースしてマッチするやつを探す
  • custom assertionで受け取ったcustom viewの親がRecyclerViewなのでRecyclerView#getChildAt(int)に確かめたい子ビューの番号を渡してcustom viewと比較する

作例をGistに書いた。

Espresso for RecyclerView

Github flowを始めた

4月末に会社をやめてからというもの、毎日家でコードを書いているか、アニメを見ながらコードを書く生活をしている。知らないことが多くて進みは良くないが、それでも着実にできあがりつつある。

縁あって5月末に一週間だけインターンさせてもらったのだが、その会社でGithub flowを習ったので趣味プロジェクトの開発にも取り入れることにした。Github実践入門を読んで知ってはいたのだが、当時は使うあてもなく、何がうれしいのかわからなかったので完全に忘れていた。

一人だけでやるので一般的なやり方とは違うかもしれないが、一回まわしてみて「こういう感じかな」というのがなんとなく見えてきたのでメモしておく。

  1. issueから優先度が高そうなものを拾って着手
  2. ローカルでブランチを生やし、コミットログの頭にとりあえずwipとつけてcommit & push
  3. new pull request
  4. PRのページにtodoチェックリストを雑に書いて、それぞれをタイトルにしてissueを立てる
  5. issue番号をつけてcommitするとissueページに関連コミットが紐づけられるのでうまあじ
  6. todoを全部倒したらmerge & delete!

今回は先に立てていたissueが雑すぎて細かいタスクが多くなってしまったが、手順4をやることで作業のボリューム感が(他の人にも)わかるので良いと思う。実際にやってみて気づくこともあるだろうし。

普通はmerge前に誰かにレビューしてもらったりするのだろうからPRの単位は小さい方がいいのだろうと思う。この次はテスト書いてCIにつっこんでーみたいなところをやってみたい。

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)