動(dòng)態(tài)換膚五(高級換膚)

前言

??上一章講了 Fragment 以及系統(tǒng)狀態(tài)欄、系統(tǒng)底部虛擬按鍵的換膚,這一章我們來完成自定義 View 的換膚以及字體換膚(字體樣式)。

上一篇文章地址:http://www.itdecent.cn/p/30815e811c7c

字體樣式換膚

??如何進(jìn)行更換字體樣式呢?首先,一般我們的字體樣式都是放在 assets 目錄下的,然后通過 Typeface.createFromAsset();方法返回一個(gè) Typeface,然后 TextView 有一個(gè)方法,setTypeface() 就可以設(shè)置字體的樣式了。
??首先我們在換膚框架里面加上下面代碼


image.png

image.png

??在 SkinResources 中添加如下代碼:

    public Typeface getTypeface(int resId){
        String skinTypeface = getString(resId);
        if(TextUtils.isEmpty(skinTypeface)){
            return Typeface.DEFAULT;
        }
        Typeface typeface;
        if(isDefaultSkin){
            typeface = Typeface.createFromAsset(mAppResources.getAssets(),skinTypeface);
        }else{
            typeface = Typeface.createFromAsset(mSkinResources.getAssets(),skinTypeface);
        }
        return typeface;
    }

??在 SkinThemeUtil 中添加如下代碼

    private static int[] TYPEFACE_ATTR = {
            R.attr.skinTypeface
    };
    /**
     * 獲取更換字體的 Typeface
     */
    public static Typeface getSkinTypeface(Activity activity){
        int[] resId = getResId(activity, TYPEFACE_ATTR);
        return SkinResources.getInstance().getTypeface(resId[0]);
    }

??然后我們在換膚的時(shí)候需要調(diào)用一下該方法,并修改其他代碼


image.png

??需要注意一下,字體的換膚一般都是全局性的字體換膚,所以我們在篩選 View 的時(shí)候要放寬一下條件


image.png

image.png

image.png

??這樣就能完成字體樣式換膚了
??為了能夠看清楚字體,我將 MainActivity 布局中某些控件的顏色改了一下。


換膚前

換膚后

自定義 View

??隨便寫一個(gè)自定義 View,放到 MainActivity 的布局里面。


image.png

??如圖,我放另一個(gè)圓在上面,然后顏色設(shè)置成了 @color/black,按理說應(yīng)該和還原按鈕的背景顏色一樣,換成一樣的顏色,但是...


image.png

??原因很簡單,就是因?yàn)槲覀儫o法知道用戶自定義 View 中自定義屬性的名字到底是什么,我們無法篩選出需要換膚的自定義 View。
??那么我們就提供一個(gè)接口,SkinViewSupport
/**
 * 解決自定義 View 換膚的問題
 */

public interface SkinViewSupport {

    void applySkin();
}

??然后,如果你的自定義 View 想換膚,就必須實(shí)現(xiàn)我這個(gè)接口,并且重寫換膚的方法,具體怎么換膚,由使用者自己來寫。
??然后修改 SkinAttribute 中的代碼


image.png

image.png

換膚前

換膚后

最后整理

思維導(dǎo)圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,100評論 25 709
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,353評論 0 17
  • 用到的組件 1、通過CocoaPods安裝 2、第三方類庫安裝 3、第三方服務(wù) 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,194評論 1 180
  • 沒人會真正的感同身受到你的痛楚,也沒人會真正的去在意你一路走來所遇過的坎與負(fù)過的傷,所以別再為了尋求安慰而四處同人...
    篤學(xué)青衿閱讀 170評論 4 2
  • 今天她坐上火車,第一次去他家,當(dāng)然是在他的“力邀”之下,沒辦法 ╮_╭ 她,身高155,體重52kg,35碼的腳;...
    第二十四號房間的貓閱讀 876評論 0 0

友情鏈接更多精彩內(nèi)容