国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android使用SkinManager實現換膚功能的示例

2019-10-22 18:15:48
字體:
來源:轉載
供稿:網友

試著用鴻洋大神寫的SkinManager實現了android/81902.html">換膚功能。

一、配置

在app下build.gradle中添加依賴:

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

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

二、全局初始化

在自己創建的繼承application的類中添加:

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

這個類肯定要在清單文件<application/>節點配置的。

接下來還需要注冊。

三、注冊

在清單文件中添加權限:

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

四、命名規則

1、SkinManager命名規則是:前綴 + “_” + 后綴;

2、前綴、后綴的命名由開發者自行定義;

3、同屬性不同膚色前綴一樣,不同屬性前綴不一樣;

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

4、后綴根據膚色主題配置,每個主題所有屬性后綴一樣;

//例如:膚色有黑色、白色兩種主題,如果黑白定義為“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下創建背景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屬性,根據項目需要自行設置

六、布局引用

布局中引用直接設置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點擊事件實現換膚為布局,在頁面中:

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

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

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂温| 汉沽区| 文成县| 宁津县| 固原市| 将乐县| 长沙县| 常宁市| 济宁市| 柏乡县| 汶上县| 扶绥县| 望城县| 远安县| 建始县| 延津县| 启东市| 白城市| 乌鲁木齐县| 永州市| 禹州市| 开平市| 栖霞市| 桃园县| 宜君县| 泽普县| 五常市| 天柱县| 嘉荫县| 芒康县| 溧阳市| 金塔县| 印江| 静海县| 丽江市| 宜川县| 射阳县| 安远县| 资源县| 白河县| 德昌县|