Luffy

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或者activity
    • page: fragment或activity的全路径
    • views: 是一个数组,每一项表示一个需要修改的view
      • id: 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 表示 GONE
        • children: 子view列表,可用来寻找没有设置id的view,以及listview这样含有重复id的view
          • index: 子view的位置
          • views: 同上面的 views
          • properties: 同上面的 properties
        • parent: 父view,也可用来选择没有设置id的view
          • views: 同上面的 views
          • properties: 同上面的 properties

在应用中使用Luffy

gradle依赖:

compile 'com.showjoy.android:luffy:1.0.0'

如果使用混淆,请加上以下这行:

-keep class com.showjoy.**.entities.** {*;}

源码已开源在https://github.com/ShowJoy-com/Luffy/,本文即是项目的中文文档,欢迎issue

  • 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);

标签: none

评论已关闭