在风格上设置指定视图背景并按主题更改

时间:2016-11-16 12:50:49

标签: android themes android-theme android-styles

我寻找谷歌并继续争取搜索关键字,但仍然没有。

我想要的是:

  <style name="Theme.DefaultWhite" parent="@android:style/Theme.DeviceDefault">
    <item name="android:background">#ffffffff</item>
    <item name="MyCustomBackground">#33ffffff</item>
  </style>
  <style name="Theme.DefaultBlue" parent="@android:style/Theme.DeviceDefault">
    <item name="android:background">#ffffffff</item>
    <item name="MyCustomBackground">#3388ffff</item>
  </style>

并将项目设置为指定(其他使用Android默认设置)视图。

    <ImageView>
       id = "@+id/NNI_ivCards"
       background="@style/MyCustomBackground"
    </ImageView>
    <ImageView>
       id = "@+id/NNI_ivBarRoot"
    </ImageView>

NNI_ivCards ImageView必须按主题更改背景颜色, NNI_ivBarRoot 不会按主题更改。

我需要风格化的自定义资源,它根据主题改变了它的价值。

如果Android设计的不是在样式中添加额外的自定义值,我需要尽可能短的Java代码。

1 个答案:

答案 0 :(得分:1)

所以,

此代码可以通过更改主题来更改颜色(任何颜色)。

首先,您必须向style.xml添加2个样式,如下所示:

<style name="DefaultTheme" parent="Theme.AppCompat.Light.DarkActionBar">

</style>

<style name="CustomTheme" parent="Theme.DefaultTheme" >

</style>

这里只添加 DefaultTheme CustomTheme ,现在转到manifest.xml并将此行android:theme="@style/DefaultTheme"添加到应用< / em>标签:

<application
        android:theme="@style/DefaultTheme"
        ...>

创建名为attrs.xml的新xml文件并添加以下代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="color1" format="color" />
    <attr name="color2" format="color" />
</resources>

回到样式并添加这些颜色:

<style name="DefaultTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="color1">#FFFFFF</item>
    <item name="color2">#FFFFFF</item>
</style>

<style name="CustomTheme" parent="Theme.DefaultTheme" >
    <item name="color1">#33ffffff</item>
    <item name="color2">#3388ffff</item>
</style>

现在你有2个主题,在 DefaultTheme color1和color2是#FFFFFF,在 CustomTheme color1是#33ffffff,color2是#3388ffff

转到您的imageView并添加此颜色:

<ImageView>
    android:id = "@+id/NNI_ivCards"
    android:background="?attr/color1"
</ImageView>

更改主题,您必须在setTheme(R.style.DefaultTheme);方法setContentView()方法之前调用onCreate(),因此您的活动应如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.CustomTheme);
    setContentView(R.layout.main_activity);
    ....
}