FloatingActionButtonのBackgroundTintにselectorを使うには
FloatingActionButton
にsetEnabled(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に書いた。
Github flowを始めた
4月末に会社をやめてからというもの、毎日家でコードを書いているか、アニメを見ながらコードを書く生活をしている。知らないことが多くて進みは良くないが、それでも着実にできあがりつつある。
縁あって5月末に一週間だけインターンさせてもらったのだが、その会社でGithub flowを習ったので趣味プロジェクトの開発にも取り入れることにした。Github実践入門を読んで知ってはいたのだが、当時は使うあてもなく、何がうれしいのかわからなかったので完全に忘れていた。
一人だけでやるので一般的なやり方とは違うかもしれないが、一回まわしてみて「こういう感じかな」というのがなんとなく見えてきたのでメモしておく。
- issueから優先度が高そうなものを拾って着手
- ローカルでブランチを生やし、コミットログの頭にとりあえずwipとつけてcommit & push
- new pull request
- PRのページにtodoチェックリストを雑に書いて、それぞれをタイトルにしてissueを立てる
- issue番号をつけてcommitするとissueページに関連コミットが紐づけられるのでうまあじ
- todoを全部倒したらmerge & delete!
今回は先に立てていたissueが雑すぎて細かいタスクが多くなってしまったが、手順4をやることで作業のボリューム感が(他の人にも)わかるので良いと思う。実際にやってみて気づくこともあるだろうし。
普通はmerge前に誰かにレビューしてもらったりするのだろうからPRの単位は小さい方がいいのだろうと思う。この次はテスト書いてCIにつっこんでーみたいなところをやってみたい。
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
- 作者: 大塚弘記
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (22件) を見る