CoderAlee / PaintedSkin

一款解决Android App 换肤框架,极低的侵入性与学习成本。
Apache License 2.0
166 stars 23 forks source link

在adapter中根据状态调整item中文字的颜色失效 #4

Closed yihuajia closed 3 years ago

yihuajia commented 3 years ago

adapter中存在动态调整文字颜色的逻辑,在换肤后,颜色会变为换肤后的颜色,但是再下拉刷新下列表,颜色恢复到之前的颜色。

CoderAlee commented 3 years ago

能否贴一下你再Adapter中对于Item的XML以及代码

yihuajia commented 3 years ago

xml中textview设置了一个默认的颜色#333333。adapter中的也很简单 if(xxxx) { 设置textview颜色为#333333 } else { 设置textview颜色为#999999 } 没有其它的操作了。

皮肤包里面只就是把#333333替换为另外一个颜色。目前也只会在上述场景下出现颜色没有成功替换

ps:理论上大佬这个库不会出现上述情况么?

CoderAlee commented 3 years ago

xml中textview设置了一个默认的颜色#333333。adapter中的也很简单 if(xxxx) { TextView.setTextColor(ThemeSkinService.getInstance().getCurrentThemeSkinPack().getColor(R.color.333)); } else { TextView.setTextColor(ThemeSkinService.getInstance().getCurrentThemeSkinPack().getColor(R.color.999)); }

当需要替换字体颜色时,需要使用ThemeSkinPack()获取当前所使用的的皮肤包获取对应颜色

yihuajia commented 3 years ago

xml中textview设置了一个默认的颜色#333333。adapter中的也很简单 if(xxxx) { TextView.setTextColor(ThemeSkinService.getInstance().getCurrentThemeSkinPack().getColor(R.color.333)); } else { TextView.setTextColor(ThemeSkinService.getInstance().getCurrentThemeSkinPack().getColor(R.color.999)); }

当需要替换字体颜色时,需要使用ThemeSkinPack()获取当前所使用的的皮肤包获取对应颜色

那是不是意味着,除了颜色外,如果还涉及到换其它资源的情况,也是需要使用到ThemeSkinPack来获取对应的资源来设置呢

CoderAlee commented 3 years ago

是的,所有需要动态设置的资源都需要先通过ThemeSkinService.getInstance().getCurrentThemeSkinPack() 获得当前所用皮肤包或复合皮肤包的代理类来获取资源

yihuajia commented 3 years ago

是的,所有需要动态设置的资源都需要先通过ThemeSkinService.getInstance().getCurrentThemeSkinPack() 获得当前所用皮肤包或复合皮肤包的代理类来获取资源

刚才试了下,可以了,感谢~~~~

CoderAlee commented 3 years ago

这种需要根据业务逻辑动态设置的资源目前还没有太好的方法委托给框架管理。另外这种Case还需要通过 ThemeSkinService.getInstance().subscribeSwitchThemeSkin()注册换肤监听,当皮肤发生变化时需要重新获取资源并设置

yihuajia commented 3 years ago

这种需要根据业务逻辑动态设置的资源目前还没有太好的方法委托给框架管理。另外这种Case还需要通过 ThemeSkinService.getInstance().subscribeSwitchThemeSkin()注册换肤监听,当皮肤发生变化时需要重新获取资源并设置

我还纳闷这个回调的使用场景

yihuajia commented 3 years ago

是不是还可以在这个的基础上处理多语言的语言包?

CoderAlee commented 3 years ago

多语言还是推荐使用不同的String.xml来实现,如果是根据不同的皮肤显示不同的文言则是可以的。