1. 程式人生 > >總結一下Android中主題(Theme)的正確玩法

總結一下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主題(Theme)的正確

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

Android主題(Theme)總結

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

[轉]總結一下CSS的定位 Position 屬性

pub pos solid 修改 static blog style 分享 正常的 在CSS中,Position 屬性經常會用到,主要是絕對定位和相對定位,簡單的使用都沒有問題,尤其嵌套起來,就會有些混亂,今記錄總結一下,防止久而忘之。 CSS positi

Android主題知識

Android主題發展過程 在Android3.0之前,Android的介面不論是從系統還是空間的主題都是按鈕為白色,點選事件為黃色。現在看來很簡陋 Holo主題:Android3.0 (API11)開始,Google推出了Holo主題(就是我們印象中的黑底白字藍

簡單總結一下Java的集合

今天面試了深圳遞四方,奇蹟般的過了,在此紀念一下哈哈 技術面有不少問題沒答好,其中一個就是集合,用了這麼久的集合,腦袋裡面還是沒有一個系統的概念,當然要痛定思痛啦! 上一個集合框架圖 然後這個看起來有點混亂,先來一個簡化的 這個圖大概要能回答的出來,常用的還要

總結一下面試遇到的問題,一共面試了4家公司。

基本情況:本科畢業一年,面試職位:北京的Android開發職位。         1.搜狗:             (1)5種基本的Layout:relative,linear,frame,absolute,table.               (2) wait和s

總結一下linux的分段機制

  這篇文章主要說一下linux對於分段機制的處理,雖然都說linux不使用分段機制,但是分段機制屬於CPU的一個功能,即使linux不使用,也要通過程式碼想辦法繞過它,況且linux也使用到了分段機制中的某些功能。   分段機制主要功能只有兩點: 將實體記憶體劃分為多個段,讓作業系統可以使用

總結AndroidsurfaceView清屏的方式。兩種。(目的是為了自己方便回顧)僅供參考。

public static void qingP() {   Canvas canvas = sh.lockCanvas(null);   canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);   Paint p = new Pa

Android編譯過程總結android各種img檔案的作用以及系統啟動過程

編譯環境:ubuntu 10.04(或者更高)(windows平臺目前不被支援) 本文以編譯android2.3為例,64位作業系統 1、編譯環境的準備  (1)確保安裝有ubuntu系統或者虛擬機器 (2)安裝JDK1.6(對於Android2.3以上程式碼) $ sud

【搬運】總結一下面試被問到的jdk幾個版本之間的區別問題

1.5 1.自動裝箱與拆箱: 2.列舉(常用來設計單例模式) 3.靜態匯入 4.可變引數 5.內省 1.6 1.Web服務元資料 2.指令碼語言支援 3.JTable的排序和過濾 4.更簡單,更強大的JAX-WS 5.輕量級Http Server 6.嵌入式資料庫 Derby

Android開發藝術探索》學習總結7 Android為實現IPC時Binder連線池的使用

     學習基礎和材料來源於《Android開發藝術探索》;本篇主要簡單介紹一下在Android中實現IPC是Binder連線池的使用;原理性的東西介紹不多主要介紹一下使用場景和使用步驟;其實看懂下面兩張圖感覺就沒有什麼好說的;除了Binder連線池核心程式碼注意一下,

Android鎖屏密碼算解析以及破解方案

.net water mda 介紹 數據 watermark 悲劇 ids 界面 一、前言 最近玩王者榮耀,下載了一個輔助樣本,結果被鎖機了,當然破解它很簡單,這個後面會詳細分析這個樣本,但是因為這個樣本引發出的欲望就是解析Android中鎖屏密碼算法,然後用一種高效的方式

沙雕玩家歡樂多:細數明日之後的那些奇葩

明日之後怎麼玩?當你還在糾結怎麼把明日之後玩好成為KO級別大神的時候,這些玩家已經把明日之後玩出了新花樣,只有你想不到沒有他們做不的,如果做不到,那也只是時間問題。 儘管網易的這款明日之後上線之後評價一般,但是玩家熱度不減,如果玩吃雞和農藥是為了吃雞跟上王者,那麼大部分人玩明日之後是為了開心,畢

AndroidCalendar類的用法總結

jsb ews 寫法 需要 key data- minute bar 來講 Calendar是Android開發中需要獲取時間時必不可少的一個工具類,通過這個類可以獲得的時間信息還是很豐富的,下面做一個總結,以後使用的時候就不用總是去翻書或者查資料了。 在獲取時間之前要先獲

Android內存泄露與如何有效避免OOM總結

ignore create ui線程 nbsp weak solver 部分 ont 占用 一、關於OOM與內存泄露的概念 我們在Android開發過程中經常會遇到OOM的錯誤,這是因為我們在APP中沒有考慮dalvik虛擬機內存消耗的問題。 1

Android五大字符串總結(String、StringBuffer、StringBuilder、Spanna

ast 區別 底部對齊 不同的 without 能夠 pan world! span https://www.aliyun.com/jiaocheng/2861.html?spm=5176.100033.1.35.2ed56b03CbsYFK 摘要:String、Stri

Android實現短音訊和震動的一些總結

好長時間沒有寫部落格了,因為最近事情比較多。所以好長時間沒有寫部落格了。堅持是一件很辛苦的事情。但還需要努力。。。好了,閒話不扯了。因為最近專案中用到了相應的短音訊和震動的功能,所以這裡總結一下相應的內容! 本文知識點: 音訊中的一些知識和常用的API介紹;

AndroidBitmap的深入探討總結

由於最近公司對影象這一塊做文章比較多,而自己對於Bitmap的認識確實也比較淺顯,因此花些功夫研究一下Bitmap的使用以及原理,寫下該篇文章記錄一下學習過程。 關於系統Graphics的研究需要擱置一段時間了,原因是看了老羅的文章,發現自己的表達能力真是相差甚大,為了不誤人子弟,打算熟

AndroidTheme相關屬性

狀態列,導航欄 屬性 取值型別 描述 android:statusBarColor @color 設定系統狀態列顏色 android:navigationBarColor @color 設定系統導航欄的顏色

Android對話方塊右上角關閉懸浮按鈕的實現(總結

其實很簡單,步驟如下: 1、需要把對話方塊的預設背景改為透明。 方法:自定義Dialog的樣式。 <!--對話方塊透明背景--> <style name="Translucent_NoTitle" parent="android:style/Theme