尝试使用自定义属性时为标记片段找到意外的命名空间前缀“自定义”
Unexpected namespace prefix “custom” found for tag fragment while trying to use custom attributes
我正在关注此 android developer page 以创建应用程序的自定义属性。一切正常,我也可以编译并查看结果。
但是出现问题的部分是 IDE.Android Studio 正在抱怨意外的命名空间自定义。有什么办法可以解决disable/hide这个错误信息吗?这很烦人。
即使出现此错误,我也能够编译 运行 应用程序。
我遵循了以下步骤。
1) 创建了 res/values/attrs.xml 文件并添加了
<?xml version="1.0" encoding="utf-8"?> <resources>
<declare-styleable name="FragArguments">
<attr name="max_allowed" format="integer"/>
<attr name="header" format="string"/>
</declare-styleable>
2) 尝试在我的主布局文件的片段标签中使用
<LinearLayout xmlns:custom="http://schemas.android.com/apk/res"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1">
<fragment android:id="@+id/msg"
android:name="org.android.fragment.MessageFragment"
custom:max_allowed="85"
custom:header="@string/header"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
</LinearLayout>
3。通过覆盖 fragment
的 onInflate() 方法的代码应用自定义属性
@Override
public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
super.onInflate(activity, attrs, savedInstanceState);
TypedArray typedArray = activity.obtainStyledAttributes(attrs, R.styleable.FragArguments);
max_allowed = typedArray.getInt(R.styleable.FragArguments_max_allowed, -1);
header = typedArray.getString(R.styleable.FragArguments_header);
typedArray.recycle();
}
我刚刚找到解决方案。
issue ID MissingPrefix 告诉 lint 只扫描缺少 Android 命名空间的 XML 属性 prefix.So 我们可以这样做两种方式:--
- 可以发出以下命令扫描主工程目录及其子目录下的文件。
lint --check MissingPrefix myproject
- 在android studio 中创建一个包含以下内容的lint.xml 文件并添加到app 目录中。
<?xml version="1.0" encoding="utf-8"?>
<lint>
<issue id="MissingPrefix" severity="ignore"/>
</lint>
感谢@Nicks 的回答。您还可以将以下行添加到 build.gradle 文件中,在 android {} 范围内:
lintOptions {
disable 'MissingPrefix'
}
我正在关注此 android developer page 以创建应用程序的自定义属性。一切正常,我也可以编译并查看结果。 但是出现问题的部分是 IDE.Android Studio 正在抱怨意外的命名空间自定义。有什么办法可以解决disable/hide这个错误信息吗?这很烦人。
即使出现此错误,我也能够编译 运行 应用程序。
我遵循了以下步骤。
1) 创建了 res/values/attrs.xml 文件并添加了
<?xml version="1.0" encoding="utf-8"?> <resources>
<declare-styleable name="FragArguments">
<attr name="max_allowed" format="integer"/>
<attr name="header" format="string"/>
</declare-styleable>
2) 尝试在我的主布局文件的片段标签中使用
<LinearLayout xmlns:custom="http://schemas.android.com/apk/res"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1">
<fragment android:id="@+id/msg"
android:name="org.android.fragment.MessageFragment"
custom:max_allowed="85"
custom:header="@string/header"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
</LinearLayout>
3。通过覆盖 fragment
的 onInflate() 方法的代码应用自定义属性 @Override
public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
super.onInflate(activity, attrs, savedInstanceState);
TypedArray typedArray = activity.obtainStyledAttributes(attrs, R.styleable.FragArguments);
max_allowed = typedArray.getInt(R.styleable.FragArguments_max_allowed, -1);
header = typedArray.getString(R.styleable.FragArguments_header);
typedArray.recycle();
}
我刚刚找到解决方案。
issue ID MissingPrefix 告诉 lint 只扫描缺少 Android 命名空间的 XML 属性 prefix.So 我们可以这样做两种方式:--
- 可以发出以下命令扫描主工程目录及其子目录下的文件。
lint --check MissingPrefix myproject
- 在android studio 中创建一个包含以下内容的lint.xml 文件并添加到app 目录中。
<?xml version="1.0" encoding="utf-8"?> <lint> <issue id="MissingPrefix" severity="ignore"/> </lint>
感谢@Nicks 的回答。您还可以将以下行添加到 build.gradle 文件中,在 android {} 范围内:
lintOptions {
disable 'MissingPrefix'
}