android多主题,一个应用

android多主题,一个应用,android,android-theme,Android,Android Theme,我需要开发一个应用程序,它可以为服务器定义的一些用户设置不同的应用程序颜色。 我已经阅读了很多使用attr.xml文件的自定义主题,但是如果我使用它,android studio builder将被破坏。 因此,我开发了另一种方法-我将我的BaseActivity的Resorses类子类化: CustomResource customResource; @Override public Resources getResources() { if (customResource ==

我需要开发一个应用程序,它可以为服务器定义的一些用户设置不同的应用程序颜色。 我已经阅读了很多使用attr.xml文件的自定义主题,但是如果我使用它,android studio builder将被破坏。 因此,我开发了另一种方法-我将我的BaseActivity的Resorses类子类化:

  CustomResource customResource;

@Override
public Resources getResources() {
    if (customResource == null) {
        customResource = new CustomResource(super.getAssets(), super.getResources().getDisplayMetrics(), super
                .getResources().getConfiguration());
    }

    return customResource;
}

public class CustomResource extends Resources {

    public CustomResource(AssetManager assets, DisplayMetrics metrics, Configuration config) {
        super(assets, metrics, config);

    }

    @Override
    public int getColor(int id) throws NotFoundException {
        Log.d("TAG", "id: " + id + "   getResourceName: " + getResourceName(id));
        Log.i("TAG", "Came Color: "+super.getColor(id));
        return getColor ( getResourceName(id) , id);
    }

    public int getColor(String aString, int oldId) {
        String packageName = getPackageName();
        int resId = getIdentifier(getThemeColorName(aString),null,null);
        Log.v("TAG", "resId: "+resId);
        if (resId != 0) {
            Log.i("TAG", "We SET Color: "+super.getColor(resId));
            return super.getColor(resId);
        } else {
            return super.getColor(oldId);
        }
    }

    private String getThemeColorName(String aString){
        int pos = aString.lastIndexOf('/');
        if (pos != -1){
            aString = aString.substring(0, pos+1) + "b" + aString.substring(pos+1, aString.length());
        }

        Log.d("TAG", "aString NOW: " + aString);

        return aString;
    }

}
为了测试而检索适当的资源,我将退出而不是someColor->bsomeColor。 当我查看日志时,一切正常,颜色也在变化

但如果我从xml活动布局设置颜色,我会看到所有方法都成功执行,但在我的屏幕上,android ePlyies颜色没有b前缀,但我的所有方法都被调用-getColor用于每个视图,我返回super.getColor以获得适当的颜色,这是我需要的


请告诉我如何解决这个问题,或者给我其他的选项来很好地引入多个主题,而不破坏xml编辑器

您在这里看到这个答案了吗@Sparkybrow我的问题是如何管理自定义颜色,比如firmColor1、ets,而不是android部分。这个问题是关于其他东西的,你是如何定义bsomeColor的?它是一个十六进制数还是一种颜色。来自RGB?@Sparkybrow没什么特别的:e10000 7829ff