1. 程式人生 > >android 系統自帶主題樣式及自定義主題樣式

android 系統自帶主題樣式及自定義主題樣式

From: http://blog.csdn.net/dawanganban/article/details/17732701

http://www.cnblogs.com/bluestorm/archive/2012/07/12/2588724.html


Android系統自帶樣式(android:theme)(轉)


android:theme="@android:style/Theme.Dialog" : Activity顯示為對話方塊模式


android:theme="@android:style/Theme.NoTitleBar" : 不顯示應用程式標題欄


android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不顯示應用程式標題欄,並全屏


android:theme="Theme.Light ": 背景為白色


android:theme="Theme.Light.NoTitleBar" : 白色背景並無標題欄


android:theme="Theme.Light.NoTitleBar.Fullscreen" : 白色背景,無標題欄,全屏


android:theme="Theme.Black" : 背景黑色


android:theme="Theme.Black.NoTitleBar" : 黑色背景並無標題欄


android:theme="Theme.Black.NoTitleBar.Fullscreen" : 黑色背景,無標題欄,全屏


android:theme="Theme.Wallpaper" : 用系統桌面為應用程式背景


android:theme="Theme.Wallpaper.NoTitleBar" : 用系統桌面為應用程式背景,且無標題欄


android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" : 用系統桌面為應用程式背景,無標題欄,全屏


android:theme="Theme.Translucent : 透明背景


android:theme="Theme.Translucent.NoTitleBar" : 透明背景並無標題


android:theme="Theme.Translucent.NoTitleBar.Fullscreen" : 透明背景並無標題,全屏


android:theme="Theme.Panel ": 面板風格顯示


android:theme="Theme.Light.Panel" : 平板風格顯示

還記得在Android菜鳥的成長筆記(3)中我們曾經遇到了一個問題嗎?"這個介面和真真的QQ介面還有點不同的就是上面的標題myFirstApp,怎麼去掉這個標題呢?",當時我直接在AndroidMainfest.xml中添加了一個屬性:

  1. android:theme="@android:style/Theme.NoTitleBar"

可能有的朋友就會迷惑了,為什麼添加了這個屬性就可以了。這一篇文章將讓我們一起翻開Android系統原始碼來揭開困擾大家的關於主題使用以及自定義的謎團。

一、樣式(Style)與主題(Theme)

在Android的應用的資原始檔中有一個style.xml檔案,這個檔案是幹什麼用的呢?我們有時候經常需要對某個型別的元件指定大致相似的格式,比如字型、顏色、背景色等,如果我們每次都為某個View元件去重複指定這些屬性,這無疑會產生大量的工作,而且還不利於後期的程式碼修改和維護。而Style就是一個樣式的格式,這個格式可以被多個View元件所使用,也可以說是一個樣式的集合類,被需要這一類樣式集合的View元件所使用。例如我們前面寫的QQ登入介面中的登入按鈕,我們可以給定義一個樣式

  1. <stylename="buttonStyle">
  2.     <itemname="android:background">@drawable/login_button_nor</item>
  3.     <itemname="android:textColor">@color/buttonTextColor</item>
  4. </style>

在佈局檔案中引入樣式
  1. <Button
  2.     android:layout_width="270dip"
  3.     android:layout_height
    ="40dip"
  4.     android:text="@string/login_button"
  5.     style="@style/buttonStyle"
  6.     />
與樣式非常相似,主題資源的xml檔案通常也放在/res/values目錄下,主題相當於整個應用或者某個Activity的樣式,換句話說主題是針對窗體級別或整個應用程式的樣式。與樣式比較,樣式是針對窗體內元素的樣式。主題的設定有兩種方式

(1)在AndroidMainfest.xml中為Activity或者application指定主題

  1. <application
  2.     android:allowBackup="true"
  3.     android:icon="@drawable/ic_launcher"
  4.     android:label="@string/app_name"
  5.     android:theme="@android:style/Theme.NoTitleBar">
  6.     <activity
  7.         android:name="com.example.myfirstapp.MainActivity"
  8.         android:label="@string/app_name">
  9.         <intent-filter>
  10.             <actionandroid:name="android.intent.action.MAIN"/>
  11.             <categoryandroid:name="android.intent.category.LAUNCHER"/>
  12.         </intent-filter>
  13.     </activity>
  14. </application>

上面AndroidMainfest.xml程式碼中給整個應用指定了一個主題,這個主題是沒有標題欄的系統主題。

(2)在Activity建立時呼叫setTheme方法(必須在setContentView前面呼叫)來給某個Activity新增主題。

二、剖析主題(Theme)資源

我們先來建立一個工程名字為helloworld,然後開啟它的AndroiodMainfest.xml檔案

  1. <application
  2.     android:allowBackup="true"
  3.     android:icon="@drawable/ic_launcher"
  4.     android:label="@string/app_name"
  5.     android:theme="@style/AppTheme">
  6.     <activity
  7.         android:name="com.example.helloworld.MainActivity"
  8.         android:label="@string/app_name">
  9.         <intent-filter>
  10.             <actionandroid:name="android.intent.action.MAIN"/>
  11.             <categoryandroid:name="android.intent.category.LAUNCHER"/>
  12.         </intent-filter>
  13.     </activity>
  14. </application>

可以看到我們在建立工程時,已經預設給我們的整個應用添加了一個主題
  1. android:theme="@style/AppTheme"
開啟我們資原始檔res/values/下面的styles.xml檔案,可以看到在樣式檔案中有一個名字為AppTheme的樣式,如下:
  1. <resources>
  2.     <!--  
  3.         Base application theme, dependent on API level. This theme is replaced  
  4.         by AppBaseTheme from res/values-vXX/styles.xml on newer devices.  
  5.     -->
  6.     <stylename="AppBaseTheme"parent="android:Theme.Light">
  7.         <!--  
  8.             Theme customizations available in newer API levels can go in  
  9.             res/values-vXX/styles.xml, while customizations related to  
  10.             backward-compatibility can go here.  
  11.         -->
  12.     </style>
  13.     <!-- Application theme. -->
  14.     <stylename="AppTheme"parent="AppBaseTheme">
  15.         <!-- All customizations that are NOT specific to a particular API-level can go here. -->
  16.     </style>
  17. </resources>
我們可以看到,這個AppTheme的樣式繼承自上面的AppBaseTheme。而AppBaseTheme又繼承自系統的一個樣式Theme.Light,開啟Android系統原始碼找到Theme.xml檔案中的Theme.Light如下:
  1.   <!-- Theme for a light background with dark text on top.  Set your activity  
  2.        to this theme if you would like such an appearance.  As with the  
  3.        default theme, you should try to assume little more than that the  
  4.        background will be a light color. -->
  5.   <stylename="Theme.Light">
  6.       <itemname="windowBackground">@drawable/screen_background_light</item>
  7.       <itemname="colorBackground">@android:color/background_light</item>
  8.       <itemname="colorForeground">@color/bright_foreground_light</item>
  9.       <itemname="colorForegroundInverse">@android:color/bright_foreground_light_inverse</item>
  10.       <itemname="textColorPrimary">@android:color/primary_text_light</item>
  11.       <itemname="textColorSecondary">@android:color/secondary_text_light</item>
  12.       <itemname="textColorTertiary">@android:color/tertiary_text_light</item>
  13.       <itemname="textColorPrimaryInverse">@android:color/primary_text_dark</item>
  14.       <itemname="textColorSecondaryInverse">@android:color/secondary_text_dark</item>
  15.       <itemname="textColorTertiaryInverse">@android:color/tertiary_text_dark</item>
  16.       <

    相關推薦

    android 系統主題樣式定義主題樣式

    From: http://blog.csdn.net/dawanganban/article/details/17732701 http://www.cnblogs.com/bluestorm/archive/2012/07/12/2588724.html

    Liunx系統下刪除的JDK安裝需要的JDK版本

    一、liunx系統解除安裝自帶的jdk 1.   rpm -qa | grep jdk              <--檢視系統的jdk具體資訊 2.Java  -version  &n

    在Ubuntu系統上停止使用Anaconda的Python和解除安裝Anaconda

    一、停止使用Anaconda(包括Anaconda帶有的Python環境) 由於Anaconda在安裝過程中也會安上自帶的Python,而Ubuntu系統自帶有Python2.7環境,如果Anaconda安裝的是Python3,會將Python2.7版本覆蓋掉。

    android studio中的小圖示定義使用方法,Android 5.0後Material design icons(金屬設計風格圖示大全)如何使用

    首先我們需要外掛,如圖找到file–New–最後一項Material design icons,開啟在這裡我們可以找我們經常需要的一些圖示,可以自定義大小,顏色,以及生成各個解析度大小的圖示,相當的方便,那麼這些圖示都有哪些呢?大家可以把它下載下來在本地檢視:大致包含的目錄:分

    Android讀取外部儲存裝置(SD卡外部接入儲存裝置 )中的資料庫檔案

    我們在開發工作中,時時刻刻在與資料打交道,儲存資料的方式很多,其中使用資料庫來儲存及操作資料是最常見的一種方式。 Android內嵌了SQLite資料庫,這是一種非常流行的嵌入式及輕型關係型資料庫。支援SQL,支援多種作業系統,完全獨立執行,沒有依賴性。

    Unity3D_02_基類MonoBehaviour/函數以腳本執行的生命周期

    幀率 標準 between 所有 可用 不同 test 工程 UC 導引: 其中Time,Input,Physics都是Unity中的全局變量。GameObject是遊戲中的基本物件。GameObject是由Component組合而成的,GameObject本身必須有Tra

    Android輸入框刪除按鈕的定義View

    廢話不多說,用最少的程式碼來實現,記得弄一張名字叫 common_ic_delete 做完刪除的圖到drawable裡。 package com.aiitec.widgets; import android.content.Context; import and

    (loadrunner 一) WebTours使用異常解決辦法彙總

    想用loadrunner 自帶的web tours 練練手,但啟動過程中遇到各種問題。 1、啟動 啟動路徑...HP\LoadRunner\WebTours\run.bat。若遇到1080埠衝突,則將HP\LoadRunner\WebTours\xitami.cfg中“po

    初步使用django資料庫和django的後臺管理系統

    已有建立好的django專案,進入HiDjango/APP/models.py檔案輸入程式碼新增使用者類class User(models.Model): u_name=models.CharField(max_length=18) u_age=models.

    Android應用程式內部切換語言定義語言

    前言:這是小弟的第一篇部落格,琢磨了半天也不知道這玩意怎麼使,因此必然會有很多不足的地方,希望大家多多指點,謝謝! 國際化一直以來也是Android專案中需要考慮到的一個問題,以往我們所接觸到的國際化無非就是在res目錄下新建幾個values資料夾,裡面存放對

    SAP 程式(示例功能), 持續更新...

    經常會用到一些SAP自帶的小程式, 無TCODE, 或者是示例啥的, 慢慢整理一下, 在這裡備查. 1. SAPRDEMOWORD97INTEGRATION      呼叫Word 示例 2. ACC_BAPI_TEST_DOCUMENT       A Te

    iOS XcodeGit入門程式碼提交GitHub

    首先,Git不是github,Git和github的關係就像是 英雄聯盟和對戰遊戲平臺 其次,Xcode內建了Git,我們可以利用github或者國內的開源中國進行程式碼託管,直接在Xcode上進行團隊協作 客戶端(pc/mac)想要和github(碼雲等

    mac Apache,php環境的配置

    摘要: 系統OS X 10.8.5,Apache是Mac自帶的,主要是php的配置和MySql的配置,網上教程也挺多,本人也有參考,但是感覺有些步驟執行起來不是很順暢,根據自己配置的過程整理 一

    opencv2.4.10軟體本身參考資料手冊

    1、Opencv參考手冊位於Opencv的安裝目錄D:\Program File\opencv\build\doc下,opencv2refman.pdf就是其參考手冊 2、opencv2manager

    python導入模塊和定義模塊

    所有 自帶 .py print 參考資料 資料 int 普通 不同 模塊就是已經開發好的代碼功能,自己直接導入進來,直接使用。導入分為python 或selenium 自帶的模塊和自己寫的自定義模塊,下面根據這兩個方向寫一下分別導入的方法。 1.導入自帶模塊import s

    歸併排序頂向下底向上演算法視覺化

    歸併排序自頂向下 工具類 import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.lang.InterruptedException; public

    使用adb命令刪除Android系統data目錄下檔案資料夾

    使用命令刪除data目錄下的資料夾,和刪除一般檔案不同。 data目錄下的檔案需要777許可權,所以需要的命令不同 data目錄: C:\Users\aw>adb shell roo

    win10——拼音輸入法開啟學習

    轉載自某度經驗 我一直在抱怨win10自帶的輸入法很爛,連自動學習調整詞的順序都沒有,卻被告知是我沒有正確開啟,因此我去某度搜了一下,的確是我錯怪微軟了,那我就跟大家分享一下正確的開啟方式 1.

    android系統相機的使用、解決拍照閃退的問題

    package cn.keno.takephoto; import java.io.File; import java.util.Calendar; import java.util.Locale; import android.app.Activity; import android.content.I

    Android系統的MediaRecorder結合Camera實現視訊錄製播放功能。

        近期,公司專案新增了需求,需要視訊錄製,然後儲存到本地,再播放...。 看了很多其他的框架,說不出好壞,應該說各有千秋吧。但我覺得還是原生的靠譜,就是谷歌系統自帶的MediaRecorder。 不多說上程式碼吧(已經測試,沒問題)。 程式碼沒什麼複雜的,都是些