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

来源:互联网 发布:阿里云学生特惠 编辑:程序博客网 时间:2024/05/16 02:19

前言

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

命名空间

命名空间: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提示生成的命名空间,结果却错了,囧

没时间写长篇博文了,做个笔记,万一能帮到和我一样的糊涂蛋呢。。。

阅读全文
1 0
原创粉丝点击