【问题标题】:R cannot be resolved to a variable [duplicate]R无法解析为变量[重复]
【发布时间】:2011-07-06 02:06:38
【问题描述】:

我从here获得了所有这些代码

我对这一切都非常陌生,并且遇到了一些问题。

此代码的粗体部分出现错误“R 无法解析为变量”。

    Resources r = context.getResources();

    **setBackgroundColor(r.getColor(R.color.candidate_background));

    mColorNormal = r.getColor(R.color.candidate_normal);
    mColorRecommended = r.getColor(R.color.candidate_recommended);
    mColorOther = r.getColor(R.color.candidate_other);
    mVerticalPadding = r.getDimensionPixelSize(R.dimen.candidate_vertical_padding);**

    mPaint = new Paint();
    mPaint.setColor(mColorNormal);
    mPaint.setAntiAlias(true);
    **mPaint.setTextSize(r.getDimensionPixelSize(R.dimen.candidate_font_height));**
    mPaint.setStrokeWidth(0);

我唯一能想到的就是我没有正确复制和粘贴所有内容?

【问题讨论】:

  • 它可能不是一个 Android 项目,或者你没有构建它...R 是一个“生成的”源文件...它是自动创建的。
  • 不,我没有构建它。我是从 android 开发者网站上下载的。

标签: java android


【解决方案1】:

R 是一个 Java 类文件,它基本上通过为应用程序使用的每个资源分配一个整数值以进行查找来维护资源索引。如果您查看您所关注的示例的res 目录,您会看到它下面的values 目录包含一个定义任何自定义颜色的colors.xml 文件。请注意,在这个特定示例中,您使用的是 color 资源,而不是 Paul 提到的 Color State List 资源。颜色状态资源位于color 目录中,但简单颜色的定义位于values 目录中。令人困惑,我知道。

Android 中的资源是通过 XML 文件定义的。在解析这些 XML 文件时,Android 构建过程会自动创建 R.java。需要将不同类型的资源放在特定目录中,以使 R 结构正确;当您在 IDE 下创建新项目时,并非所有目录都会自动为您创建。

Read this article about Application Resourcesthis article about providing resourcesthis article about accessing resources(所有 Google 文档)以便更好地理解。

最后,如果您的所有 XML 文件都在正确的位置,请检查您的导入语句。有时,如果您有太多导入或所有导入都没有到位,则可能会出现冲突;如果您使用 Eclipse 插件形式的官方 Android 开发工具,处理导入的最简单方法是使用 Ctrl+Shift+O 快捷方式(在 Mac 上为 Cmd+Shift+O)。如果您的导入是正确的,并且您的所有 XML 文件都已就位,请对项目执行重建。如果这仍然不起作用并且您正在使用 Eclipse,我知道有时只需关闭 Eclipse 并重新启动它,就可以莫名其妙地解决资源解析冲突。

【讨论】:

    【解决方案2】:

    R 是由您的资源自动生成的文件。

    取自Android docs

    颜色状态列表资源

    定义一个变化的颜色资源 基于视图状态。已保存 在 res/color/ 中并从 R.color 类访问。

    我猜不同的 R.color.candidate_* 都需要在 res/color/ 下定义

    【讨论】:

    • 在这个具体示例中,颜色定义实际上是在 res/value 中而不是 res/color 中,因为不改变状态的自定义颜色不被视为“颜色状态资源列表”。 Google 自己建议将颜色等“简单”定义放入值中,并且颜色目录应仅用于颜色状态列表。我认为这很愚蠢。
    【解决方案3】:

    R.java 文件应该是 Android 自动生成的。请尝试以下操作:

    1. 如果您使用的是 Eclipse,请尝试“project clean”重新生成文件。
    2. 使用 Ctrl-Shift-O 来“重新组织”您的导入。如有必要,这会自动将 R.java 文件添加到您的导入中。
    3. 尝试修复所有与 R 文件无关的错误,然后重试“项目清理”和 Ctrl-Shift-O 选项。其他错误(例如,您的 xml 布局文件中的拼写错误)可能会通过项目清理“阻止”新的 R 文件构建。
    4. 确保您的项目是一个 Android 项目,并且您的类路径中有一个 android.jar 文件。如果没有解决此问题,请重试第 1-3 步

    【讨论】:

    • 我无法告诉你有多少次 XML 拼写错误让我感到困惑。
    【解决方案4】:

    您需要将正在使用的示例中的资源复制到 res 文件夹中的相关目录中。第一个词(在 R. 之后)是您使用的目录。

    所以对于 R.color,您将资源放在项目中的 res/color 中。

    对于示例,资源在这里: http://developer.android.com/resources/samples/SoftKeyboard/res/index.html

    它们也应该在您下载的 android SDK 版本中:

    ADKPATH/samples/android-/SoftKeyboard/

    【讨论】:

      【解决方案5】:

      我多次收到此错误消息。而且大多数都是由 xml 文件中的一些错误引起的,或者我忘记在“自动生成”选项前面加上“检查”。试试看!也许对你有帮助。

      【讨论】:

        猜你喜欢
        • 2015-01-12
        • 2011-06-23
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 2016-08-29
        相关资源
        最近更新 更多