android使用setTheme的方式實現主題切換

theme的意思即風格,在android中你可以理解成是一整套屬性的集合,設置了theme可以看做爲爲APP的一些全局的變量賦值,然後之後的界面顯示會使用這些值來顯示出相應的效果。
設置theme方式實現主題切換的詳細步驟在這篇文章已經有詳細描述,我就不再贅述了,這裏介紹一下設置theme方式實現主題切換的一些實現細節。

上邊那個博文中也提到了,設置theme要在設置activity的顯示內容之前。網上有人說是可以調用recreate方法重啓activity,但是重啓的時候有閃動並且當前的狀態也不太好保存,所以並不是好的解決方法。

設置theme的整體思路是正確的,當前的theme標記要保存在本地,每個activity啓動的時候在setContentView之前取出該標記並調用setTheme方法設置theme即可。而主題切換的功能其實是改變了這個保存的標記,但是爲了讓用戶能意識到主題已經切換了,在主題切換所在的activity就需要立即應用到這個已經變化了的主題。這裏有兩種方式:一種是暴力方式,即按照切換後的主題方案分別設置當前界面所有可見元素的屬性,因爲設置主題的界面通常只有一個所以一次設置之後不會有過多的這種繁瑣的操作;另外一種是使用fragment,fragment也可以設置theme,代碼如下:

@Override
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        final Context contextThemeWrapper = new ContextThemeWrapper(
                getActivity(), isDay ? R.style.day : R.style.night);
        LayoutInflater localInflater = inflater
                .cloneInContext(contextThemeWrapper);
        View v = localInflater.inflate(R.layout.fragment_layout, container,
                false);
        return v;
    }

如果你的主題切換設置界面是寫在fragment裏邊,只需要在改變了theme之後重新加載這個fragment就行了。
下邊是一個例子效果:
這裏寫圖片描述

另附一個demo下載地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章