码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 诡异错误 Unresolved reference: styleable


    开发了一个自定义Android UI控件,继承自View,然后想要在布局XML里像原生控件一样随意配置属性,怎么做呢?分三步:

    第一步:在res/values目录下创建attrs.xml,然后声明自定义属性

    1. "1.0" encoding="utf-8"?>
    2. <resources>
    3. <declare-styleable name="PointCaptureView">
    4. <attr name="pcv_curve_color" format="color|reference"/>
    5. declare-styleable>
    6. resources>

    上面示例中,declare-styleable节点的name即为控件名字,下面的子节点就是自定义属性,可以声明多个,依次添加即可。这里我们定义了一个名为pcv_curve_color的属性,其类型为一个颜色值。

    第二步:在自定义控件类的构造函数中读取自定义属性值

    1. class PointCaptureView : View {
    2. constructor(context: Context, attr: AttributeSet?, @AttrRes defStyleAttr: Int) : super(context, attr, defStyleAttr) {
    3. val a = context.obtainStyledAttributes(attr, R.styleable.PointCaptureView, defStyleAttr, 0)
    4. canvasPaintColor = a.getColor(R.styleable.PointCaptureView_pcv_curve_color, Color.YELLOW)
    5. a.recycle() // 别忘了这一句
    6. // 其他初始化代码
    7. // ...
    8. }
    9. }

    第三步:在布局XML中配置自定义属性

    1. <com.example.testbedandroid.widgets.PointCaptureView
    2. android:id="@+id/hapticView"
    3. android:layout_width="match_parent"
    4. android:layout_height="120dp"
    5. app:pcv_curve_color="@color/green"/>

    大功告成!但问题也来了:编译出错:Unresolved reference: styleable。这是怎么回事呢?参考了GitHub上的其他示例,没发现有啥毛病呀!百思不得其解……

    不卖关子了!注意那条警告信息:Don't include `android.R` here; use a fully qualified name for each usage instead,问题就在这儿啦!写代码过程中碰到无法解析的符号时,按Alt + Enter太顺了——当有多个解析来源时,一不小心就会搞错。回到我们的例子中,这个R应该解析为 {你的包名}.R 而不是 android.R ,赶紧在源文件头部把import android.R删了,然后在构造函数编译错误处重新按下Alt + Enter,欧拉~

  • 相关阅读:
    读完大呼过瘾的计算机书籍
    C#程序变量统一管理例子 - 开源研究系列文章
    云原生写进上海 “十四五” | 上海市信息服务业行业协会领导一行调研「DaoCloud 道客」
    1.10 while语句(Python)
    Java高性能解析器实现思路及方法
    Redis的优惠券秒杀问题(五)全局唯一ID 以及 秒杀下单
    SpringBoot中文乱码问题解决方案
    机器学习库Scikit-Learn(线性模型、岭回归、插入一列数据(insert)、提取所需列、向量机(SVM)、聚类)
    Springboot 配置使用 Elasticsearch
    Rabbitmq参数优化
  • 原文地址:https://blog.csdn.net/happydeer/article/details/126687317
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号