我在不同的布局文件中设置了不同的颜色,我需要在运行时为lite / dark应用程序颜色模式进行更改。有什么办法可以通过编程方式更改颜色,从而在这些布局文件中生效? 我可以更改资源颜色,如下所示:
public class CustomResources extends Resources {
private static final String TAG = "CustomResources";
private Context context;
public CustomResources(Resources original, Context context) {
super(original.getAssets(), original.getDisplayMetrics(), original.getConfiguration());
this.context = context;
}
@Override
public int getColor(int id) throws NotFoundException {
return getColor(id, null);
}
@Override
public int getColor(int id, Theme theme) throws NotFoundException {
if (Prefs.getInstance(context).getBooleanValue(AppConstants.IS_DARK_THEME)) {
switch (getResourceEntryName(id)) {
case "color_for_font_size_regular":
return Color.parseColor("#FFFFFF");
case "colorWhite":
return Color.parseColor("#262626");
default:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return super.getColor(id, theme);
} else return super.getColor(id);
}
} else {
switch (getResourceEntryName(id)) {
default:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return super.getColor(id, theme);
} else return super.getColor(id);
}
}
}
}
并在“活动”中使用它:
private CustomResources res;
@Override
public Resources getResources() {
if (res == null) {
res = new CustomResources(super.getResources(), this);
}
return res;
}
如果我为java中的每个视图设置颜色,则此代码段有效。但是,仅在布局文件中设置颜色时,我才需要它工作。谢谢。
答案 0 :(得分:0)
如果您只是想根据白天或夜晚模式更改颜色和应用程序,请查看AppCompatDelegate.setDefaultNightMode()
基本上,您必须创建不同的样式文件,并将其提供给AppCompatDelegate使用,具体取决于特定用户的白天模式或夜间模式,或者也可以强制其使用特定模式
这是一篇有关其他信息的文章 https://medium.com/androiddevelopers/appcompat-v23-2-daynight-d10f90c83e94