您的位置:首页 > 移动开发 > Android开发

Android开发小记:命名空间错误导致自定义属性不生效

2017-09-12 17:49 471 查看

前言

好久没更新博文了,封闭开发一个多月,就问你怕不怕?最近在使用自定义控件的时候发现预览有效果,可是运行起来就不展示,最后才发现自己的布局中的命名空间有问题,导致了控件属性不生效。

命名空间

命名空间:namespace。在XML文件中提供避免元素命名冲突的一种方法。

同时,每个命名空间都是一组特定属性的集合标志。

举个栗子:

Android中常用的命名空间:android,tools。

自定义控件

在自定义的控件过程中,有时会自定义属性方便直接在布局中使用。

使用自定义控件,可以如下:

<tech.michaelx.view.TabIndicator xmlns:tabindicator="http://schemas.android.com/tools"
android:id="@+id/tab_indicator"
android:layout_width="200dp"
android:layout_height="60dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
tabindicator:selected_text_color="#FFFFFF"
tabindicator:unselect_text_color="#333333">


利用xmlns:即xml namespace,声明了一个新的命名空间:tabindicator=”http://schemas.android.com/tools”。tabindicator被称作命名空间前缀,用来访问自定义view的自定义属性。AS预览中可以看到相应的效果,可是运行到机器上后,却发现自定义属性没有作用,起初还以为是代码逻辑出了问题,后来才发现,命名空间出了问题,正确的命名空间应该为:

xmlns:tabindicator="http://schemas.android.com/apk/res-auto"


前缀可以任意自定义,后面的
链接
却应该注意,这应该是个常量:

"http://schemas.android.com/apk/res-auto"


改对命名空间之后就皆大欢喜了,本来是根据ide提示生成的命名空间,结果却错了,囧

没时间写长篇博文了,做个笔记,万一能帮到和我一样的糊涂蛋呢。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: