本开源库是基于我之前的一篇博文《Android主题换肤 无缝切换》,不知道原理的可以先看看。
出于易于集成的目的,我将其抽取出来,作为一个模块。提供简洁的 API,方便使用。
目前暂时没有发现兼容性问题,欢迎提供使用反馈。
更新日志:
1.v1.1.0:可以直接加载网络上的皮肤文件
效果图如下:
1. 使用方法:
- 添加依赖
compile 'com.solid.skin:skinlibrary:1.1.0'
- 让你的Application继承于SkinBaseApplication
- 让你的Activity继承于SkinBaseActivity,如果使用了Fragment则继承于SkinBaseFragment
- 在需要换肤的根布局上添加
xmlns:skin="http://schemas.android.com/android/skin"
,然后在需要换肤的View上加上skin:enable="true"
- 新建一个项目模块(只包含有资源文件),其中包含的资源文件的name一定要和原项目中有换肤需求的View所使用的资源name一致。
- 打包皮肤文件,放入assets中的skin目录下(skin目录是自己新建的)
- 调用换肤
- 从assets/skin文件夹
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
SkinManager
.
getInstance
(
)
.
loadSkin
(
"Your skin file name in assets(eg:theme.skin)"
,
new
ILoaderListener
(
)
{
@
Override
public
void
onStart
(
)
{
Toast
.
makeText
(
getApplicationContext
(
)
,
"正在切换中"
,
Toast
.
LENGTH_SHORT
)
.
show
(
)
;
}
@
Override
public
void
onSuccess
(
)
{
Toast
.
makeText
(
getApplicationContext
(
)
,
"切换成功"
,
Toast
.
LENGTH_SHORT
)
.
show
(
)
;
}
@
Override
public
void
onFailed
(
)
{
Toast
.
makeText
(
getApplicationContext
(
)
,
"切换失败"
,
Toast
.
LENGTH_SHORT
)
.
show
(
)
;
}
}
)
;
|
- 从网络
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
SkinManager
.
getInstance
(
)
.
loadSkinFromUrl
(
skinUrl
,
new
ILoaderListener
(
)
{
@
Override
public
void
onStart
(
)
{
Log
.
i
(
"ILoaderListener"
,
"正在切换中"
)
;
dialog
.
setContent
(
"正在从网络下载皮肤文件"
)
;
dialog
.
show
(
)
;
}
@
Override
public
void
onSuccess
(
)
{
Log
.
i
(
"ILoaderListener"
,
"切换成功"
)
;
dialog
.
dismiss
(
)
;
}
@
Override
public
void
onFailed
(
String
errMsg
)
{
Log
.
i
(
"ILoaderListener"
,
"切换失败:"
+
errMsg
)
;
dialog
.
setContent
(
"换肤失败:"
+
errMsg
)
;
}
@
Override
public
void
onProgress
(
int
progress
)
{
Log
.
i
(
"ILoaderListener"
,
"皮肤文件下载中:"
+
progress
)
;
dialog
.
setProgress
(
progress
)
;
}
}
)
;
|
详细的使用,请到示例项目中查看
2. 其他一些重要的api
- SkinConfig.isDefaultSkin(context):判断当前皮肤是否是默认皮肤
- SkinManager.getInstance().restoreDefaultTheme(): 重置默认皮肤
- dynamicAddView:当动态创建的View也需要换肤的时候,就可以调用dynamicAddView
3. 使用注意事项:
- 默认不支持状态栏颜色的更改,如果需要换肤的同时也要更改状态栏颜色,请到您的Application文件中加入
SkinConfig.setCanChangeStatusColor(true);
,布局文件中的根布局一定要加上 android:fitsSystemWindows=”true” 状态栏的颜色值来源于colorPrimaryDark
- 本开源库使用的Activity是AppCompatActivity,使用的Fragment是android.support.v4.app.Fragment
- 有换肤需求View所使用的资源一定要是引用值,例如:@color/red,而不是#ff0000
- 当感觉自带的换肤属性不够用时,可以把源码下载下来自己去添加attr
致谢:
本项目是基于Android-Skin-Loader这个开源库改进而来,再次对原作者表示感谢 Android-Skin-Loader
LICENSE
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Copyright
[
2015
]
[
FENGJUN
]
Licensed
under
the
Apache
License
,
Version
2.0
(
the
"License"
)
;
you
may
not
use
this
file
except
in
compliance
with
the
License
.
You
may
obtain
a
copy
of
the
License
at
http
:
//www.apache.org/licenses/LICENSE-2.0
Unless
required
by
applicable
law
or
agreed
to
in
writing
,
software
distributed
under
the
License
is
distributed
on
an
"AS IS"
BASIS
,
WITHOUT
WARRANTIES
OR
CONDITIONS
OF
ANY
KIND
,
either
express
or
implied
.
See
the
License
for
the
specific
language
governing
permissions
and
limitations
under
the
License
.
|