java - 主题、背景颜色和操作栏的交互

标签 java android colors themes

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

<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">继承自 NoTitleBarTheme<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/

相关文章:

Java:高性能消息传递(单一生产者/单一消费者)

java - 获取文件路径的相对路径?

android - 使用 ActionBarCompat 和 requestWindowFeature

android - 如何反编译kotlin android apk?

java - 从 ZonedDateTime 获取 java.sql.Timestamp

java - java中在单独的线程中运行许多方法并等待所有方法完成的最简单方法是什么?

android - Notification Builder.addAction().auto Cancel() 在 Android 6.0 中不起作用

jQuery:输入字段的动画文本颜色?

css - 更改我网页的整个颜色模式

iOS UINavigationBar 色调颜色看起来比颜色集暗