1

我无法理解动作栏的外观与主题化之间的交互模式。我的应用程序设置为使用默认主题,我认为它是黑暗的:

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

通过应用程序范围的样式从应用程序中删除操作栏会导致主要活动的黑色背景:

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

没有android:theme="@android:style/Theme.NoTitleBar.Fullscreen"线,活动背景是白色的。如果在 Activity 的方法中的代码中删除了onCreate()操作栏,则操作栏也消失了,但背景仍然是白色:

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

TL;DR:行为总结:

  • 存在操作栏:白色背景
  • 通过代码删除操作栏:白色背景
  • 通过 XML 删除的操作栏:黑色背景

这是为什么?有人可以通过代码与 XML 和背景颜色解释操作栏外观的交互(或指向一个好的资源)吗?

4

1 回答 1

2

删除 onCreate 中的操作栏只是隐藏了 ActionBar 视图。它没有改变主题。

设置android:theme="@android:style/Theme.NoTitleBar.Fullscreen"是为您的活动设置一个主题,该主题带有该主题层次结构中的任何继承样式。

如果您查看android 源代码中的Themes.xml,您会看到样式中存在<style name="Theme">该项目<item name="colorBackground">@android:color/background_dark</item>

然后<style name="Theme.NoTitleBar">继承了Theme集合的所有样式<item name="android:windowNoTitle">true</item>

然后<style name="Theme.NoTitleBar.Fullscreen">which 继承自NoTitleBarandTheme设置<item name="android:windowFullscreen">true</item>and<item name="android:windowContentOverlay">@null</item>

这解释了为什么在应用该样式时您的背景是深色的。

如果你将你的主题设置为Theme.Light.NoTitleBar.Fullscreen你会达到同样的效果,但你会继承<item name="colorBackground">@android:color/background_light</item>应该<style name="Theme.Light">是浅色的。

或者,您可以扩展您想要的任何它们并覆盖任何样式。

所以,例如,你可以做类似的事情......

<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 主题和样式/

如果你想创建或扩展你自己的主题,它总是值得看看 android 源代码,看看你可以扩展和覆盖什么:http: //developer.android.com/guide/topics/ui/themes.html#PlatformStyles

希望有帮助。

于 2013-05-15T09:40:42.293 回答