Theme

標簽(空格分隔): Android


Android Support兼容包詳解###

Android的SDK版本很多,新的SDK版本包含了很多新的特性,為此Google官方提供Android Support Library package來保證高版本SDK的向下兼容。通過使用此包,可以讓擁有最新SDK特性的應用運行在API lever 4(即Android 1.6) 及更高版本的設備之上。

  • support-v4
    用在API lever 4(即Android 1.6)或者更高版本之上。它包含了相對更多的內容,而且用的更為廣泛,例如:Fragment,NotificationCompat,LoadBroadcastManager,ViewPager,PageTabStrip,Loader,FileProvider 等
compile 'com.android.support:support-v4:21.0.3'
//注意這里的是support,而下面的是appcompat!!!!
  • support-v7
    (V7已經是包含V4,gradle引用appcompat-v7包的時候就不需要引用v4了,)
    這個包是為了考慮API level 7(即Android 2.1)及以上版本而設計的,但是v7是要依賴v4這個包的,v7支持了Action Bar以及一些Theme的兼容。
compile 'com.android.support:appcompat-v7:21.0.3'
//v7 appcompat library 是包含在 v7 Support Libraries里面的一個包,正是此包增加了Action Bar 用戶界面的設計模式,并加入了對material design 的支持,是我們使用最多的一個兼容包。

使用appcompat之后,你的所有的Activity應該繼承自ActionBarActivity,而ActionBarActivity繼承自FragmentActivity,所以放心的使用Fragment;在AndroidStudio中用AppCompatActivity取代了ActinBarActivity

  • support-v13 (常用于平板開發)
    這個包的設計是為了API level 13(即Android 3.2)及更高版本的,一般我們都不常用,平板開發中能用到,

  • v17 Preference Support Library for TV
    看名字就知道了,此包主要是為了TV設備而設計。

  • Design Support Library
    Design Support Library除了帶來兼容版本的Material Design,還將流行的第三方開源庫進行了官方封裝。里面有一些MaterialDesign的控件或者特性是support-v7 沒有的,然后還有一些像cardview-v7 (com.android.support:cardview-v7:23.4.0)、recyclerview-v7 (com.android.support:recyclerview-v7:23.4.0)等等支持5.0以前的版本的兼容庫,每個庫都有自己特有的東西


Theme詳解###

V7包不但包含Holo Theme還有Material Design Theme喔####

compile ‘com.android.support:appcompat-v7:21.0.3’
//這其中的21代表API level 21推出的兼容包,(即在21API系統5.0推出的有5.0功能的版本)所以如果你引用的是21之前的版本,則默認這些Theme.AppCompat.Light是Holo風格的,從21開始的版本默認是Material風格

Holo Theme####

在4.0(即API14)之后推出了Android Design,才有了Holo風格。是在4.0或者以上的版本才是這樣的主題如:Theme.Holo.Light、 Theme.Holo.Light.DarkActionBar,
但是4.0的設計風格為了讓4.0之前的版本也能有這種風格就不得不引用v7包了,可是因為引了兼容包所以對應的主題就變成了Theme.AppCompat.Light、 Theme.AppCompat.Light.DarkActionBar;雖然名字不一樣,可是達到的效果是一樣的!!!如果你的程序最小支持的版本是4.0,那么可以不用考慮v7的兼容。

Material Design Theme####

5.0版本,Android推出了Material Design的概念;在5.0版本的手機有Theme.Material.Light、 Theme.Material.Light.DarkActionBar等主題;在5.0之前就對應Theme.AppCompat.Light、 Theme.AppCompat.Light.DarkActionBar等主題。

關于
No resource found that matches the given name '@style/Theme.AppCompat.Light'
的主題沖突問題請見以下的博客鏈接
//這是因為build-tools的版本與appcompat包或者support包版本不合,多半是后者比前者的版本高

[博客鏈接][1]
Theme.AppCompat 主題中提供了這些組件的 Material Design style:

EditText
Spinner
CheckBox
RadioButton
SwitchCompat
CheckedTextView

values-v11 values-v14###

values-v11代表在API 11+的設備上,用該目錄下的styles.xml代替res/values/styles.xml
values-v14代表在API 14+的設備上,用該目錄下的styles.xml代替res/values/styles.xml

其中API 11+代表android 3.0 +
其中API 14+代表android 4.0 +

values-v9 ,values-v8,values-v1這些也都是有的,只不過很少用罷了
之所以values-v11用的比較多,是因為3.0版本就是為pad而專門設計的,所以一般這個都需要一些單獨的配置
同時考慮到4.0以上的版本還是以手機為主,所以需要再添加一個values-v14
[1]: http://www.lxweimin.com/p/6ad7864e005e


在代碼中設置Activity的主題###

例如:setTheme(R.style.Theme_AppCompat);

Activity 是 ContextThemeWrapper的子類。而ContextThemeWrapper一個很重要的 屬性就是Theme。實例化一個View必須要 new View(Context context) 。因為View需要把Attributes交給Context的Theme來確定一堆屬性(在一個叫TypedArray的容器里)。比如當你沒有定義TextView的字體顏色時,他該顯示什么顏色。他要去問Theme。


下面說說style##

theme是全局的設計風格。style是局部的設計風格

系統是Light主題。而ToolBar需要Dark主題。可以給ToolBar單獨設置一個 app:theme="@style/Theme.AppCompat"
而只有toolbar是特例。其他view并不能使用這個。
所以谷歌推出了 ThemeOverlay 來解決這個問題

<LinearLayout
    android:theme="@android:style/ThemeOverlay.Material.Dark">
    
    <!-- Anything here will also have a dark theme -->
    
</LinearLayout>

這樣就可以給View設置單獨主題了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容