2013-04-25 55 views
1

我無法理解操作欄外觀和主題化之間的交互方式。我的應用程序設置爲使用默認的主題,我認爲是黑暗:主題,背景顏色和操作欄的交互

<activity 
     android:name="com.atlarge.motionlog.MainActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    > 

<style name="AppBaseTheme" parent="android:Theme"> 
</style> 

通過應用範圍的風格導致了黑色背景的主要活動中刪除從應用程序的操作欄

沒有android:theme="@android:style/Theme.NoTitleBar.Fullscreen"行,活動背景爲白色。如果操作欄的代碼去除活性onCreate()方法,操作欄也不見了,但背景保持白色:

ActionBar actionBar = getActionBar(); 
    actionBar.hide();  

TL; DR:摘要行爲:

  • 操作欄本:白色背景
  • 操作欄經由代碼移除:白色背景經由XML除去
  • 操作欄:黑色背景

這是爲什麼?有人可以通過代碼與XML和背景顏色來解釋(或指向一個好的資源)的動作欄外觀的交互嗎?

回答

2

刪除onCreate中的操作欄只是隱藏了ActionBar視圖。 它不改變主題。

設置android:theme="@android:style/Theme.NoTitleBar.Fullscreen"正在爲您的活動設置一個主題,該主題伴隨着該主題層次結構中的任何繼承樣式。

如果您在Android源看看themes.xml,你會看到,在風格<style name="Theme">那裏有它繼承了所有款式的Theme<item name="android:windowNoTitle">true</item>

然後<style name="Theme.NoTitleBar.Fullscreen">項目<item name="colorBackground">@android:color/background_dark</item>

然後<style name="Theme.NoTitleBar">它繼承自NoTitleBarTheme集合<item name="android:windowFullscreen">true</item><item name="android:windowContentOverlay">@null</item>

這解釋了爲什麼你有一個應用該風格時會出現黑暗背景。

如果您將主題設置爲Theme.Light.NoTitleBar.Fullscreen,您將獲得同樣的效果,但您會繼承<style name="Theme.Light">中的<item name="colorBackground">@android:color/background_light</item>,這應該是淺色。

或者,您可以擴展任何他們想要的並覆蓋任何樣式。

所以,例如,你可以做一些像......

<style name="MyTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen"> 
    <item name="colorBackground">@color/my_light_color</item> 
    <item name="windowBackground">@drawable/screen_background_selector_light</item> 
</style> 

這裏有一些資源,可幫助您瞭解的主題多一點: http://developer.android.com/guide/topics/ui/themes.html http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/

如果你想創建或擴展自己的主題,它總是值得看的Android源看看你可以擴展和覆蓋: http://developer.android.com/guide/topics/ui/themes.html#PlatformStyles

希望有所幫助。