2013-06-02 92 views
0

一但上觀看在模擬器中創建一個簡單的主題爲主題android系統

<style name='one'> 
    <item name='android:textColor'>#eea</item> 
    <item name='android:textSize'>20sp</item> 
    </style> 

屏幕變成black.when我不適用主題的屏幕上有一個白色背景。 這裏真的發生了什麼,我剛剛開始用android。 此外,如果將主題應用於我的活動,則該主題的屬性將應用於我的活動的所有組件,例如button,textfields和edittexts。 爲什麼我會那麼寫

android:textSize=?android:textSize 

來自於我的佈局任何按鈕主題的參考值時,同樣的價值將已經應用。

是上述語法的正確方法,從我的主題引用屬性以指定給我的佈局中的任何視圖的屬性。 謝謝 tejinder

+0

正在應用的主題是什麼? –

+0

其中一個如上定義 – tejinder

+0

查看我的回答 –

回答

1

是的,所以你需要做更多的閱讀。

讓我們從基礎開始,

您需要了解differente betweent的屬性,樣式和主題。

屬性是可以風格的東西。例如:android:textSize是一個可以具有任何值的屬性。

A 風格是一組特定的屬性將被應用於一個小工具。他們在你/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> 

的風格既可以作爲主題的一部分,或者直接作爲主題無關。

一個小部件的主題indepentent造型是這樣的:

<TextView 
    android:id="@+id/text" 
    style="@style/normalTextThin" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

你那麼主題化一個TextView的。

一個主題樣式,可以應用到你的用戶界面,這樣的整體活動,或者你的整個應用程序的一部分的集合。

例如:

<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 

這條線是一個尺寸,並且它不會基於當前主題是不同的,但是就目前設備屏幕大小和方向(值,值土地,值-sw600dp)。

重要的是要知道,指定?android:意味着您正在訪問預設的Android值,而不是您的。如果您擁有或想要創建和使用您自己的屬性值的具體配置,必須做到以下幾點:

創建你的/價值/文件夾命名爲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> 

然後你就可以使用它了Widget您想:

。希望清除的東西出來。

EDIT 2

爲了更好地回答你的問題,請更新您的問題。就像我說的,閱讀更多關於如何正確創建樣式。

  1. 名爲'one'的主題,你想要應用到什麼?一個活動,一個小工具,整個應用程序?
  2. 你是如何應用這個主題的?顯示指定主題'one'用法的代碼行。

您指定的主題根本不是一個正確構建的主題/風格。

<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 Developer Site,嘗試在那裏聲明的測試樣式,看看它們是如何工作的,然後嘗試創建自己的測試樣式,如果沒有閱讀,請不要嘗試創建任何東西已經制定。

+0

這是一個很棒的精心設計的reply.appreciate.However,有一件事仍然是爲什麼背景變黑時,我應用了上面給出的主題,而沒有提及主題中的任何背景。當我刪除主題時背景變爲白色。 – tejinder

+0

如果你注意到你的主題,你沒有聲明一個'父'主題。 –

+0

是否有必要申報家長。但即使沒有父母爲什麼背景改變時,我不指定。如果可能的話更新 – tejinder