override fun applySkin() {
mTextPaint.color = resources.getColor(R.color.text_color_input_hint)
background = resources.getDrawable(R.drawable.selector_login_edit_bkg)
setTextColor(resources.getColor(R.color.text_color_minor))
setHintTextColor(resources.getColor(R.color.text_color_input_hint))
}
…
}
4.资源定义
这里拿黑夜模式进行举例
添加资源目录
首先需要在build.gralde
文件的android节点中添加res-nigit
。
android {
…
sourceSets {
main {
res.srcDirs = [‘src/main/res’, ‘src/main/res-night’]
}
…
}
}
定义资源名
黑夜模式的资源需要在res_night
中加入同名的_night
后缀,如果未添加,默认会取白天模式的。
colors.xml也需要这样定义。
<?xml version="1.0" encoding="utf-8"?> #333333 #00574B #26B36D#ffffff
#cccccc
#909399
…
#333333>
#2d2d2d
…
#ED4E4E
#6C9DD9
…
#DE000000
#8A000000
#3f717171
#333333
在这里,推荐大家如果使用图标,最好用SVG图,除了占用空间小、缩放无质量损失以外,添加对于黑夜模式的时候,也只需要修改SVG文件色值即可达到。
三、原理
其实核心思想上面也提到了,就是继承Resource,覆写了getColor()
和getDrawable()
方法。
class CustomResources(val resources: Resources) :
Resources(resources.assets, resources.displayMetrics, resources.configuration) {
override fun getColor(id: Int): Int {
return SkinManager.instance.getColor(id)
}
override fun getDrawable(id: Int): Drawable {
return SkinManager.instance.getDrawable(id)
}
fun updateConfig(config: Configuration?, metrics: DisplayMetrics?) {
resources.updateConfiguration(config, metrics)
}
}
然后在SkinManager中通过SkinResources获取相应主题的资源。
class SkinResources {
…
fun getSkinColor(context: Context, id:Int): Int {
val resources = context.resources
val type = resources.getResourceTypeName(id)
val color = resources.getResourceEntryName(id)
val identifier = getIdentifier(context, nameConvert(color), type)
return when {
identifier != 0 -> resources.getColor(identifier)
else -> resources.getColor(id)
}
}
fun getSkinDrawable(context:Context,id:Int): Drawable {
val resources = context.resources
val type = resources.getResourceTypeName(id)
val drawable = resources.getResourceEntryName(id)
val identifier = getIdentifier(context, nameConvert(drawable), type)
return when {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://img-blog.csdnimg.cn/img_convert/8564433401eb510730318007b6482051.jpeg)
最后
希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!