R.styleable 无法解决,为啥?

Posted

技术标签:

【中文标题】R.styleable 无法解决,为啥?【英文标题】:R.styleable can not be resolved, why?R.styleable 无法解决,为什么? 【发布时间】:2011-10-04 06:16:03 【问题描述】:

我有一个 resources.xml 文件位于目录 values/ 下,那是

/values/resources.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="TheMissingTabWidget"> 
        <attr name="android:divider" /> 
    </declare-styleable> 
</resources>

在我的 java 代码中,当我尝试通过 R.styleable.TheMissingTabWidget 访问此资源时,eclipse 抱怨 styleable 无法解析或不是字段。为什么?为什么我无法访问此资源? (我使用的是 android 2.1-updated)。

【问题讨论】:

Android Hello, Gallery tutorial -- "R.styleable cannot be resolved" 的可能重复项 如果您仍然有问题 - 请检查您使用的是哪个 R。您必须使用您的项目 R 类 【参考方案1】:

请制作values/attrs.xml这样的资源

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="**com.admob.android.ads.AdView**"><--- where u want to use
       <attr name="backgroundColor" format="color" />
       <attr name="TextColor" format="color" />
       <attr name="keywords" format="string" />
       <attr name="refreshInterval" format="integer" />
    </declare-styleable>
</resources>

【讨论】:

【参考方案2】:

根据SDK Release Notes,

android.R.styleable 类及其字段已从公共 API 中移除,以更好地确保应用程序的前向兼容性。 android.R.styleable 中声明的常量是特定于平台的,并且可以跨版本进行任意更改,因此不适合应用程序使用。您仍然可以从您的资源或代码中访问平台的样式化属性。为此,请在项目的 res/values/R.attrs 文件中使用 a 声明自定义资源元素,然后在其中声明属性。例如,请参阅“sdk”/samples/ApiDemos/res/values/attrs.xml。有关自定义资源的更多信息,请参阅Custom Layout Resources。请注意,SDK 中仍提供 android.R.styleable 文档,但仅作为平台各种元素的样式属性的参考。

查看 ApiDemos 代码和文件 res/values/attrs.xml

【讨论】:

这并没有解释你如何将R.styleable 放入 attrs 文件中。【参考方案3】:

就我而言,我无意中使用了import android.R 而不是import com.&lt;mypackage&gt;.R

&lt;mypackage&gt; 替换为您的包名称(或者只是删除当前的导入,让 Android Studio 完成剩下的工作)。

【讨论】:

这是拯救我的答案。它应该比其他答案有更多的赞成票,超过 15 个赞成票甚至不是一个答案。 这应该是答案【参考方案4】:

您可以像这样访问您的包级别样式

<yourpackagename>.R.styleable.name

【讨论】:

【参考方案5】:

我在 Android Studio 中显示了一个未定义的样式错误,但随后我注意到构建成功。我确实使缓存无效并重新启动,问题就消失了。 (我花了很长时间才弄清楚。)

【讨论】:

【参考方案6】:

请务必使用:

import com.<your-package>.R

不是:

import android.R

【讨论】:

【参考方案7】:

您需要做的是在 attrs.xml 中声明您的样式,而不是在 resources.xml 中。然后你就可以像这样从你的代码中引用它:

R.styleable.TheMissingTabWidget

【讨论】:

以上是关于R.styleable 无法解决,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

NoClassDefFoundError:解析失败:Landroid/support/v7/appcompat/R$styleable

com.android.internal.R.styleable在哪里找到?

java.lang.NoClassDefFoundError:解析失败:Lcom/google/android/gms/R$styleable;在谷歌地图集成中

Android中View自定义XML属性详解以及R.attr与R.styleable的区别

Android中View自定义XML属性详解以及R.attr与R.styleable的区别

window的设置属性