読者です 読者をやめる 読者になる 読者になる

AndroidStudioのプレビュー表示にView.isInEditModeが便利

AndroidStudioのプレビュー表示は便利だけど、稀に良い感じに表示してくれない時がある。例えばカスタムViewの初期化時にレイアウトパラムを変更したときだ。xml上のtools:visibilityなどを使いたくなるが、コード上なので使えないケースがある。 そういった時にView.isInEditModeをつかうと便利。 プレビューではisInEditMode == trueが適用されているので、if (isInEditMode) { return }などでプレビュー時には該当の初期化処理をしないなどすればよい感じにプレビュー表示してくれる。

経緯

私のケースでは全てのButtonのアニメーションを一括で変更したかった。 しかしスケールアップアニメーションを正しく表示するのにclicpChildren/clipToPaddingを全てのレイアウトで適用するのが面倒だったので、Viewから親のViewGroupのclicpChildren/clipToPaddingを全て書き換えるということを行った。(これはこれでどうなのかという話もあるが)

つい先日のDroidKaigi2017で発表があったSmoke and Mirrors in Androidでも同様の処理をしていたので真似をしてみたのだ。

github.com

しかし、clicpChildren/clipToPaddingを書き換えるとプレビュー上のViewが正しく表示されなくなった。 実行時は問題ないのだけどプレビュー時に正しく表示されない。 そこで if (isInEditMode) { return } を利用した。