Android总结:命名空间

在使用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布局文件中,必须在根元素上定义这个命名空间;
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 {
    ... ...
    buildTypes {
        release {
            //启动资源压缩
            shrinkResources true
            minifyEnabled t
  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值