自定义控件
为什么会有自定义控件?
自定义控件实现常用有几种方式?
我们运行一段Android代码,如果用Android本身的控件,在HUAWEI手机上和在小米手机上它的效果可能会不一样;
系统本身的控件不足以满足我们的开发需求,就像一个textview控件我们想让它显示出艺术字的效果,系统原生控件不能满足我们。
这样就出现了自定义控件。
自定义控件实现的方式
1.继承系统原生控件(一般是继承TextView,Button,ImageView等)
自定义属性:我们可以给Button指定显示的颜色等
自定义属性步骤:
①在res的values目录下新建attr.xml文件。
attr文件样例:
<declare-styleable name="CustomView">
<attr name="editTextColor" format="reference|color" />
<attr name="editTextStyle" format="reference" />
<attr name="epyView" format="reference" />
<attr name="epyVisibility">
<enum name="gone" value="0" />
<enum name="invisible" value="1" />
</attr>
<attr name="layout_constraintHeight" format="dimension">
<enum name="wrap" value="-2" />
</attr>
</declare-styleable>
上面我们是自定义属性的常用定义方式,一般就这几种。
②在xml布局文件中使用自定义属性。
app:editTextColor="#fff"
app:editTextStyle="引用的style"
③在定义的View中获取自定义属性的引用。
TypedArray typedArray=context.obtainStyledAttributes(attrs,R.styleable.CustomView);
2.继承View
系统中的每个控件大都逃脱不了这个命运,经历出生的三大阶段onMeasure(),onLayout()和onDraw()。(像button,TextView等也都经历了这三大阶段)
onMeasure()是测量视图的大小。
onLayout()是给视图进行布局。(测量好控件的大小之后用这个方法确定把它放到哪个地方)
onDraw()对视图进行绘制。(确定位置后把控件画出来)
3.继承ViewGroup(当然也包括ViewGroup的子类LinearLayout,RelativeLayout等)
viewGroup要指定里面各个控件的位置。
样例见我的github地址:https://github.com/WindChenx/CustomControl
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程