有没有办法以编程方式更改主要颜色。我想根据应用程序的屏幕/状态在代码中执行此操作。
目前我只能在主题中设置颜色(静态):
<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>
由于
答案 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>