【问题标题】:Changing Color with LinearLayout and TextView in Java (Android)在 Java (Android) 中使用 LinearLayout 和 TextView 更改颜色
【发布时间】:2011-01-17 16:45:22
【问题描述】:

我是一个相对较新的 Android 开发人员,我注意到对我来说似乎很奇怪的事情,我希望有人能解释一下。我有 LinearLayout ll。

这行代码在执行时对我来说失败了:

ll.setBackgroundColor(R.color.white);

但是这行代码有效:

ll.setBackgroundResource(R.color.white);

我认为这仅仅是因为我在资源中定义了白色。但是,我也尝试在 setBackgroundColor() 中传递 0xFFFFFF ,但这也不起作用。

与我的 TextView 文本类似,这行代码在执行时会失败:

text.setTextColor(R.color.white);

我可以看到我的 TextView,所以我知道我正确地初始化了它(就像我也可以看到的 LinearLayout)。所以我想我的问题归结为:如何正确使用 LinearLayout.setBackgroundColor() 和 TextView.setTextColor() ?

提前非常感谢。我已经阅读了文档并尝试通过谷歌搜索在线查找信息,但没有提出任何建议。

【问题讨论】:

    标签: java android android-widget android-layout


    【解决方案1】:

    罗伯,

    问题在于 setBackgroundColor() 正在寻找颜色对象。所以你需要使用类似下面的行

    ll.setBackgroundColor(Color.WHITE);
    

    ll.setBackgroundColor(Color.parseColor("#ffffff"));
    

    而 setBackgroundResource 正在寻找用作背景的资源,即 res 文件夹中的某些东西。您可以使用它来将背景设置为可绘制对象或类似的东西。

    ll.setBackgroundResource(R.something.mydrawable);
    

    【讨论】:

    • 我需要导入什么才能使用 Color?谢谢!
    【解决方案2】:

    R.color.whatever 是一个整数。它是作为对外部定义(在 XML 中)资源的引用而自动生成的。当您使用此整数调用 setBackgroundColor 时,它会尝试将此 int 的值解析为颜色。 setBackgroundResource 期望获得传递给它的资源整数。它检索外部定义的值,然后以这种方式应用颜色。至于setBackgroundColor,请尝试使用包含 alpha 的完整十六进制值颜色,例如0xFFFFFFFF(前两个 F 值是 alpha 值)。

    编辑:被马克打败了! :P

    【讨论】:

    • 您添加 Alpha 字节的解决方案奏效了,非常感谢 :) Mark 的解决方案我敢肯定也会奏效,但他没有给我足够的信息来使用它。谢谢你们提供的所有信息,它真的帮了我很多:)
    • 很高兴为您提供帮助!为了回答您对 Mark 解决方案的评论,Color 只是一个标准的 Android 导入。如果您在 Eclipse 中,只需按 Ctrl+Shift+O 即可添加导入,或者如果您需要手动添加,则为 import android.graphics.Color;
    【解决方案3】:

    在我的例子中,我必须使用资源中定义的颜色整数和颜色。虽然它们都是整数,但它们必须具有某种格式才能与 setBackgroundColor(int colorInt) 和 setBackgroundResource(int resourceIdOfColor) 一起使用。

    我用过:

    int colorInt = getResources().getColor(R.color.resourceIdOfColor)
    

    以颜色 int 的格式获取 resId,这样我就可以在任何地方使用 setBackgroundColor。


    您可以在自己的代码中使用注释来区分两者:

    @ColorInt
    private int getColor(@ColorRes int id) {
        return getResources().getColor(id);
    }
    

    Android 框架 API 应该已经注解:

    public void setBackgroundResource(@DrawableResource int id);
    public void setBackgroundColor(@ColorInt int color);
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多