Как видно из названия, мне нужно изменить цвета макетов Android по своему вкусу.
Я прекрасно знаю, что они являются статическими переменными, но, как вы увидите из кода, я пытаюсь переопределить введенные значения, но, даже если это значение найдено, оно не обновляется и не изменяется.
Утилита класса является лишь примером.
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Build;
public class ResUtils extends Resources {
private Context context;
public ResUtils(Resources original, Context context) {
super(original.getAssets(), original.getDisplayMetrics(), original.getConfiguration());
this.context = context;
}
@Override
public int getColor(int id) throws NotFoundException {
int color = getColor(id, context.getTheme());
return color;
}
@Override
public int getColor(int id, Theme theme) throws NotFoundException {
int example = Color.MAGENTA;
int retColor = 0;
if (example != 0) {
switch (getResourceEntryName(id)) {
case "colorPrimary":
retColor = example;
return retColor;
default:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
retColor = super.getColor(id, theme);
return retColor;
} else {
retColor = super.getColor(id);
return retColor;
}
}
} else {
retColor = super.getColor(id, theme);
}
return retColor;
}
}
Я добавляю этот код в MainActivity:
private ResUtils res;
@Override
public ResUtils getResources() {
if (res == null) {
res = new ResUtils(super.getResources(), getApplicationContext());
}
return res;
}
}
Это моя тема:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">#E20612</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
А это простая раскладка:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners
android:radius="20px"/>
<stroke
android:width="2px"
android:color="?colorPrimary">
</stroke>
<solid
android:color="?colorPrimary"/>
</shape>
Я хочу обновить свой 'colorPrimary' в MAGENTA (для этого случая) ... но ничего не меняется!