我无法理解操作栏外观和主题化之间的交互方式。我的应用设置为使用默认主题,我认为它是深色的:

<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"行,活动背景为白色。如果在活动的onCreate()方法中的代码中删除了操作栏,则该操作栏也消失了,但是背景仍然为白色:

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


TL; DR:行为摘要:


当前的操作栏:白色背景
通过代码删除了操作栏:白色背景
通过XML删除操作栏:黑色背景


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

最佳答案

在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">NoTitleBar继承的Theme设置<item name="android:windowFullscreen">true</item><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-themes-and-styles/

而且,如果您想创建或扩展自己的主题,那么始终值得一看的是android源代码,以了解可以扩展和覆盖的内容:
http://developer.android.com/guide/topics/ui/themes.html#PlatformStyles

希望能有所帮助。

10-07 20:01
查看更多