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

ebt*_*kyo 14 android material android-5.0-lollipop

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

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

    <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>
Run Code Online (Sandbox Code Playgroud)

谢谢

yog*_*arl 12

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

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

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

一种方法是创建一个新的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 );
Run Code Online (Sandbox Code Playgroud)

如果您正在使用Action Bar,那可能会有点棘手,因为每个活动都会创建一次 Action Bar .