Luffy
是Android上一个无侵入的样式动态修改库。
Luffy
通过配置来修改指定view的样式,这个配置需要自己从服务端获取。
配置里包含了需要修改的view id以及样式,没有设置id的view也可以通过设置id的view的父view和子view一层层来找到。
view的id可通过apk反编译后的 /res/values/public.xml
找到,里面存储了name和id的对应列表。
配置示例
[
{
"version": "1.9.1.1",
"style": [
{
"page": "com.showjoy.shop.module.user.UserFragment",
"views": [
{
"id": "0x7f0e02cb",
"properties": {
"type": "text",
"text": "test",
"textColor": "#ff0000",
"background": "#ff0000",
"textSize": 20,
"image": "http://dsdsdd.png",
"visibility": 0
}
},
{
"id": "0x7f0e02cc",
"properties": {
"children": [
{
"index": 1,
"views": [
{
"id": "0x7f0e02cb",
"properties": {
"type": "text",
"text": "test",
"textColor": "#ff0000",
"textSize": 20,
"visibility": 0
}
}
]
}
]
}
}
]
}
]
}
]
- 1、 这是一个数组,每一项给指定的版本使用,因为每个版本的view id 可能不一样,层级也不一样。
- 2、字段
style
是一个数组, 每一项表示一个页面,fragment或者activitypage
: fragment或activity的全路径views
: 是一个数组,每一项表示一个需要修改的viewid
: view的id,十六进制表示properties
: view的属性type
: view类型,目前支持 “text” or “image” or “view”text
: TextView的文字内容textColor
: TextView的文字颜色 “#ff0000”textSize
:TextView的文字大小, ‘20’background
:view的背景色image
: 图片链接,不支持本地图片visibility
: 0 表示 VISIBLE, 4 表示 INVISIBLE, 8 表示 GONEchildren
: 子view列表,可用来寻找没有设置id的view,以及listview这样含有重复id的viewindex
: 子view的位置views
: 同上面的views
properties
: 同上面的properties
parent
: 父view,也可用来选择没有设置id的viewviews
: 同上面的views
properties
: 同上面的properties
在应用中使用Luffy
gradle依赖:
compile 'com.showjoy.android:luffy:1.0.0'
如果使用混淆,请加上以下这行:
-keep class com.showjoy.**.entities.** {*;}
源码https://github.com/ShowJoy-com/Luffy/
- 1、如果要修改图片,首先请设置 image adapter
Luffy.getInstance().setStyleImageAdapter(new IStyleImageAdapter() {
@Override
public void setImageUrl(View imageView, String imageUrl) {
//do sth like below...
if (imageView instanceof SHImageView) {
((SHImageView)imageView).setImageUrl(imageUrl);
}else if (imageView instanceof ImageView) {
((ImageView)imageView).setImageBitmap(ImageUtils.getNetBitmap(imageUrl));
}
}
});
- 2、调用
parse
来解析配置
Luffy.getInstance().parse(context, configuration);
- 3、调用
doStyle
来改变样式,你可以在onresume的结尾调用它。大部分都会有baseFragment 和 baseActivity 或类似的类,只要在这样的基类的onresume的结尾调用即可。
Luffy.getInstance().doStyle(activity);
//or
//Luffy.getInstance().doStyle(fragment);
赏一个 您的支持是对我最大的鼓励。加班再忙,也要熬夜继续码字分享! 码字辛苦 赏个五毛 支持: 微信支付 支付宝
好人一生平安 谢谢!
微信支付 支付宝用 [微信] 扫描二维码打赏
用 [支付宝] 扫描二维码打赏