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

前言

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

命名空间

命名空间: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值