如何以编程方式更改Android L中的主要颜色

时间:2014-08-17 23:23:46

标签: android android-5.0-lollipop material

有没有办法以编程方式更改主要颜色。我想根据应用程序的屏幕/状态在代码中执行此操作。

目前我只能在主题中设置颜色(静态):

    <item name="android:colorPrimary">@color/primary_color</item>
    <item name="android:colorPrimaryDark">@color/dark_color</item>
    <item name="android:colorBackground">@android:color/white</item>
    <item name="android:colorAccent">@color/primary_color</item>
    <item name="android:colorControlHighlight">@color/primary_color</item>

由于

4 个答案:

答案 0 :(得分:10)

当然,您可以实现View的自定义子类,它具有设置颜色的方法。

您还可以使用各种颜色方案定义多个主题。

Views在创建主题信息时从上下文中查找主题信息。因此,要更改从主题应用的样式,您必须使用使用正确主题的上下文重新创建视图层次结构。

这样做的一种方法是创建一个新的ContextThemeWrapper,然后获得一个使用该主题包装的LayoutInflator,删除旧版本的布局并重新夸大你的布局。

大致是:

    ContextThemeWrapper themeWrapper = new ContextThemeWrapper(this, R.style.AppThemeWithColorScheme2);
    LayoutInflater layoutInflater = LayoutInflater.from(themeWrapper);
    viewContainer.removeAllViews();
    layoutInflater.inflate(R.layout.my_layout, viewContainer, true );

如果您正在使用操作栏,那可能会有点棘手,因为操作栏已创建once per activity

答案 1 :(得分:0)

使用此代码设置toolbarcolor和状态栏(较暗的工具栏颜色)

toolbar.setBackgroundColor(toolbarColor);
factor=0.8f; 
int a = Color.alpha(toolbarcolor);
int r = Math.round(Color.red(toolbarcolor) * factor);
int g = Math.round(Color.green(toolbarcolor) * factor);
int b = Math.round(Color.blue(toolbarcolor) * factor);
int statusColor=Color.argb(a,
        Math.min(r, 255),
        Math.min(g, 255),
        Math.min(b, 255));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = MainActivity.this.getWindow();
    window.setStatusBarColor(statusColor);
}

答案 2 :(得分:0)

这是最实际的操作,没有错误,无需执行任何额外的编码,只需转到android tree项目

  

res>值>颜色,然后编辑以下代码:

 <resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
</resources>
  

在样式下添加这些内容:

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
  

在“ .MainActivity”之后添加到清单中:

android:theme="@style/AppTheme.NoActionBar">

答案 3 :(得分:0)

这会更改文本中的所有内容

<item name="android:textColorPrimary">@color/textGrey</item>
    <item name="android:textColorSecondary">@color/textGrey</item>
    <item name="android:textColorTertiary">@color/textGrey</item>
    <item name="android:listDivider">@color/textGrey</item>