總結一下Android中主題(Theme)的正確玩法

来源:http://www.cnblogs.com/zhouyou96/archive/2016/03/26/5323138.html
-Advertisement-
Play Games

在AndroidManifest.xml文件中有<application android:theme="@style/AppTheme">,其中的@style/AppTheme是引用的res/values/styles.xml 中的主題樣式,也有可能是引用的 res/values-v11/style ...


在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,或者相容包版本不對等原因。

 

使勁折騰吧!!!

 

寫得不好,請批評指正。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一首先下載Jar包 https://github.com/square/okhttp 如果使用android studio只需要加入依賴 二--下載一張圖片並顯示 使用的是hanlder的方式 也可以把網路請求寫為一個工具類, get方式 ...
  • 展示效果如下: 大家可以看到這個界面很簡單,其實就是UITableView的佈局, 但是難點是在於如何從網上下載這些圖片,下載之後應如何進行存儲! 我們一步一步進行解析,先從單線程(主線程)進行多圖片下載 我們佈局上的文字及圖片的地址從plist文件中進行讀取 根據結構,我們自定義一個數據模型文件 ...
  • 今天在寫項目的時候,遇到了一件令人抓狂的事情。 正如標題所示,被這個方法弄的團團轉。 -(void)scrollViewDidEndScrollingAnimation:是協議里的方法。 意味當動畫結束時調用。 動畫?為什麼會有動畫呢? setContentOffset: animated: -這一 ...
  • 該教程主要介紹如何用react native來開發iOS,所以首先,你需要有一臺mac,當然黑蘋果也是可以的~ 創建一個react native的項目只需要安裝以下五個組件~~(但....坑爹的是,不翻牆的話安裝慢成狗呀) 1. 安裝 xcode 做過ios相關開發的都知道這個,作為ios開發的首席 ...
  • 廣播的概念 現實中:我們常常使用電臺通過發送廣播發佈消息,買個收音機,就能收聽 Android:系統在產生某個事件時發送廣播,應用程式使用廣播接收者接收這個廣播,就知道系統產生了什麼事件。Android系統在運行的過程中,會產生很多事件,比如開機、電量改變、收發簡訊、撥打電話、屏幕解鎖 廣播接收者的 ...
  • 本篇主要講述在 OC 開發中主要涉及到的運行時機制: 運行時的工作: 運行時在 OC 中的工作:OC 語言的設計模式決定了儘可能的把程式從編譯和鏈接時推遲到運行時。只要有可能,OC 總是使用動態的方式來解決問題。這意味著 OC 語言不僅需要一個編譯器,同時也需要一個運行時系統來執行編譯好的代碼。這兒 ...
  • Atitit.反編譯apk android源碼以及防止反編譯apk 1.1. Tool apk逆向助手1 1.2. 二、使用dex2jar + jd-gui 得到apk的java源碼1 1.3. 用命令(dex2jar.bat classes.dex)得到一個 jar文件1 2. Apk文件的結構2 ...
  • 一個但凡涉及到用戶信息的應用,總少不了設置用戶圖像這個小功能。之前做這塊的時候只是簡單的複製粘貼導致最近再做這個功能的時候,卻發現問題很多,拍照及相冊選擇後啟動系統裁剪要不崩潰要不就是沒有返回數據,今天好好梳理一下這個功能。 調用系統拍照界面: 調用系統相冊界面: 這裡補充一下,很多網友都說andr ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...