我试图在一些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"
添加到文本视图
不过,另一方面,我通常对自定义视图使用自定义属性:-)