我试图在一些android布局中使用自定义属性,但是当我试图在子元素中使用android:以外的名称空间前缀时(来自eclipse)出现错误。注意,当我在文件的根/父元素中使用custom:名称空间前缀时,它可以正常工作,而不是子元素。
例如,下面是一个指定了自定义命名空间的简单布局:

<?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>

eclipse给出的错误(仅在第二次尝试使用custom:前缀时)是:
为标记ImageView找到意外的命名空间前缀“custom”。
如果将根元素设置为ImageView而不是LinearLayout,则接受前缀。因此,在子元素中使用名称空间前缀似乎只是一个问题。
另外,如果我试图向imageview添加另一个xmlns:custom="http://schemas.android.com/apk/res-auto"属性,它也会抱怨。
如果有帮助,这里是我在上面使用的attrs.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="my_tag1" format="string"/>
    <attr name="my_tag2" format="boolean"/>
</resources>

我在网上看到一些东西,让我相信我想做的事情应该是可能的。例如,在接受的答案here中,qberticus在子类中使用前缀“whatever”。类似地,在here后。
我不明白。子元素不允许使用非android名称空间前缀,还是我做错了什么?

最佳答案

它可以忽略,我总是这样做,我没有遇到任何问题。
要使其消失,您需要设置以下内容:
xmlns:tools="http://schemas.android.com/tools"添加到根视图
tools:ignore="MissingPrefix"添加到文本视图
不过,另一方面,我通常对自定义视图使用自定义属性:-)

07-24 09:45
查看更多