こんな感じの赤いViewが2つあり
片方だけ色を青にします
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.sample_view_1).setBackgroundColor(Color.BLUE);
}
}
すると何故か両方青くなります
詳細
View#setBackgroundColor(int)で背景色を変更すると、レイアウトXMLで同じbackground色を指定した別のViewまで色が変更されてしまう。
Android4.1のXperiaでのみ発生が確認できており、おそらく端末のバグ。
必ず発生するわけではなく数回アプリを立ち上げると発生する。
再現した端末
- Xperia tablet Z SO-03E (Android4.1.2)
- Xperiaのなんかスマホ (Android4.1系)(これだけ機種調べそこねた)
非再現端末
- HTL21 (Android4.1.1)
- Xperia A2 SO-04E (Android 4.2.2)
- priori2 (Android 4.4.2)
- Xpelia Z Ultra SOL24 (Android 4.4.2)
- Xperia Z3 (Android 5.0.2)
- Nexus7 (Android 6.0.1)
- DM-02H (Android 6.0.1)
- HUAWEI P10 lite (Android 7.0)
- Nexus5x (Android 8.0.0)
似た投稿があった。こちらも根本原因はおそらく同じ。
View#setBackgroundColor(int) を使って色を変更したら関係ないViewまで色が変わる事案
解決方法
レイアウトファイルの方のbackgroundの記述を削除して対応した。
※ setBackgroundColor
で背景色がセットされるので、レイアウトの方に記載は必要なかった
他には若干面倒だがbackground
をdrawableにすることでも解決できる。