在使用lint工具进行代码检测的时候,有一个XML类型的报错如下:Namespace declaration is never used(错误代码如下图)。
脑海里突然浮现起一个名词—命名空间,由于一直以来对这个知识点理解不是很透彻,查阅相关资料并学习总结如下;
一、命名空间简介
1.命名空间作用
作用:提供避免元素命名冲突的方法,里面存放的是特性属性的集合;
例如:Android的View存在id属性—代表View的唯一id,而你自定义的View也想自定义一个id属性—代表该类型View编号。那么这个时候命名空间就派上用场了,你可能会分别生成android:id和myview:id代表两个属性(android和myview即命名空间的名称);
2.命名空间分类
在Android中的命名空间可分为3种,如下:
android命名空间:xmlns:android="http://schemas.android.com/apk/res/android;
tools命名空间:xmlns:tools="http://schemas.android.com/tools;
自定义命名空间:xmlns:app="http://schemas.android.com/apk/res-auto"
二、命名空间实践
2.1 android命名空间
android命名空间包含了系统提供了很多属性。在Android布局文件中,必须在根元素上定义这个命名空间;
qproject:namespace-prefix,实际就是命名空间的名字;
http://schemas.android.com/apk/res/android:一个URI(统一资源标示符),值固定不变,相当于一个常量;
大家应该注意到了,布局中命名空间名字我们使用qproject:替代了android:,以qpoject:开头的属性便是引用了命名空间http://schemas.android.com/apk/res/android中的属性, 这样也可以正常编译运行;
2.2 tools命名空间
2.2.1 tools命名空间简介
Android Studio在tools命名空间支持各种属性,来实现设计时功能(如在你的布局中显示哪个fragment)或者编译时行为(如给你的XML资源使用哪种压缩模式 )。当你构建你的app的时候,构建工具会移除这些属性,所以对于你的APK的大小和运行时行为没有影响。
为了使用这些属性,在你想使用它们的每个XML文件的根元素添加tools命名空间—xmlns:tools="http://schemas.android.com/tool",如下所示:
tools:ignore
该属性为错误处理属性,告知Lint工具忽略相关类型ID错误的检测;
1.查看鼠标悬停在lint检测错误处,弹框提示错误如下:
2.Alt+Enter(Eclipse快捷键)提示处理选择,使用tools:ignore="ContentDescription"提示lint忽略该问题;
3.添加后无lint错误提示;
注意:在某些错误警告,Alt+Enter无处理选择提示,需要手动输入tools:ingore="xxx"。如果不知道相关问题ID,在Android Studio->Analyze->Inspect Code->选择你想检查的目录+检查配置->点击OK按钮。执行检查后,在Inspection窗口右侧选在相关错误,左侧即提示该错误类型的ID;
tools:intead of android:
该属性为设计时视图属性,向布局预览器中插入样本数据,在运行时无效果;
1.在TextView视图中除android:text之外添加tools:text属性,在布局预览器观察生效text为tools:text="TextView2";
2.构建运行应用,观察在运行时生效文案为android:text="TextView1";
tools:shrinkMode
该属性为资源压缩属性,指定构建工具执行资源压缩时使用的模式;
1.knowledge模块src/res/drawable目录下存在两个位图文件dyused_knowledge_img.png和unused_knowledge_img.png,在NameSpaceActivity.java中动态引用dyused_knowledge_img.png位图;
knowledge/src/main/java/com/qproject/knowledge/NameSpaceActivity.java文件
main/build.gradle文件
脑海里突然浮现起一个名词—命名空间,由于一直以来对这个知识点理解不是很透彻,查阅相关资料并学习总结如下;
一、命名空间简介
1.命名空间作用
作用:提供避免元素命名冲突的方法,里面存放的是特性属性的集合;
例如:Android的View存在id属性—代表View的唯一id,而你自定义的View也想自定义一个id属性—代表该类型View编号。那么这个时候命名空间就派上用场了,你可能会分别生成android:id和myview:id代表两个属性(android和myview即命名空间的名称);
2.命名空间分类
在Android中的命名空间可分为3种,如下:
android命名空间:xmlns:android="http://schemas.android.com/apk/res/android;
tools命名空间:xmlns:tools="http://schemas.android.com/tools;
自定义命名空间:xmlns:app="http://schemas.android.com/apk/res-auto"
二、命名空间实践
2.1 android命名空间
android命名空间包含了系统提供了很多属性。在Android布局文件中,必须在根元素上定义这个命名空间;
xmlns:android="http://schemas.android.com/apk/res/android" ,如下:
<RelativeLayout xmlns:qproject="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
qproject:id="@+id/activity_name_space"
qproject:layout_width="match_parent"
qproject:layout_height="match_parent"
... ...
tools:context="com.qproject.knowledge.NameSpaceActivity">
<TextView
qproject:layout_width="wrap_content"
qproject:layout_height="wrap_content"
qproject:text="namespace" />
</RelativeLayout>
xmlns:声明我们要开始定义一个命名空间;
qproject:namespace-prefix,实际就是命名空间的名字;
http://schemas.android.com/apk/res/android:一个URI(统一资源标示符),值固定不变,相当于一个常量;
大家应该注意到了,布局中命名空间名字我们使用qproject:替代了android:,以qpoject:开头的属性便是引用了命名空间http://schemas.android.com/apk/res/android中的属性, 这样也可以正常编译运行;
2.2 tools命名空间
2.2.1 tools命名空间简介
Android Studio在tools命名空间支持各种属性,来实现设计时功能(如在你的布局中显示哪个fragment)或者编译时行为(如给你的XML资源使用哪种压缩模式 )。当你构建你的app的时候,构建工具会移除这些属性,所以对于你的APK的大小和运行时行为没有影响。
为了使用这些属性,在你想使用它们的每个XML文件的根元素添加tools命名空间—xmlns:tools="http://schemas.android.com/tool",如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
... ...
tools:context="com.qproject.knowledge.NameSpaceActivity">
<TextView ... ... />
</RelativeLayout>
2.2.2 tools命名空间实践tools:ignore
该属性为错误处理属性,告知Lint工具忽略相关类型ID错误的检测;
1.查看鼠标悬停在lint检测错误处,弹框提示错误如下:
2.Alt+Enter(Eclipse快捷键)提示处理选择,使用tools:ignore="ContentDescription"提示lint忽略该问题;
3.添加后无lint错误提示;
注意:在某些错误警告,Alt+Enter无处理选择提示,需要手动输入tools:ingore="xxx"。如果不知道相关问题ID,在Android Studio->Analyze->Inspect Code->选择你想检查的目录+检查配置->点击OK按钮。执行检查后,在Inspection窗口右侧选在相关错误,左侧即提示该错误类型的ID;
tools:intead of android:
该属性为设计时视图属性,向布局预览器中插入样本数据,在运行时无效果;
1.在TextView视图中除android:text之外添加tools:text属性,在布局预览器观察生效text为tools:text="TextView2";
2.构建运行应用,观察在运行时生效文案为android:text="TextView1";
tools:shrinkMode
该属性为资源压缩属性,指定构建工具执行资源压缩时使用的模式;
1.knowledge模块src/res/drawable目录下存在两个位图文件dyused_knowledge_img.png和unused_knowledge_img.png,在NameSpaceActivity.java中动态引用dyused_knowledge_img.png位图;
knowledge/src/main/java/com/qproject/knowledge/NameSpaceActivity.java文件
public class NameSpaceActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_namespace);
//动态引用dyused_knowledge_img图片,在safe模式下保留
int res = getResources().getIdentifier("dyused_knowledge_img", "drawable", getPackageName());
}
}
2.主项目main的构建文件main/build.gradle配置资源压缩(在knowledge配置不生效),;
main/build.gradle文件
apply plugin: 'com.android.application'
android {
... ...
buildTy