[英]Themes in android
創建一個簡單的主題為
<style name='one'>
<item name='android:textColor'>#eea</item>
<item name='android:textSize'>20sp</item>
</style>
但是,在模擬器中查看時,屏幕會變黑。當我不應用主題時,屏幕背景為白色。 這里真正發生了什么。我只是從android開始。 另外,如果將主題應用於我的活動,則該主題的屬性將應用於我的活動的所有組件,例如按鈕,文本字段和edittexts。 我為什么要寫
android:textSize=?android:textSize
當已經應用相同的值時,從主題中引用布局中任何按鈕的值。
是在我的主題中引用屬性以將其分配給布局中任何視圖的屬性的正確方法上方的語法。 謝謝tejinder
是的,因此您需要閱讀更多內容。
讓我們從基礎開始
您需要了解屬性,樣式和主題之間的區別。
屬性是可以樣式化的東西。 例如: android:textSize
是可以具有任何值的屬性。
樣式是一組將應用於窗口小部件的特定屬性 。 它們在您的/values/styles.xml
中定義
例如:
<style name="normalTextThin" parent="android:Widget.Holo.Light.TextView">
<item name="android:gravity">left|center_vertical</item>
<item name="android:padding">8dp</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:textSize">16sp</item>
</style>
樣式可以作為主題的一部分或直接作為主題無關的施加。
小部件的主題獨立樣式如下:
<TextView
android:id="@+id/text"
style="@style/normalTextThin"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
然后,您只主題化的一個TextView的。
主題是樣式的集合,可以應用於您的UI的一部分,例如整個Activity或整個Application。
例如:
<style name="AppTheme" parent="android:Theme.Light">
<item name="android:editTextStyle">@style/EditTextAppTheme</item>
<item name="android:buttonStyle">@style/ButtonAppTheme</item>
<item name="android:imageButtonStyle">@style/ImageButtonAppTheme</item>
</style>
在這里,我們聲明您的應用程序中的所有 EditText都將使用名為EditTextAppTheme
的樣式 ,依此類推。 這樣做后,為了使主題真正生效,可以在清單中聲明它:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
這意味着您無需在創建的每個小部件上聲明樣式。
<EditText
android:id="@+id/input"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_search">
<requestFocus />
</EditText>
在那里的那個部件已經可以使用EditTextAppTheme
設置樣式,而無需您明確聲明。
我建議您嘗試閱讀可以設置樣式的屬性,如何設置樣式的樣式等等。
但是,如果您不想這樣做,可以使用以下樣式工具來完成很多工作:
希望能有所幫助。
附加信息
讓我澄清一下整個?attr/attributeName
?
表示系統將為當前配置選擇特定的attributeName
值(不特定於不同的主題)。 僅當您希望該值在不同配置上不同時才應使用此選項。 例如:
?android:attr/actionBarSize
這條線是一個尺寸,它不是基於當前主題而是基於當前設備屏幕的大小和方向(值,values-land,values-sw600dp)而不同。
重要的是要知道指定?android:
意味着您正在訪問預設的Android值,而不是您的值。 如果您具有或想要創建自己的屬性值並將其用於特定配置,則必須執行以下操作:
在/ values /文件夾上創建一個名為attrs.xml
文件。
聲明所需的自定義屬性:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<attr name="my_custom_attr" format="reference" />
</resources>
為自定義屬性聲明一個值,比如說您自己的主題。
<style name="AppTheme" parent="android:Theme.Light">
<item name="my_custom_attr">@resource_type/resource_name</item>
<item name="android:editTextStyle">@style/EditTextAppTheme</item>
<item name="android:buttonStyle">@style/ButtonAppTheme</item>
<item name="android:imageButtonStyle">@style/ImageButtonAppTheme</item>
</style>
然后,您可以在所需的小部件上使用它:
希望能把事情弄清楚。
編輯2
為了更好地回答您的問題,請更新您的問題。 就像我說的,請閱讀更多有關如何正確創建樣式的信息。
您指定的主題根本不是正確構建的主題/樣式。
<style name='one'>
<item name='android:textColor'>#eea</item>
<item name='android:textSize'>20sp</item>
</style>
這絕對沒有說什么,而且絕對不適合活動級別的主題。 指定父級的原因是,主題可以繼承父級的 所有屬性,然后指定要更改的屬性。
例如,如果您要使用主題並具有淺色背景,請執行以下操作:
<style name='one' parent="android:Theme.Holo.Light>
<item name='android:textColor'>#eea</item>
<item name='android:textSize'>20sp</item>
</style>
但是即使在這里,盡管事實上它會適用,但您不想整個應用程序具有相同的文本顏色和大小嗎? 那是胡說八道,不同的文本顏色和大小占了用戶體驗的很大一部分,因此我們可以創建子樣式並將其應用於某些小部件,而不是從我們稱為主要樣式的那些值中進行設置。
我不能再詳細介紹我已經擁有的東西,以上內容解釋了如何完成特定於Widget的樣式以及活動/應用程序級別的主題。
要獲得完整的入門指南,請閱讀Android開發者網站 ,嘗試在那里聲明的測試樣式,查看其工作方式,然后再嘗試創建自己的樣式,如果沒有閱讀過的內容,請不要嘗試無所不在的創建東西。制作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.