我无法理解操作栏外观与主题化之间的交互模式。我的应用设置为使用默认主题,我认为它是深色的:
<style name="AppBaseTheme" parent="android:Theme">
</style>
通过应用范围内的样式从应用中删除操作栏会导致主要 Activity 的黑色背景:
<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 背景是白色的。如果在 Activity 的 onCreate()
方法中删除操作栏,操作栏也会消失,但背景保持白色:
ActionBar actionBar = getActionBar();
actionBar.hide();
TL;DR:行为总结:
- 存在操作栏:白色背景
- 通过代码删除操作栏:白色背景
- 通过 XML 删除操作栏:黑色背景
这是为什么呢?有人可以解释(或指向一个好的资源)通过代码与 XML 和背景颜色的操作栏外观交互吗?
最佳答案
在 onCreate 中移除 action bar 只是隐藏了 ActionBar View 。 它没有改变主题。
设置android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
正在为您的 Activity 设置一个主题,该主题带有该主题层次结构中的任何继承样式。
如果你看一下themes.xml在 android 源代码中,您会在样式中看到 <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
希望对您有所帮助。
关于java - 主题、背景颜色和操作栏的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16205056/