如何只为一项活动更改ColorPrimaryDark?

时间:2017-07-31 18:20:54

标签: android kotlin

我想仅为一项活动更改ColorPrimaryDark的颜色。我怎么能这样做?

我想转到styles.xml并更改一下:

<item name="colorPrimaryDark">@color/blue</item>

但问题是,如果我这样做,我会改变所有活动的颜色,我只需要改变一个活动的颜色。

感谢您的帮助!

具体来说,这个颜色是应用程序顶部栏的颜色,我的意思是ActionBar以上。我用Kotlin来做这件事。

4 个答案:

答案 0 :(得分:6)

Create a theme专门针对Activity

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimaryDark">@color/gray</item>
    <!-- Your application theme -->
</style>

<style name="BlueActivityTheme" parent="AppTheme">
    <item name="colorPrimaryDark">@color/blue</item>
</style>

然后在您的清单中,仅将主题应用于Activity

<activity android:name="com.example.app.BlueActivity"
    android:theme="@style/BlueActivityTheme"/>

答案 1 :(得分:1)

您必须创建自己的主题。请注意,我在名为MyTheme的 styles.xml 中添加了一个新主题,并将colorPrimaryDark设置为lightGreen

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    </style>

    <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimaryDark">@color/lightGreen</item>
    </style>

</resources>

现在在 manifest.xml 中,您必须在activity标记上设置主题。请勿在{{1​​}}代码中设置主题。

application

现在,您可以看到我在<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" > <activity android:name=".MainActivity" android:theme="@style/AppTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".OtherActivity1" android:theme="@style/MyTheme" /> <activity android:name=".OtherActivity2" android:theme="@style/AppTheme" /> <activity android:name=".OtherActivity3" android:theme="@style/AppTheme" /> </application> 上设置了MyTheme的自定义主题。对于活动的其余部分,我将主题设置为默认主题。希望它有所帮助。

答案 2 :(得分:0)

在您的活动中添加以下代码,以编程方式设置状态栏颜色:

getWindow.setStatusBarColor(getResources().getColor(R.color.your_color));

此外,您可以通过在styles.xml文件中编写主题来设置状态栏颜色:

<style name="YourActivityTheme" parent="AppTheme">
    <item name="colorPrimaryDark">@color/yourColor</item>
</style>

然后在清单文件中,您必须添加以下代码:

<activity android:name="packageName.YourActivity"
    android:theme="@style/YourActivityTheme"/>

答案 3 :(得分:0)

在/res/value/styles.xml中,您可以根据需要定义任意数量的样式,然后在活动布局xml的根项上使用:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 style="@style/MySecondStyle"
 ....

也可以在清单中指定样式。

即使您可以使用主题属性仅更改一个View或一个ViewGroup的样式,例如:

 <TextView       
        android:theme="@style/MyThirdStyle"
        .....