在布局中的子元素中使用非android命名空间前缀

Tur*_*rix 8 xml eclipse android namespaces android-layout

我试图在一些Android布局中使用自定义属性,但是当我尝试使用除android:子元素之外的命名空间前缀时,我收到了一个错误(来自Eclipse).请注意,当我custom:在文件的root/parent元素中使用名称空间前缀时,它可以正常工作,而不是子元素.

例如,这是一个指定了自定义命名空间的简单布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    custom:my_tag1="whatever">                            <!-- compiles fine -->

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitCenter"
        custom:my_tag2="true"/>                           <!-- generates an error -->
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

Eclipse给出的错误(仅在第二次尝试使用custom:前缀时)是:

为标记ImageView找到了意外的名称空间前缀"custom".

如果我使用我的根元素ImageView而不是a LinearLayout,则接受前缀.因此,在子元素中使用命名空间前缀似乎只是一个问题.

此外,如果我尝试向xmlns:custom="http://schemas.android.com/apk/res-auto"ImageView 添加另一个属性,它也会抱怨.

如果有帮助,这里是attrs.xml我正在使用的文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="my_tag1" format="string"/>
    <attr name="my_tag2" format="boolean"/>
</resources>
Run Code Online (Sandbox Code Playgroud)

我在网上看到一些东西让我相信我想做的事应该是可能的.例如,在这里接受的答案中,Qberticus在子类中使用前缀"whatever".同样在这里的帖子.

我不明白.使用非android命名空间前缀只是不允许子元素,或者我做错了什么?

N.T*_*.T. 2

可以忽略,我一直都是这么做的,没有遇到什么问题。要让它消失,您需要设置以下内容:

  1. 添加xmlns:tools="http://schemas.android.com/tools"到您的根视图
  2. 添加tools:ignore="MissingPrefix"到您的文本视图

不过,顺便说一句,我通常将自定义属性与自定义视图一起使用:-)