Android DrawableTextView图片文字居中显示实例
发布时间 - 2026-01-10 23:20:40 点击率:次在我们开发中,TextView设置Android:drawableLeft一定使用的非常多,但Drawable和Text同时居中显示可能不好控制,有没有好的办法解决呢?

小编的方案是通过自定义TextView实现。
实现的效果图:
注:第一行为原生TextView添加android:drawableLeft
第二行为自定义TextView实现的效果。
实现思路:
继承TextView,覆盖onDraw(Canvas canvas),在onDraw中先将canvas进行translate平移,再调用父类onDraw进行绘制。
DrawableTextView.Java:
package com.xing.drawabletextview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* Created by Administrator on 2017/2/28.
*/
public class DrawableTextView extends TextView {
public DrawableTextView(Context context) {
this(context, null);
}
public DrawableTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DrawableTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
// getCompoundDrawables() : Returns drawables for the left, top, right, and bottom borders.
Drawable[] drawables = getCompoundDrawables();
// 得到drawableLeft设置的drawable对象
Drawable leftDrawable = drawables[0];
if (leftDrawable != null) {
// 得到leftDrawable的宽度
int leftDrawableWidth = leftDrawable.getIntrinsicWidth();
// 得到drawable与text之间的间距
int drawablePadding = getCompoundDrawablePadding();
// 得到文本的宽度
int textWidth = (int) getPaint().measureText(getText().toString().trim());
int bodyWidth = leftDrawableWidth + drawablePadding + textWidth;
canvas.save();
canvas.translate((getWidth() - bodyWidth) / 2, 0);
}
super.onDraw(canvas);
}
}
布局文件中引入:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="horizontal">
<com.xing.drawabletextview.DrawableTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableLeft="@drawable/ic_one"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:text="21" />
<com.xing.drawabletextview.DrawableTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableLeft="@drawable/ic_two"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:text="99" />
<com.xing.drawabletextview.DrawableTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableLeft="@drawable/ic_three"
android:drawablePadding="10dp"
android:gravity="center_vertical"
android:text="99+" />
</LinearLayout>
以上所述是小编给大家介绍的Android DrawableTextView图片文字居中显示实例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# textview居中
# textview文字居中显示
# Android Canvas drawText文字居中的一些事(图解)
# Android自定义TextView实现文字图片居中显示的方法
# Android EditText搜索框实现图标居中
# Android中搜索图标和文字居中的EditText实例
# Android编程实现图片的浏览、缩放、拖动和自动居中效果
# android imageview图片居中技巧应用
# Android图文居中显示控件使用方法详解
# 小编
# 自定义
# 在此
# 给大家
# 先将
# 所述
# 给我留言
# 感谢大家
# 疑问请
# 有任何
# content
# import
# DrawableTextView
# Context
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
创业网站制作流程,创业网站可靠吗?
Laravel如何与Pusher实现实时通信?(WebSocket示例)
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
Laravel如何自定义错误页面(404, 500)?(代码示例)
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Python并发异常传播_错误处理解析【教程】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何快速搭建个人网站并优化SEO?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
香港服务器WordPress建站指南:SEO优化与高效部署策略
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
如何彻底删除建站之星生成的Banner?
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
黑客如何通过漏洞一步步攻陷网站服务器?
独立制作一个网站多少钱,建立网站需要花多少钱?
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel如何集成Inertia.js与Vue/React?(安装配置)
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
如何在Ubuntu系统下快速搭建WordPress个人网站?
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
网易LOFTER官网链接 老福特网页版登录地址
Android中AutoCompleteTextView自动提示
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
详解jQuery中的事件
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
原生JS实现图片轮播切换效果
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
php结合redis实现高并发下的抢购、秒杀功能的实例

