自定义Android TextView的扩展与收缩样式配置详解
123 浏览量
更新于2024-08-29
收藏 85KB PDF 举报
在Android开发中,自定义View是提高应用复用性和灵活性的重要手段。当需要为自定义视图(如TextView)添加可配置的样式属性,如图片资源、字体大小和控件属性时,TypedArray类是一个不可或缺的工具。本文将详细介绍如何在自定义的可点击扩展和收缩的TextView中使用TypedArray来配置这些样式。
首先,让我们通过一个实际的例子来理解这个过程。假设我们创建了一个名为`ExpandTextView`的自定义控件,它继承自`LinearLayout`并实现了`OnClickListener`接口,允许用户通过点击来扩展或收缩显示的内容。这个视图的样式可以被预设为展开图片、收起图片以及最小展示的行数,这些都可以通过`ExpandTextViewStyle`这个样式类进行配置。
自定义的`ExpandTextView`类包含以下关键成员变量:
1. `defaultMinLines`:表示默认情况下最小显示的行数。
2. `mCollapsed`:用于标记当前状态,是否处于折叠状态。
3. `mRelayout`:标志是否需要在状态改变后重新布局视图。
4. `expandView`:用于存储扩展视图的部分。
5. `expandText`:TextView用于显示文本内容。
6. `expandImg`:ImageView用来显示展开和收起的图片。
7. `mExpandDrawable`和`mCollapseDrawable`:分别保存展开和收起时的drawable资源。
初始化方法`init()`中,会从`attrs`中读取XML中的配置,并使用LayoutInflater来 inflate布局资源`R.layout.pt__expand_textview`。在这个过程中,我们可以使用`TypedArray`来获取和解析XML中的样式属性。
`TypedArray`是一个用于操作XML属性数组的类,它能帮助我们在运行时动态获取和设置资源引用。例如,对于自定义的图片资源,我们可以在`init()`方法中这样操作:
```java
TypedArray ta = context.getTheme().obtainStyledAttributes(
attrs, R.styleable.ExpandTextView, 0, 0);
try {
int expandResId = ta.getResourceId(R.styleable.ExpandTextView_expandImage, 0);
mExpandDrawable = ContextCompat.getDrawable(context, expandResId);
int collapseResId = ta.getResourceId(R.styleable.ExpandTextView_collapseImage, 0);
mCollapseDrawable = ContextCompat.getDrawable(context, collapseResId);
} finally {
ta.recycle();
}
```
这里,`obtainStyledAttributes()`方法接收四个参数:要解析的`AttributeSet`、XML中的主题资源类型数组、初始索引和终止索引。通过`getResourceId()`方法,我们从`TypedArray`中获取到对应的图片资源ID,然后利用`ContextCompat.getDrawable()`将其转换为Drawable对象。
类似地,对于文本颜色、字体大小等其他属性,也可以使用类似的方式从`TypedArray`中获取。配置完成后,当用户点击`ExpandTextView`时,可以根据`mCollapsed`的状态切换显示的图片和调整TextView的行数,同时更新UI以反映新的样式。
总结来说,自定义`ExpandTextView`通过`TypedArray`来管理样式属性,使得开发者能够方便地为视图提供可配置的外观选项,增强了应用的灵活性和用户体验。这种设计模式在Android开发中非常常见,对于实现模块化和重用性有着重要作用。
2020-09-02 上传
2019-03-29 上传
2021-01-21 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-05-13 上传
weixin_38697123
- 粉丝: 2
- 资源: 924
最新资源
- 十种常见电感线圈电感量计算公式详解
- 军用车辆:CAN总线的集成与优势
- CAN总线在汽车智能换档系统中的作用与实现
- CAN总线数据超载问题及解决策略
- 汽车车身系统CAN总线设计与应用
- SAP企业需求深度剖析:财务会计与供应链的关键流程与改进策略
- CAN总线在发动机电控系统中的通信设计实践
- Spring与iBATIS整合:快速开发与比较分析
- CAN总线驱动的整车管理系统硬件设计详解
- CAN总线通讯智能节点设计与实现
- DSP实现电动汽车CAN总线通讯技术
- CAN协议网关设计:自动位速率检测与互连
- Xcode免证书调试iPad程序开发指南
- 分布式数据库查询优化算法探讨
- Win7安装VC++6.0完全指南:解决兼容性与Office冲突
- MFC实现学生信息管理系统:登录与数据库操作