2015年8月3日月曜日

【Android】勝手に背景色が変わってしまうパティーン

実は前回の記事を書いた頃から職場が変わって
前職ではメーカーで開発を行っていたが
今はサービス系の企業でAndroidアプリのコーディングを行っている.

前職は結構お堅い企業で仕様書とか依頼書とかが(鬱陶しいくらい)きっちりしてたんだけど
現職ではそういったところがちょっと抜けている.
どっちがいいのかは人次第なんだろうけど,
ソースコードのたらい回しもひどい.
その分,いろんな人のコーディングを1つのソースで見れるわけではあるが…

こういう実装方法があるのか!
があれば当たり
フフッなんでこんな実装してるの
ってのはまだいい方で
実際は拡張性のないゲロリンチョなソースコードになってたりする.

前置きっていうか愚痴はそこまでにしておいて,
今回謎な現象にブチ当たってしまったのでその解決方法をメモとして残しておく.
普通はこんな書き方しないだろって方法で起こった現象なのではあるが。。。
役に立つのだろうか.

現象は
Fragment内においてあるViewの背景色が勝手に変わってしまう
っていうもの.
View3つ(仮にA, B, Cとする)の背景色がFragment再描画と同時に変わってしまった.
これらのViewはレイアウトXMLで背景色を指定してあり,
3つとも同じ色を指定してある.
ソースコード上では一切背景色をいじっていない.
しかも再現するのは確認したところではAndroid4.04の端末のみ.

早速原因なのだが,
このA, B, Cの他にレイアウト上で同じ背景色を指定しているView Dがあり,
ソースコード上でこのView Dの背景色を変更しているのであった.
View Aの背景色だけ1ずらしてみるとView Aだけ影響を受けなくなった.

View Dの背景色変更がなぜ他のViewに影響するかは謎なのだが,
その背景色変更の書き方は綺麗ではない書き方をしていた.

具体的には
viewD.setBackgroundColor (Color.parse (getString (R.color.hoge)));
すごいよね,Colorリソースを文字列として取得して
それをColorオブジェクトにパースして
背景色に指定してある.

コードを見ると背景色に限らずこの書き方が散見された.

普通は
viewD.setBackgroundResource (R.color.hoge);
リソースが指定できないTextViewの文字色指定とかには
textView.setTextColor (getResource ().getColor (R.color.hoge));
と書くべきであり,

試しにそう書きなおしていくと現象の発生はなくなった.


上がってくる不具合報告,前任以前の既存ばかりで
ある意味勉強になる.
けどゼロから作り直したい感がすごい.

0 件のコメント:

コメントを投稿