其实,最近在项目中一直有一个问题困扰着我,为什么我的app颜色突然就全变成透明的了。是手机出问题了吗,颜色给丢了??测试问我这个问题,我还真是说不上的所以然来,只能说是机型问题了。嘿嘿。因为不断的在需求,所以也没有顾得上来管这个问题。
然后今天想起这个问题。就自己点了点测试了一下。其实是当点进了某一个特定的页面,然后在退出这个页面,其他所以页面的颜色都丢失了。为什么呢??不解啊。
上网查了一下。发现还真有这个问题,
detailTitle.getBackground().setAlpha(30);
竟然是因为设置了透明度这个属性
查了些资料才发现,导致本文所说问题的原因是:默认情况下,所有的加载同一资源的实例都共享一个共用的状态,如果你更改一个实例的状态,其余的实例都会接收到相同的通知。所以使用getBackground()获取到程序主色调资源(该主色调在colors.xml中定义)后,setAlpha(0)就将该资源的值修改为了透明,所以之后在程序中所有引用该资源的地方都变为了透明。getBackground()慎用啊,改一处就全改了。。。
局中多个控件同时使用一个资源的时候,这些控件会共用一个状态 如果你改变了一个控件的状态,其他的控件都会接收到相同的通知。这时我们可以使用mutate()方法使该控件状态不定,这样不定状态的控件就不会共享自己的状态了
getBackground().mutate().setAlpha(30); 酱紫。