Android 夜间模式changeskin小结

author csdn
最近公司的项目在做夜间模式,使用了鸿洋changeskin,一个非常好用的library,在这里总结一下使用过程中遇到的各种问题和解决办法。

用法

下载changeskin,作为module依赖至主项目,例如:

dependencies { compile project(':changeskin') }

或者直接添加依赖:

 dependencies { compile 'com.zhy:changeskin:3.0.0' }

ps:之前是添加了依赖,后来为了支持自定义 view,把整个 library 作为项目文件放进来了,不然识别不了自己的 view

1.Application中初始化

public class MyApplication extends Application { 
 @Override  public void onCreate()  {
  super.onCreate();  
  SkinManager.getInstance().init(this);
  }
} 

2.继承BaseSkinActivity让所有的需要换肤的界面的Activity,继承自com.zhy.changeskin.base.BaseSkinActivity。

3、对于需要换肤的资源命名使用skin开头比如你的某个控件的背景需要换肤:

<android.support.v4.widget.DrawerLayout  
android:background="@drawable/skin_main_bg" 
...  />

字体颜色:

<TextView android:id="@+id/id_tv_title"    
android:textColor="@color/skin_item_text_color" />

应用内换肤

1、准备资源apk这个就简单了,因为应用内换肤那么你肯定有多套资源,比如有一个背景图叫做:skin_main_bg,那么你可以准备一套皮肤资源,命名为:skin_main_bg_后缀

2、调用换肤API

SkinManager.getInstance().changeSkin("red");

参数传入你的后缀名即可。

需要注意的问题

1.凡是要后期生成的view都要inject一下,比如adapter中要inject,layout中有引用include的也要inject一下

  1. 多个属性的支持: skin:white:textColor|skin:orange:background

3.对于自定义view的属性的支持:因为library不能识别我的控件的属性,所以我的做法是,把library的内容放到项目内,然后在enum中添加自己的类型,比如:

ROUNDPROGRESSCOLOR("roundProgressColor") {
@Override public void apply(View view, String resName) { 
  if (view instanceof RoundProgressBar) { 
    int color = getResourceManager().getColor(resName); 
    if (color == -1) return;
    ((RoundProgressBar) view).setCricleProgressColor(color);
 } 
}
}

4.之前background 中没有支持 color,后来鸿洋做了修改,添加上了对 color的支持

BACKGROUND("background") { 
@Override public void apply(View view, String resName) { 
Drawable drawable = getResourceManager().getDrawableByName(resName); 
  if (drawable != null) view.setBackgroundDrawable(drawable);
  else {
     int color = getResourceManager().getColor(resName); 
     if (color == -1) return;
     view.setBackgroundColor(color);
  } 
 }
}

5.之前getDrawableByName不支持color修改后的代码支持color

 public Drawable getDrawableByName(String name) {
   try {  
        name = appendSuffix(name); 
        L.e("name = " + name); 
        return mResources.getDrawable(mResources.getIdentifier(name, DEFTYPE_DRAWABLE, mPluginPackageName)); }
 catch (Resources.NotFoundException e) { 
      try { 
          return mResources.getDrawable(mResources.getIdentifier(name, DEFTYPE_COLOR, mPluginPackageName));
       } catch (Resources.NotFoundException e2) { 
        e.printStackTrace();
        return null;  
        } 
      } 
}

6.头像加蒙版夜间模式中的头像加蒙版可以直接设置透明色,然后夜间模式设为黑色,就达到了夜间模式加蒙版的效果

7.还有一个情况就是,根布局中的skin属性不起作用,目前的解决办法是在包上一层布局,目前这种办法只是权宜之计

遇到的还未解决的问题

1.其实library中并没有对padding做限定,但是使用过程中遇到了几次,如果我的图片上.9.png或者是xml做的drawable的时候,设置了padding,加上夜间模式的属性之后padding就会失效。目前还没找到原因,待解决。

2.发现了另外一个问题,我的搜索栏是放到 header 中的,第一次没问题,之后当 header 隐藏的时候,好像SearchBar 的夜间模式就不能切换了,但是 SearchBar 不隐藏的时候是可以切换的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容