【问题标题】:Initializing custom view in Android Studio: Expected resource of type xml在 Android Studio 中初始化自定义视图:xml 类型的预期资源
【发布时间】:2015-03-29 15:31:59
【问题描述】:

我有一个名为IconView 的自定义视图,它具有以下用于初始化的构造函数:

public class IconView extends RelativeLayout implements Checkable {

    ...

    public IconView(Context context, AttributeSet attrs, boolean useDefaultImage) {
        super(context, attrs);
        inflateLayout(context);

    ...

为了从 XML 中初始化 AttributeSet 实例以构建视图,我使用了 getResources().getXml(R.layout.icon_view), false);。 这编译成功并正确运行。但是,Android Studio 会突出显示代码并向我显示此错误:

错误的详细描述在这里:

预期的 xml 类型资源少... (Ctrl+F1) 报告两种类型的问题:

  • 提供了错误类型的资源标识符。例如,当 调用 Resources.getString(int id),你应该通过 R.string.something,而不是 R.drawable.something。

  • 传递错误 一个方法的常量,该方法期望一组特定的 常数。例如,当调用 View#setLayoutDirection 时, 参数必须是 android.view.View.LAYOUT_DIRECTION_LTR 或 android.view.View.LAYOUT_DIRECTION_RTL。

问题:

虽然代码有效,但我不知道如何重写它,以便错误在 Android Studio 中消失。这个错误在视觉上很烦人,那么我该如何摆脱它呢?

【问题讨论】:

    标签: android-studio android-custom-view compiler-warnings android-resources


    【解决方案1】:

    Resources#getXml(int id) 用于获取类型为 xml 的资源,该资源位于 xml 资源文件夹中。另一方面,您在这里传递 R.layout.icon_viewlayout 资源。
    在这里使用getResources().getLayout(R.layout.icon_view),错误就会消失。

    P.S.:Resources#getLayout() 上的文档说明如下:

    这个函数实际上是一个简单的包装器,用于使用布局资源调用 getXml(int)。

    所以看起来这是某种与 lint 相关的问题。无论哪种方式,getLayout() 都不会导致此错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多