首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我在自定义视图类中使用R.styleable时,我得到一个红色的未解析引用: styleable

当在自定义视图类中使用R.styleable时,如果出现红色的未解析引用"styleable",通常是由于以下几个原因:

  1. 缺少依赖库:确保在项目的build.gradle文件中正确添加了相关的依赖库。例如,对于Android开发,需要在dependencies部分添加类似于implementation 'com.android.support:appcompat-v7:28.0.0'的依赖。
  2. 编译版本不匹配:检查项目的编译版本是否与使用的依赖库版本相匹配。如果编译版本过低,可能会导致无法解析相关的引用。
  3. 命名空间错误:在自定义视图类中使用R.styleable时,需要确保在XML布局文件中正确声明命名空间。例如,在布局文件的根元素中添加类似于xmlns:app="http://schemas.android.com/apk/res-auto"的命名空间声明。
  4. 清理和重新构建项目:有时候,项目中的构建缓存可能会导致一些问题。尝试清理和重新构建项目,可以通过点击Android Studio菜单中的"Build"选项,然后选择"Clean Project"和"Rebuild Project"来完成。

总结:当在自定义视图类中使用R.styleable时,出现红色的未解析引用"styleable"通常是由于缺少依赖库、编译版本不匹配、命名空间错误或项目构建问题所致。请按照上述步骤逐一排查并解决问题。如果问题仍然存在,请提供更多的上下文信息以便更好地帮助解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2014-11-3Android学习------关于R.styleable的问题(一)API学习--------GIF动画实现

官网首先给出了这一段话:就我理解翻译下 一个设计非常好的自定义视图在很大程度上(或者说非常)像其他任何任何设计良好的类。...在Android框架中的任何一个视图类都是继承View(android.view.View),自定义视图也可以直接继承一个视图,你可以通过继承一个已经存在的子视图来节约你的时间,例如:Button...(总之一句话,你可以使用XML文件来定义自己定义的视图的外观和行为),要做到这样,你必须做到以下几点: 1.在XML资源文件中通过这个标签去为你的视图定义自定义属性...这里告诉我们,一般我们去定义自己的视图类的时候,类名最好使用 styleable name="PieChart">中name的定义的名字,与它保持一致。当然它也不是绝对必要的。...接口里放你想要做的事务处理, 2.在activity类中去new 这个类中的接口,就可以重写这个函数,当然是在某一个点击事件函数的参数中,例如 btn.setOnClickListoner(new

2.1K20

2014-11-8Android学习------Android抽屉效果的实现案例--------动画Animation学习篇

> 在attrs.xml文件中定义了两个styleable>标签: 1....styleable name="SmoothButton"> 这两个都自动生成在R.styleable的类中, 需要注意的是一个知识点:TypedArray这个数组当用完了要记得随时回收...1.加载属性 2.确定布局的方向 3.确定抽屉的状态 4.手势识别事务的处理 这四件事我们放在后面说,这里先把必须要做的事说完,那就是当我们继承LinearLayout类的时候必须要重载的函数:...,为什么要用动画呢,我们还是用效果来说说: 未打开 打开这个过程 画布是一个慢慢移动的过程,这里存在一个一个动画的过程: 这个函数是一个View类的一个函数,将调用线程去执行,先不管这个函数...Panel.this); } else { panelListener.onPanelOpened(Panel.this); } } } 关于panelListener变量,是自定义视图的一个回调函数接口类型

1.5K20
  • android 自定义控件 使用declare-styleable进行配置属性(源码角度)「建议收藏」

    最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的配置属性进行配置,于是便查询了解了下declare-styleable,下面我把自己的使用感受和如何使用进行说明下。...在自定义控件的时候,会要求构造3个方法中的一个或多个,好比我自定义的控件PersonView, public PersonView(Context context) { super(context)...); 这个就是系统在默认的资源文件R.styleable中去获取相关的配置。...下面我要写一个继承了TextView的PersonView类,给它设定属性配置,之后实现属性的显示。...) 包名是配置文件中 package=”com.example.declare_styleable” 这样格式的 之后在布局中自定义的类中设相关属性: 你自己定义的名称:你设的属性 =”属性值”;

    1.4K20

    Kotlin入门(24)如何自定义视图

    在res\values目录下创建attrs.xml,文件内容如下所示,其中declare-styleable的name属性值表示新视图的名称,两个attr节点表示新增的两个属性分别是textColor和...的节点名称改为自定义视图的全路径名称如“com.example.custom.widget.PagerTab”,同时在该节点下指定新增的两个属性即app:textColor与app:textSize。...,其中第二步骤涉及到Java代码,接下来用Kotlin改写CustomPagerTab类的代码,主要改动有以下两点: 1、原来的两个构造函数,合并为带默认参数的一个主构造函数,并且直接跟在类名后面;...因为布局文件中引用了自定义视图的节点,系统是通过SDK里的Java代码找到自定义视图类,所以凡是自定义视图都要加上该注解,否则App运行时会抛出异常。...下面是CustomPagerTab类改写之后的Kotlin代码: //自定义视图务必要在类名后面增加“@JvmOverloads constructor”,因为布局文件中的自定义视图必须兼容Java class

    1.4K30

    Android UI布局优化之ViewStub

    一种是在类被加载的时候就完成单例对象的初始化,一种是在需要使用该单例的时候才初始化。 在android的视图设计中,同样需要使用的这样的设计模式。 这样的视图加载起来需要耗费很多的时间。...在这几百个视图里面,可能有部分视图是在点击某一按钮也就是并不是马上加载, 而是延迟到要使用的时候才加载这部分视图。也就是类似于单例模式中的懒加载。 特性: 1....inflate方法会返回待加载视图的根节点 使用: 我在一个activity上放置了一个按钮,点击后加载懒加载的视图。 Activity布局文件定义my_sub_activity.xml: 视图前后的对比图: 为了说明视图树在加载前后的对比,我使用hierarchyviewer视图树查看工具,做了一个前后对比图: 加载前视图树: 加载后视图树: 从上面的两个视图树中我们明显发现...(如果没有声明成成员变量的话,也就是没有强引用) 源码解析: 下面针对ViewStub的特性对源码进行解析: 特性一:ViewStub是一个继承了View类的视图。

    1K20

    Carson带你学Android:手把手教你写一个完整的自定义View

    前言 自定义View是Android开发者必须了解的基础 今天,我将手把手教你写一个自定义View,并理清自定义View所有应该的注意点 目录 1....具体实例 接下来,我将用自定义View中最常用的继承View来说明自定义View的具体应用和需要注意的点 4.1 继承VIew的介绍 在下面的例子中,我将讲解: 如何实现一个基本的自定义View(继承...理解View的构造函数 对于绘制内容为何在复写onDraw()里实现,具体请看我写的文章:自定义View Draw过程- 最易懂的自定义View原理系列(4) 步骤2:在布局文件中添加自定义View类的组件...使用步骤有如下: 在values目录下创建自定义属性的xml文件 在自定义View的构造方法中解析自定义属性的值 在布局文件中使用自定义属性 下面我将对每个步骤进行具体介绍 步骤1:在values...="@drawable/图片ID|#00FF00" /> 步骤2:在自定义View的构造方法中解析自定义属性的值 此处是需要解析circle_color属性的值 // 该构造函数需要重写 public

    1.9K10

    手把手教你写一个完整的自定义View

    在下面的例子中,我将讲解: 如何实现一个基本的自定义View(继承VIew) 如何自身支持wrap_content & padding属性 如何为自定义View提供自定义属性(如颜色等等) 实例说明:画一个实心圆...对于绘制内容为何在复写onDraw()里实现,具体请看我写的文章:自定义View Draw过程- 最易懂的自定义View原理系列(4) 步骤2:在布局文件中添加自定义View类的组件 activity_main.xml...使用步骤有如下: 在values目录下创建自定义属性的xml文件 在自定义View的构造方法中解析自定义属性的值 在布局文件中使用自定义属性 下面我将对每个步骤进行具体介绍 步骤1:在values...="@drawable/图片ID|#00FF00" /> 步骤2:在自定义View的构造方法中解析自定义属性的值 此处是需要解析circle_color属性的值 // 该构造函数需要重写 public...// 解析集合中的属性circle_color属性 // 该属性的id为:R.styleable.CircleView_circle_color // 将解析的属性传入到画圆的画笔颜色变量当中

    1.8K20

    2014-11-8Android学习-------onFinishInflate方法-------动画Animation学习篇

    onFinishInflate 我们一般使用View的流程是在onCreate中使用setContentView来设置要显示Layout文件或直接创建一个View, 在当设置了ContentView之后系统会对这个...View进行解析,然后回调当前视图View中的onFinishInflate方法。...只有解析了这个View我们才能在这个View容器中获取到拥有Id的组件,同样因为系统解析完View之后才会调用onFinishInflate方法, 所以我们自定义组件时可以onFinishInflate...方法中获取指定子View的引用。...: 就是一个作用:获取指定子View布局文件中组件的引用,也就是找到这个组件的ID onFinishInflate 当View中所有的子控件均被映射成xml后触发 我们接下来就是怎么使用的问题

    78230

    界面无小事(五):自定义TextView

    效果图 前言 写第四篇滚动选择器的时候, 在自定义视图这里含糊了, 有些地方没说清楚, 这次补上关于自定义视图的部分. 自定义属性 自定义视图的一个要点就是添加自定义属性....这里我们填上三个常用的, 文本, 颜色, 字号. 然后在布局文件中就可以使用了. 最后在自定义类中获取属性并赋值. 类官方文档 关于onMeasure方法, 最重要的就是就是MeasureSpec类的使用了....高度涉及到我在第四篇写的Paint.FontMetrics类, 就是用底部减去顶部取绝对值....颜色解析 Color是个要处理的类, 当你用getColor函数获取到函数, 它是一个int值, 如果我们需要重新在原有颜色基础上变化, 就需要解析这个int, 将它还原成RGB. /** *

    28230

    自定义View(七)-View的工作原理- Activity的布局加载

    前言 前面几篇对动画可以说是做了非常全面的总结了(上篇文章最后的4种ViewGroup相关动画相信在了解基础后看些文章也不会太难理解)。在View的工作原理 这一部分我们将对View做全面深入的解析。...因为我觉得Activty是呈现应用界面的载体,所有的View都在Acitivity中,并且在理解Activity的启动XML的加载也是一种了解View工作原理的一个很好的入口。...Window#setContentView(),但是Window是一个抽象类setContentView是一个抽象方法,并且的进去getWindow()方法中发现他里面返回mWindow,那么我只需要知道...在generateDecor()方法中主要是创建了一个DecorView。DecorView它是什么呢?其实他是PhoneWindow中的一个内部类。继承FrameLayout。...以简短,清晰,易懂(和我一样工作时间短的小伙伴)来分析。 关于自定义View设计的知识点非常多我觉得也很难掌握,所以利用文章来记录想,希望对大家有些帮助。

    87630

    android declare-styleable 和style,android – declare-styleable和style之间的区别

    在attrs.xml中,您可以直接在“资源”部分内或在“declare-styleable”中声明自定义属性: 所以现在我们将“attrib1”定义为不风格,“attrib2”为风格。...在layout / someactivity.xml中,我们可以直接使用这些属性(不需要命名空间): 您可以在style.xml声明中使用“styleable”属性“attrib2”。...让我们假设我们这样做:我们将attrib1直接设置在XML中,我们将attrib2设置为一个样式。...在其他地方,我已经看到说明“blahblah”必须是使用这些属性的自定义视图类的名称,并且您需要使用命名空间来引用布局XML中的自定义属性。但似乎没有必要。...在我在Web上看到的大多数教程和示例中,只使用了getsStyledAttributes()。但是,这不适用于直接在布局中声明的属性,而不使用样式。

    53530

    Attributable_文件属性里没有自定义

    大家好,又见面了,我是你们的朋友全栈君 在做项目的时候,用没人写的代码和看Android源码时,经常看attr.xml的使用,每次都不知道是什么意思,今天网上查了些资料,终于明白了,这里做一个笔记,方便以后使用...View在不同的模块使用中传入的View是不同的,这时候有两种方法,一种方法就是在自定义ListView控件类中提供一个公开的接口给外部调用从而将View动态的传入进去;另外一种方法就是在通过自定义控件属性...其实就是各种属性的集合,如果defStyleAttr为0或者在Theme中没有找到相应的style, 则 才会尝试从defStyleRes获取属性值,defStyleRes表示的是一个style的id,...R文件中会有styleable和attr这两个类,当我们要使用哪个属性集合或哪个属性的时候用的是styleable, 而attr类定义的仅仅是attr这个属性在layout中的id....com.android.tutor “蓝色 是自定义属性的前缀,红色是我们包名.

    53440

    android自定义控件一站式入门

    类似color、string等资源那样,每一个使用attr标签定义的属性,在R.styleable类中会生成一个对应的静态只读int类型的字段作为其id。...getAttributes方法首先获得一个TypedArray对象,根据R.styleable类中对应每个attribute的id字段从TypedArray对象中获取attribute的值。...解析到attribute值后,赋值给对应的字段,这样就完成了在xml中为控件对象提供初始值的目标。 TypedArray是一个共享的资源对象,使用完毕就立即执行recycle释放对它的占用。 4....在自定义ViewGroup时,需要在onMeasure中完成对自身childViews的测量才可以正确得到自身的大小。...上面计算转动后指示点落在哪个扇形的思路是: 假设所有扇形还是依次从0度开始的——也就是未转动的情形,让指示点本身的角度减去mPieRotation度,得到的角度相当于“未转动扇形时指示点的角度”。

    1.9K50

    android自定义控件一站式入门

    类似color、string等资源那样,每一个使用attr标签定义的属性,在R.styleable类中会生成一个对应的静态只读int类型的字段作为其id。...getAttributes方法首先获得一个TypedArray对象,根据R.styleable类中对应每个attribute的id字段从TypedArray对象中获取attribute的值。...解析到attribute值后,赋值给对应的字段,这样就完成了在xml中为控件对象提供初始值的目标。 TypedArray是一个共享的资源对象,使用完毕就立即执行recycle释放对它的占用。 4....在自定义ViewGroup时,需要在onMeasure中完成对自身childViews的测量才可以正确得到自身的大小。...上面计算转动后指示点落在哪个扇形的思路是: 假设所有扇形还是依次从0度开始的——也就是未转动的情形,让指示点本身的角度减去mPieRotation度,得到的角度相当于“未转动扇形时指示点的角度”。

    1.7K00

    Android应用界面开发——自定义控件(实现俯卧撑计数器)

    (context); 提取布局的属性:theme & style ---- 当布局中的控件有一些共同的属性时,可以把公共的部分提取成theme或style,也可以通过为其设置parent为它们的父类,以继承父类的属性...自定义控件的三种创建形式: 继承已有的控件来实现自定义控件。 通过继承一个布局文件实现自定义控件。 通过继承View类来实现自定义控件。...接下来重写onDraw方法,在该方法中画圆形按钮和数字,onDraw方法中传入了画布canvas,还缺一个画笔,创建一个画笔Paint,因为onDraw使用的比较频繁,所以Paint的创建以及后面Rect...写好自定义控件,在布局文件中引用即可,引用之前需要了解一下自定义控件的属性。自定义控件属性的步骤为: 1.定义attrs.xml 使用了自定义控件属性,那么如何获取自定义控件中属性的内容呢?

    92330

    Android性能优化系列之布局优化

    例如我们在进行App开发时基本每个页面都会有标题栏,在不使用include的情况下你在每个界面都需要重新在xml里面写一个顶部标题栏,工作量无疑是巨大的,使用include标签,我们只需要把这个会被多次使用的顶部栏独立成一个...注意这里我对ViewStub的实例进行了一个非空判断,这是因为ViewStub在XML中定义的id只在一开始有效,一旦ViewStub中指定的布局加载之后,这个id也就失败了,那么此时findViewById...可能你会觉得Lint分析的太过详细,我无法迅速找到问题,那么你可以点击 ,其分为四类,我们应只关注前2类。...,这时发现文本框布局已经不再是红色了 咋看之下一切都很完美,但其实整个ui其实还含有一个隐含的绘制效果,那边是在activity中,使用setContentView(R.layout.activity_main...现在看最终优化效果 OVERDRAWVIEW页面的问题 在overdrawviewactivity中只有一个自定义的图案,而这个自定义的图案引起了过度绘制的问题 解决方法 首先这个也是填充了整个

    1K20

    Android自定义属性TypedArray详解

    大家好,我是程序员双木L,后续会发专题类的文章,这是自定义控件的第一篇,之后也会陆续更新相关的文章,欢迎关注。...自定义属性在自定义控件过程中属于比较常见的操作,我们可以回想一下这样的场景:自定义view的过程中,我们需要在不同的情况下设置不同的文字大小,那么我们是不是就需要提供对外的方法来设置,这样就比较灵活操作...:颜色的资源文件; reference|boolean:布尔值的资源文件. 2、自定义属性的使用,这里我们使用两种方式进行对比解析 最最最原始的使用方式 (1)、自定义文件如下: public class...(2)、在布局文件xml中的使用 <?xml version="1.0" encoding="utf-8"?...typedArray.recycle(); } } 这里我直接打印出解析结果,这里可以获取我们想要的自定义属性,而系统有的属性可以忽略。

    1.5K30

    Android开发之自定义View(一)

    onDraw方法,但是注意采用这种方式需要自己在代码中来支持熟悉的wrap_content、padding属性。...1、想好需要自定义的属性,在values下创建一个attrs.xml,这里我就演示一个简单的颜色,自定义一个属性集合,命名为CustomView,有一个格式为color的属性custom_color 解析CustomView中自定义的属性custom_color,id为R.styleable.CustomView_custom_color,如果没有就默认为红色 mColor =...} } 3、布局中使用,注意这里使用的时候一定要用全类名,要想用自定义属性,必须在布局中加入如下代码,这样自定义属性就可以用app打头: xmlns:app="http://schemas.android.com...指定的值,适用于指定具体大小和match_parent的形式 AT_MOST 父容器指定了一个SpecSize,View不能超过它,适用于wrap_content 当使用wrap_content时,SpecSize

    72770

    自定义View从入门到上天

    ,其实对于自定义View来讲,设计、排版、效率都是很费脑筋的,我在github上到现在都没发现一个像样的图文混排自定义View。...除了可以在自定义View中提供公开接口外,还可以通过自定义属性,在对自定义View布局时就指定,这样可以简化用户使用控件的复杂度,实现自定义属性的步骤如下: 在自定义View工程的res/values...> 在自定义View带attrs参数的构造方法中解析自定义属性值: TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DictView...使用完成后一定要调用其recycle方法,否则会有内存泄露的问题; .如果自定义View在一个单独的module中(不属于主工程),对attr的获取不能使用switch-case语句,要用if...else...中关掉硬件加速,这会导致自定义View时,canvas的某些方法不能正常使用,为了让自定义View达到更好的表现效果,建议不要关掉有用到自定义View界面的硬件加速(因为在View层面只能关闭硬件加速,

    1.2K20
    领券