使用SkinManager實現(xiàn)換膚功能

試著用鴻洋大神寫的SkinManager實現(xiàn)了換膚功能沥阱。

一伐憾、配置
在app下build.gradle中添加依賴:

//換膚功能
compile 'com.zhy:changeskin:4.0.2'

這樣就配置好了篙螟,然后在程序入口進行初始化芹扭。

二、全局初始化
在自己創(chuàng)建的繼承application的類中添加:

//換膚sdk初始化
SkinManager.getInstance().init(this);

這個類肯定要在清單文件<application/>節(jié)點配置的脓匿。
接下來還需要注冊淘钟。

三、注冊
在清單文件中添加權(quán)限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在使用換膚功能的頁面onCreate()中注冊:

//換膚功能頁面注冊
SkinManager.getInstance().register(this);

有注冊當然有注銷啊陪毡,在onDestroy方法中取消注冊:

//換膚功能注銷
SkinManager.getInstance().unregister(this);

四米母、命名規(guī)則
1、SkinManager命名規(guī)則是:前綴 + “_” + 后綴毡琉;
2铁瞒、前綴、后綴的命名由開發(fā)者自行定義桅滋;
3慧耍、同屬性不同膚色前綴一樣,不同屬性前綴不一樣丐谋;

//例如:定義textColor屬性值為@color/skin_text芍碧,不同膚色color命名前綴均為skin_text

4、后綴根據(jù)膚色主題配置号俐,每個主題所有屬性后綴一樣泌豆;

//例如:膚色有黑色、白色兩種主題吏饿,如果黑白定義為“black”“white”踪危,
//那么不管是textColor還是background屬于黑色主題的后綴就是black,屬于白色主題的后綴就是white找岖。

五、膚色配置
1敛滋、在res/values/colors.xml中配置不同皮膚顏色:

<!--黑底白字(默認主題)-->
<color name="skin_text">#FFFFFF</color>
 
<!--黑底白字(黑色主題)-->
<color name="skin_text_black">#FFFFFF</color>

 <!--白底黑字(白色主題)-->
<color name="skin_text_white">#000000</color>

2许布、在res/drawable下創(chuàng)建背景shape:
skin_bg.xml(默認主題)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid
        android:color="#000000"/>
</shape>

skin_bg_black.xml(黑色主題)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid
        android:color="#000000"/>
</shape>

skin_bg_white.xml(白色主題)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid
        android:color="#FFFFFF"/>
</shape>

3、在src/drawable下導入不同主題圖片:

//圖片同樣以skin_src.png绎晃、skin_src_white.png蜜唾、skin_src_black.png命名

注意:這三種膚色配置非必須杂曲,1常用來配置textColor屬性、2常用來配置background屬性袁余、3常用來配置src屬性擎勘,根據(jù)項目需要自行設置

六、布局引用
布局中引用直接設置tag屬性颖榜。
textColor屬性設置:

 <TextView
            android:id="@+id/title"
            style="@style/MatchWrap"
            android:layout_marginTop="@dimen/dp_10"
            android:gravity="center_horizontal"
            android:tag="skin:skin_text:textColor"
            android:text="測試文字"
            android:textColor="@color/skin_text"
            android:textSize="@dimen/sp_24" />

background屬性設置:

<RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/skin_bg"
            android:tag="skin:skin_bg:background">

src屬性設置:

<ImageView
            style="@style/WrapWrap"
            android:src="@drawable/skin_src"
            android:tag="skin:skin_src:src"/>

注意:使用SkinManager棚饵,background屬性不支持@color設置,只能設置@drawable/...

七掩完、tag屬性
分為三部分:
第一部分skin是固定值噪漾,不可改變;
第二部分skin_text且蓬、skin_bg欣硼、skin_src是膚色配置前綴;
第三部分textColor恶阴、background诈胜、src是膚色配置對應的屬性;
此外冯事,tag屬性支持多屬性配置焦匈,用“|”分割,如:

<TextView
            style="@style/MatchWrap"
            android:layout_marginTop="@dimen/dp_10"
            android:background="@drawable/skin_bg"
            android:gravity="center_horizontal"
            android:onClick="changeClick"
            android:tag="skin:skin_text:textColor|skin:skin_bg:background"
            android:text="測試文字"
            android:textColor="@color/skin_text"
            android:textSize="@dimen/sp_24" />

同時設置了textColor和background屬性桅咆。

注意:第二部分(skin_text)不必與對應屬性值(android:textColor)的命名(@color/skin_text)完全一致括授,這里是因為我設置的skin_text為默認主題,如果你設置skin_text_default為默認主題岩饼,tag配置不變荚虚,屬性值應為@color/skin_text_default

八、換膚代碼
以第七項中的TextView點擊事件實現(xiàn)換膚為布局籍茧,在頁面中:

//聲明成員變量版述,默認false,默認主題為黑色
private boolean isChange;
//實現(xiàn)設置點擊事件
public void changeClick(View view){
        Log.e(TAG, "點擊改變");
        isChange = !isChange;
        if(isChange){
            SkinManager.getInstance().changeSkin("white");
        }else{
            SkinManager.getInstance().changeSkin("black");
        }
    }

使用changeSkin("后綴")就實現(xiàn)了換膚功能;

如果要在彈窗中添加換膚功能寞冯,可以在彈窗布局添加換膚配置后渴析,頁面代碼中調(diào)用SkinManager.getInstance()的injectSkin(View view)方法實現(xiàn)。

final Dialog dialog_skin = new Dialog(activity, R.style.MyDialogTheme);
View contentView = View.inflate(activity, R.layout.dialog_skin, null);
//實現(xiàn)對話框換膚
SkinManager.getInstance().injectSkin(contentView);
DialogSkinBinding binding = DataBindingUtil.bind(contentView);
dialog_skin.setCanceledOnTouchOutside(true);
dialog_skin.show();

注意:SkinManager中添加有sp緩存功能吮龄,會將膚色配置后綴緩存起來俭茧,如果測試配置過程有問題,先清理下緩存再試漓帚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末母债,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毡们,老刑警劉巖迅皇,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異衙熔,居然都是意外死亡登颓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門红氯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來框咙,“玉大人,你說我怎么就攤上這事脖隶”饽停” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵产阱,是天一觀的道長婉称。 經(jīng)常有香客問我,道長构蹬,這世上最難降的妖魔是什么王暗? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮庄敛,結(jié)果婚禮上俗壹,老公的妹妹穿的比我還像新娘。我一直安慰自己藻烤,他們只是感情好绷雏,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怖亭,像睡著了一般涎显。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兴猩,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天期吓,我揣著相機與錄音,去河邊找鬼倾芝。 笑死讨勤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的晨另。 我是一名探鬼主播潭千,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼借尿!你這毒婦竟也來了刨晴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎割捅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帚桩,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡亿驾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了账嚎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莫瞬。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖郭蕉,靈堂內(nèi)的尸體忽然破棺而出疼邀,到底是詐尸還是另有隱情,我是刑警寧澤召锈,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布旁振,位于F島的核電站,受9級特大地震影響涨岁,放射性物質(zhì)發(fā)生泄漏拐袜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一梢薪、第九天 我趴在偏房一處隱蔽的房頂上張望蹬铺。 院中可真熱鬧,春花似錦秉撇、人聲如沸甜攀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽规阀。三九已至,卻和暖如春啡捶,著一層夾襖步出監(jiān)牢的瞬間姥敛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工瞎暑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留彤敛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓了赌,卻偏偏與公主長得像墨榄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子勿她,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理袄秩,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 本文為原創(chuàng)之剧,轉(zhuǎn)載請注明出處郭卫。文章標題為夜間模式,其實我這里想說的不是什么夜間模式背稼,而是Skin庫贰军,有了Skin庫,...
    SupLuo閱讀 1,859評論 4 51
  • 前言: 本文主要講述如何在項目中蟹肘,在不重啟應用的情況下词疼,實現(xiàn)動態(tài)換膚的效果。換膚這塊做的比較好的帘腹,有網(wǎng)易云音樂贰盗,q...
    Yagami3zZ閱讀 13,632評論 5 51
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,409評論 0 17
  • 前言 隨著一款APP應用功能的不斷完善阳欲,用戶群體的不斷增多舵盈,APP的更新也就不僅僅局限于功能需求,如何做好良好的用...
    采蘑菇的里奧馬閱讀 27,869評論 43 146