2013-04-25 53 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

希望有所帮助。