Android自定义实现图片加文字功能
发布时间 - 2026-01-11 00:59:40 点击率:次Android自定义实现图片加文字功能

分四步来写:
1,组合控件的xml;
2,自定义组合控件的属性;
3,自定义继承组合布局的class类,实现带两参数的构造器;
4,在xml中展示组合控件。
具体实现过程:
一、组合控件的xml
我接触的有两种方式,一种是普通的Activity的xml;一种是父节点为merge的xml。我项目中用的是第一种,但个人感觉第二种好,因为第一种多了相对或者绝对布局层。
我写的 custom_pictext.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/custom_pic_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/a" />
<TextView
android:id="@+id/custom_date_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/custom_pic_iv"
android:layout_marginBottom="5dp"
android:layout_marginLeft="8dp"
android:text="2017" />
<TextView
android:id="@+id/custom_text_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/custom_pic_iv"
android:layout_marginLeft="4dp"
android:layout_marginTop="4dp"
android:text="题目" />
</RelativeLayout>
这里展示一个merge的例子,有时间,大家可以自己体会下。
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:id="@+id/title_bar_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:background="@null"
android:minHeight="45dp"
android:minWidth="45dp"
android:textSize="14sp" />
<TextView
android:id="@+id/title_bar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:singleLine="true"
android:textSize="17sp" />
<Button
android:id="@+id/title_bar_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="7dp"
android:background="@null"
android:minHeight="45dp"
android:minWidth="45dp"
android:textSize="14sp" />
</merge>
这两个xml,都是写在layout中的。
二、自定义组合控件的属性
这步是我们自定义的重要部分之一,自定义组件的私有特性全显示在这。
首先在values中创建attrs.xml
然后定义属性,如下代码
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<declare-styleable name="CustomPicText">
<attr name="pic_backgroud" format="reference"/>
<attr name="pic_backgroud_width" format="dimension"/>
<attr name="pic_backgroud_height" format="dimension"/>
<attr name="pic_text" format="string"/>
<attr name="pic_text_color" format="color"/>
<attr name="pic_text_size" format="integer"/>
<attr name="pic_date" format="string"/>
<attr name="pic_date_color" format="color"/>
<attr name="pic_date_size" format="integer"/>
</declare-styleable>
</resources>
这里有几点需要注意的,第一:属性名为name,第二:属性单位为fromat。这单位包含的值可以查看这里。
三、自定义继承组合布局的class类,实现带两参数的构造器
我实现的CustomPicText.Java
/**
* Created by Hman on 2017/5/4.
* 为了测试自定义组合控件
*/
public class CustomPicText extends RelativeLayout {
private ImageView customPicIv;
private TextView customDateTv;
private TextView customTextTv;
public CustomPicText(Context context, AttributeSet attrs) {
super(context, attrs);
// 加载layout
View view = LayoutInflater.from(context).inflate(R.layout.custom_pictext,this);
customPicIv = (ImageView) view.findViewById(R.id.custom_pic_iv);
customDateTv = (TextView) view.findViewById(R.id.custom_date_tv);
customTextTv = (TextView) view.findViewById(R.id.custom_text_tv);
// 加载自定义属性配置
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.CustomPicText);
// 为自定义属性添加特性
if (typedArray != null) {
// 为图片添加特性
int picBackgroud = typedArray.getResourceId(R.styleable.CustomPicText_pic_backgroud, 0);
float picWidth = typedArray.getDimension(R.styleable.CustomPicText_pic_backgroud_width,25);
float picHeight = typedArray.getDimension(R.styleable.CustomPicText_pic_backgroud_height,25);
customPicIv.setBackgroundResource(picBackgroud);
// customPicIv.setMinimumWidth(picWidth);
// 为标题设置属性
String picText = typedArray.getString(R.styleable.CustomPicText_pic_text);
int picTextColor = typedArray.getColor(R.styleable.CustomPicText_pic_text_color,16);
int picTextSize = typedArray.getResourceId(R.styleable.CustomPicText_pic_date_size, 16);
customTextTv.setText(picText);
customTextTv.setTextColor(picTextColor);
customTextTv.setTextSize(picTextSize);
// 为日期设置属性
String picDate = typedArray.getString(R.styleable.CustomPicText_pic_date);
int picDateColor = typedArray.getColor(R.styleable.CustomPicText_pic_date_color, 0);
int picDateSize = typedArray.getResourceId(R.styleable.CustomPicText_pic_date_size, 12);
customDateTv.setText(picDate);
customDateTv.setTextColor(picDateColor);
customDateTv.setTextSize(picDateSize);
typedArray.recycle();
}
}
}
在这里,我们也可以给控件添加一些监听器,大家自己去加上;这里值得注意的是一个加载配置的类TypeArray
4,在xml中展示组合控件
这个随便写到一个xml中去就行
代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:hman="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.eastsun.widget.CustomPicText
android:id="@+id/first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
hman:pic_backgroud="@mipmap/b"
hman:pic_date="2017/5/6"
hman:pic_date_color="@color/white"
hman:pic_text="第一张图片"
hman:pic_text_color="@color/red"
hman:pic_text_size="18"></com.eastsun.widget.CustomPicText>
</LinearLayout>
这里有一点别忘记,添加xmlns:hman=”http://schemas.Android.com/apk/res-auto”
总结
程序基本上到这就结束了。
看下效果截图
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android自定义实现图片加
# Android
# 自定义控件实现图文
# Android实现异步加载图片
# android图片文件的路径地址与Uri的相互转换方法
# Android异步下载图片并且缓存图片到本地DEMO详解
# Android中RecyclerView 滑动时图片加载的优化
# Android仿微信朋友圈点击加号添加图片功能
# Android常用的图片加载库
# Android 实现获取手机里面的所有图片详解及实例
# 自定义
# 的是
# 加载
# 第一种
# 都是
# 在这里
# 在这
# 这两个
# 这就
# 就行
# 希望能
# 几点
# 写到
# 中去
# 有两种
# 谢谢大家
# 写在
# 我写
# 第一张
# 需要注意
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
🚀拖拽式CMS建站能否实现高效与个性化并存?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
米侠浏览器网页背景异常怎么办 米侠显示修复
如何快速搭建高效服务器建站系统?
中山网站推广排名,中山信息港登录入口?
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
Swift开发中switch语句值绑定模式
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
新三国志曹操传主线渭水交兵攻略
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
文字头像制作网站推荐软件,醒图能自动配文字吗?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
如何实现javascript表单验证_正则表达式有哪些实用技巧
用yum安装MySQLdb模块的步骤方法
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何用IIS7快速搭建并优化网站站点?
如何在万网ECS上快速搭建专属网站?
Swift中循环语句中的转移语句 break 和 continue
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
BootStrap整体框架之基础布局组件
如何在新浪SAE免费搭建个人博客?
如何在云主机快速搭建网站站点?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
如何在宝塔面板中修改默认建站目录?
详解Oracle修改字段类型方法总结
如何在万网利用已有域名快速建站?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
详解MySQL数据库的安装与密码配置
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
如何在景安云服务器上绑定域名并配置虚拟主机?
Laravel如何为API生成Swagger或OpenAPI文档
进行网站优化必须要坚持的四大原则
清除minerd进程的简单方法
如何制作一个表白网站视频,关于勇敢表白的小标题?
原生JS实现图片轮播切换效果
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Android滚轮选择时间控件使用详解

