当前位置: 首页 > 知识库问答 >
问题:

以编程方式更改从API响应获得的颜色资源的值

百里君博
2023-03-14

我调用我的API,它返回绿色,现在我想加载我的应用程序,即(绿色工具栏,绿色textviewcolor,等等),这可能吗?

我的第一个想法是:

colors.xml上创建一个名为demo的项,然后为它分配一个默认颜色,然后在任何我想用的地方使用这个demo颜色(按钮textview等)。然后我认为可以通过API的结果以编程方式更改这个值,这样我就不需要创建sharedpreferences或类似的东西,并避免更多的代码。

作为@Y.S。对我说

不幸的是,您将不得不在任何地方手动设置文本或视图的颜色...:(

我想知道是否有其他方法可以做到这一点,因为我不知道我的项目将包含多少活动,所以如果有其他方法可以做到这一点,我很高兴听到其他猜测。

case "your_special_color":                
            return GlobalConstant.color; 
public class Main2Activity extends AppCompatActivity {
private Res res;
@Override public Resources getResources() {
    if (res == null) {
        res = new Res(super.getResources());
    }
    return res;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

我是不是漏掉了什么?

哦..我想它是在我的MainActivity2上做的?

 Button btn = (Button)findViewById(R.id.button2);
 btn.setBackgroundColor(res.getColor(R.color.your_special_color));

共有1个答案

莫河
2023-03-14

您可以创建一个扩展资源并重写getcolor(int)getcolor(int,Theme)方法的类。

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="your_special_color">#FF0099CC</color>
</resources>

Res.Java

public class Res extends Resources {

    public Res(Resources original) {
        super(original.getAssets(), original.getDisplayMetrics(), original.getConfiguration());
    }

    @Override public int getColor(int id) throws NotFoundException {
        return getColor(id, null);
    }

    @Override public int getColor(int id, Theme theme) throws NotFoundException {
        switch (getResourceEntryName(id)) {
            case "your_special_color":
                // You can change the return value to an instance field that loads from SharedPreferences.
                return Color.RED; // used as an example. Change as needed.
            default:
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    return super.getColor(id, theme);
                }
                return super.getColor(id);
        }
    }
}
public class BaseActivity extends AppCompatActivity {

    ...

    private Res res;

    @Override public Resources getResources() {
        if (res == null) {
            res = new Res(super.getResources());
        }
        return res;
    }

    ...

}
 类似资料:
  • 我已经读过一些关于颜色的线程,但所有这些线程都必须通过style.xml进行设置。 现在我用这个来确定颜色。 是否可以不使用XML,例如使用代码来更改SwitchCompat/Checkbox的颜色?

  • 我正在尝试通过代码更改白色标记图像的颜色。我已经阅读了下面的代码应该改变颜色,但我的标记仍然是白色的。 我错过了什么吗?有没有其他方法可以更改位于我的res文件夹中的可绘制对象的颜色?

  • 然而,当我运行该应用程序时,我没有看到任何变化。更改背景本身: 将整个更改为-不是我想要的! 如何以编程方式更改、或的下划线颜色?我使用的是支持库的25.0.1版本。

  • 我有一个房子的资源链接,如果你想查看它。它基本上只是一个黑色的主页按钮。 我有它包括和导入作为图像资产作为绘图。 我试图将其设置为按钮,但以编程方式将其更改为白色。 以下是我尝试将颜色更改为白色的方法: 知道我哪里出错了吗?

  • 我做了一个均衡器来配合我的应用程序,但我不确定如何改变搜索栏的拇指和进度颜色。默认情况下,它似乎是粉红色的,这不符合我的应用程序的美学。

  • 我试图通过编程更改edittext的颜色。它可以工作,但正如您从所附的图像中看到的,文本选择的图标仍然使用主题颜色重音,而不是我设置的蓝色。我怎样才能改变它?我目前的代码是: