關于作者:CSDN內容合伙人、技術專家, 從零開始做日活千萬級APP。
專注于分享各領域原創系列文章 ,擅長java后端、移動開發、商業變現、人工智能等,希望大家多多支持。
目錄
- 一、導讀
- 二、概覽
- 三、使用
- 3.1 創建并應用樣式
- 3.2 創建并應用主題
- 3.3 ? & @ 符號引用
- 五、 推薦閱讀
一、導讀
我們繼續總結學習Android 基礎知識,溫故知新。
本文講述樣式相關知識 。
二、概覽
樣式可以定義界面的格式和外觀。樣式可應用于單個 View(從布局文件中)或應用于整個 Activity 或應用(從清單文件中)。
樣式是使用 name 屬性中提供的值(不是 XML 文件的名稱)引用的簡單資源。因此,可以在一個 XML 文件中將樣式資源與其他簡單資源合并到一個 元素下。
樣式是一個屬性集合,用于指定單個 View 的外觀。樣式可以指定字體顏色、字號、背景顏色等屬性。
主題和樣式有許多相似之處,但其用途不同,后面我們具體講解一下。
三、使用
所有樣式文件定義在下面這個目錄:
res/values/filename.xml文件名可以任意設置。元素的 name 將用作資源 ID
該文件通常命名為 styles.xml
語法
<?xml version="1.0" encoding="utf-8"?>
<resources><stylename="style_name" 樣式的名稱parent="@[package:]style/style_to_inherit"> 樣式資源。對此樣式應從中繼承樣式屬性的樣式的引用<item 定義樣式的單個屬性。必須是 <style> 元素的子元素name="[package:]style_property_name" >style_value</item></style>
</resources>
設計style樣式的目的:在復雜多樣式的控件使用和項目應用中,保持統一的格式和展現效果,同時降低維護成本。
3.1 創建并應用樣式
打開項目的 res/values/styles.xml 文件,按以下步驟操作:
- 使用唯一標識樣式的名稱添加
eg:
<?xml version="1.0" encoding="utf-8"?>
<resources><style name="CustomText" parent="@style/Text"><item name="android:textSize">20sp</item><item name="android:textColor">#008</item></style>
</resources>
使用
<?xml version="1.0" encoding="utf-8"?>
<EditTextstyle="@style/CustomText"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Hello, World!" />
要知道,我們Style樣式是可以繼承的,通過style標簽中的parent屬性指定新定義的樣式所繼承的樣式。parent繼承的是系統的一些style樣式。繼承是可選的,可以選擇繼承,也可以選擇不繼承。
3.2 創建并應用主題
可以像創建樣式一樣創建主題背景,簡直一模一樣,只是我們使用的位置不同而已,主題主要應用在** 標記或 **上,
使用 android:theme 屬性來引用,然后應用或 Activity 中的每個視圖都會應用指定主題背景中定義的樣式
<manifest ... ><application android:theme="@style/Theme.AppCompat" ... ><activity android:theme="@style/Theme.AppCompat.Light" ... ></application>
</manifest>
Android 提供了多種在整個 Android 應用中設置屬性的方法。例如,您可以直接在布局中設置屬性,將樣式應用到視圖,將主題背景應用到布局,以及以編程方式設置屬性。
所以這些設置方式是有優先級的,下面的列表將決定最終應用哪些屬性。該列表按照優先級從高到低的順序排序:
- 通過文本 span 將字符或段落級樣式應用到 TextView 派生的類
- 以編程方式應用屬性
- 將單獨的屬性直接應用到 View
- 將樣式應用到 View
- 默認樣式
- 將主題背景應用到 View 集合、Activity 或整個應用
- 應用某些特定于 View 的樣式,例如為 TextView 設置 TextAppearance
3.3 ? & @ 符號引用
我們先看個例子,同樣是color的引用,一個使用@,一個使用 ?,那他們到底有什么區別呢?
<TextViewandroid:textColor="@color/standard_font" /><TextViewandroid:textColor="?attr/darkColor_ffeaeaea"/>
“@”表示引用資源,聲明這是一個資源引用,格式為:@[package:]type/name
“?”表示引用主題屬性,格式為:?[namespace:]type/name
問號表示:該屬性是當前Theme定義的一個屬性,所以系統將在當前Theme中查找其參數。
以上面的例子來解析,
- 從AndroidManifest.xml里面找到應用的主題為: android:theme=“@style/AppTheme”
- 在AppTheme主題里面可以找到darkColor_ffeaeaea屬性:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
……<item name="darkColor_ffeaeaea">@color/colorPrimary</item>
……
如果是應用內定義的屬性,[namespace:]type可以省略,
如:
android:background=“?attr/colorPrimary”
可以簡寫為:
android:background=“?colorPrimary”
如果是引用系統定義的屬性,則不能省略:
android:background=“?android:attr/colorPrimary”
樣式
五、 推薦閱讀
Java 專欄
SQL 專欄
數據結構與算法
Android學習專欄