【问题标题】:Initialize int with resource defined color用资源定义的颜色初始化 int
【发布时间】:2013-12-23 09:40:30
【问题描述】:

我有一个定义颜色的资源文件:

colors.xml:

...
<color name="White">#FFFFFF</color>
<color name="Ivory">#FFFFF0</color>
<color name="LightYellow">#FFFFE0</color>
<color name="Yellow">#FFFF00</color>
<color name="Snow">#FFFAFA</color>
<color name="FloralWhite">#FFFAF0</color>
<color name="LemonChiffon">#FFFACD</color>
<color name="Cornsilk">#FFF8DC</color>
<color name="Seashell">#FFF5EE</color>
<color name="LavenderBlush">#FFF0F5</color>
<color name="PapayaWhip">#FFEFD5</color>
...

我想用该列表中的颜色 value 初始化类中的 int 字段(不是颜色 ID,颜色值)

class MyClass {

   private int color1 = ?????;
   private int color2 = ?????;

   ...

可行吗?
我试过Resources.getSystem().getColor(R.color.White);,但我得到了:

12-23 11:22:36.016:E/AndroidRuntime(14646):原因:android.content.res.Resources$NotFoundException:资源 ID #0x7f0b0016

【问题讨论】:

  • 你在哪里存储 color.xml 文件?
  • 使用当前应用程序或组件上下文调用getResources().getColor(R.color.White);

标签: android android-resources


【解决方案1】:

使用getResources(),如下所示-

getResources().getColor(R.color.White);

而不是

Resources.getSystem().getColor(R.color.White);

根据Android documentationResources.getSystem() 只提供system-level resources,而不是应用程序级别的(如您的strings.xml 文件中的资源)。

更新:要在您的班级中提供上下文-

public class MyClass{
    Context context;
    MyClass(Context ctx){
        this.context = ctx;
    }
// your other stuff here
// Now you can access the context. like 
/* context.getResources().getColor(R.color.White); */
}

【讨论】:

  • getResources() 需要一个我没有的上下文(没有上下文,也没有getContext()
  • 您需要通过构造函数调用传递上下文,并为类设置上下文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
相关资源
最近更新 更多