Android之主題(Theme)總結
在AndroidManifest.xml檔案中有<application android:theme="@style/AppTheme">,其中的@style/AppTheme是引用的res/values/styles.xml 中的主題樣式,也有可能是引用的 res/values-v11/styles.xml 或者 res/values-v14/styles.xml,這是根據執行此程式的手機系統來決定的,如果手機系統的API版本是11以上就是v11/styles.xml,以此類推。在values/styles.xml中你會發現AppTheme的主題樣式又是繼承自AppBaseTheme,而AppBaseTheme的父主題就各有不同了,你也可以從這個位置來自己修改主題,此文章主要就是來討論這個主題如何修改。
需要注意的是,做為初學者或者專門來研究主題(Theme),你最好是刪除values-v11和values-v14以及values-vXX,以免被這些東西所干擾。
主題的來源有三個:
1) 來自Android系統自帶的
2) 來自相容包的(比如v7相容包)
3) 你自己寫一個主題
這裡主要探討前兩者,自己寫主題不探討。
使用android系統中自帶的主題要加上“android:”,如:android:Theme.Black
使用v7相容包中的主題不需要字首,直接:Theme.AppCompat
在Android Studio中書寫主題時都會有自動提示,而在Eclipse不會有自動提示
解決辦法是不要寫“android:Theme.Black”,而是寫“@android:style/Theme.Black”這樣就會有提示
不要寫“Theme.AppCompat”,而是寫“@style/Theme.AppCompat”
因為 style(@android:style/Theme.Black) 與 theme(android:Theme.Black) 在使命上還是有區別的,所以在eclipse中書寫時為了出現自動提示,可以寫“@android:style/Theme.Black”,但是寫完了之後,記得手動的改為“android:Theme.Black”
現在看看有些什麼主題
系統自帶主題:
API 1:
android:Theme 根主題
android:Theme.Black 背景黑色
android:Theme.Light 背景白色
android:Theme.Wallpaper 以桌面牆紙為背景
android:Theme.Translucent 透明背景
android:Theme.Panel 平板風格
android:Theme.Dialog 對話方塊風格API 11:
android:Theme.Holo Holo根主題
android:Theme.Holo.Black Holo黑主題
android:Theme.Holo.Light Holo白主題API 14:
Theme.DeviceDefault 裝置預設根主題
Theme.DeviceDefault.Black 裝置預設黑主題
Theme.DeviceDefault.Light 裝置預設白主題API 21: (網上常說的 Android Material Design 就是要用這種主題)
Theme.Material Material根主題
Theme.Material.Light Material白主題
相容包v7中帶的主題:
Theme.AppCompat 相容主題的根主題
Theme.AppCompat.Black 相容主題的黑色主題
Theme.AppCompat.Light 相容主題的白色主題
Theme.AppCompat主題是相容主題,是什麼意思呢?
意思就是說如果執行程式的手機API是21則就相當於是Material主題,如果執行程式的手機API是11則就相當於是Holo主題,以此類推
相容包v7會被Google公司不斷升級:
比如 appcompat-v7-21.0 表示升級到向 API 21 相容
比如 appcompat-v7-23.2 表示升級到向 API 23 相容
在eclipse中只能看到 appcompat_v7 後面沒有跟API的版本號,如何識別呢?
可以在eclipse中展開v7專案的res資料夾,檢視有沒有values-21、values-23這樣的資料夾,最大數字就是API版本號了。
所以同樣是v7相容包,會有API版本號不同的區別,要注意。
所有能應用於應用程式主題都是以“Theme.”開頭
不是以“Theme.”開頭的就不是應用程式主題,而是用於某些區域性控制元件
比如“ThemeOverlay”主題,可用於 Toolbar 控制元件,這裡不做深入分析了。
比如“TextAppearance”主題,可用於設定文字外觀,這裡不做深入分析了。
比如在v7中有很多以“Base”開頭的主題,是一些父主題,不建議直接使用。
更多主題:
以下都是指“包含”,比如包含“Dialog”表示對話方塊風格
比如Theme.Dialog、Theme.Holo.Dialog、Theme.Material.Dialog、Theme.AppCompat.Dialog都是對話方塊風格
具體有沒有這種組合,你就在“自動提示”中來看就可以,提示有就有,沒有就沒有。
Black 黑色風格
Light 光明風格
Dark 黑暗風格
DayNight 白晝風格
Wallpaper 牆紙為背景
Translucent 透明背景
Panel 平板風格
Dialog 對話方塊風格
NoTitleBar 沒有TitleBar
NoActionBar 沒有ActionBar
Fullscreen 全屏風格
MinWidth 對話方塊或者ActionBar的寬度根據內容變化,而不是充滿全屏
WhenLarge 對話方塊充滿全屏
TranslucentDecor 半透明風格
NoDisplay 不顯示,也就是隱藏了
WithActionBar 在舊版主題上顯示ActionBar
很多主題在使用時會報錯,原因有很多,比如窗體必須繼承AppCompactActivity,或者要繼承ActionBarActiivty,或者要繼承FragmentActivity,或者需要手動指定寬高,或者需要提升最低API版本,或者需要更高版本的SDK,或者相容包版本不對等原因。
相關文章
- 面試題總結-Android部分面試題Android
- Android 日常開發問題總結Android
- 2018最新 Android 面試題總結(三)Android面試題
- 2019 Android 高階面試題總結Android面試題
- 2018 Android中高階面試題總結Android面試題
- Android Flutter混合開發問題總結AndroidFlutter
- Android學習: 疑難問題總結Android
- Android中Style和Theme資源Android
- Android中使用WebView遇到的問題總結:AndroidWebView
- 2019 必看 Android 高階面試題總結Android面試題
- android單元測試遇到問題總結Android
- Android Flutter混合開發問題總結(二)AndroidFlutter
- android webview總結AndroidWebView
- Android總結篇系列:Android ServiceAndroid
- Android之android:theme設定在Application 和 Activity的區別AndroidAPP
- Android中Service總結Android
- Android面試總結Android面試
- Android效能優化——效能優化的難題總結Android優化
- Android面試最新總結Android面試
- Android之SpannableString、SpannableStringBuilder總結AndroidUI
- Android鍵盤操作總結Android
- android IO流操作總結Android
- Android Handler面試總結Android面試
- hexo-theme-next主題設定Hexo
- flutter theme 主題樣式生成工具Flutter
- Android中的Style、Theme詳解以及發展史Android
- Flutter實戰之主題、國際化篇Flutter
- 2018中高階Android面試題總結上(附答案)Android面試題
- 問題總結
- Android開發經驗總結Android
- Android Sensor原始碼分析總結Android原始碼
- Android TV開發總結【RecycleView】AndroidView
- 20180521-Android-面試總結Android面試
- Android:巢狀滑動總結Android巢狀
- android混淆總結(基礎版)Android
- Android聲音相關總結Android
- Flutter 樣式基礎之 Theme 主題Flutter
- 「Dcat Admin 主題外掛」 Dcat-Theme