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 】
相关推荐:
如何构建满足综合性能需求的优质建站方案?
Linux系统运维自动化项目教程_Ansible批量管理实战
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何用AWS免费套餐快速搭建高效网站?
中国移动官方网站首页入口 中国移动官网网页登录
如何在七牛云存储上搭建网站并设置自定义域名?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
Python并发异常传播_错误处理解析【教程】
在线教育网站制作平台,山西立德教育官网?
太平洋网站制作公司,网络用语太平洋是什么意思?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何快速生成可下载的建站源码工具?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
昵图网官网入口 昵图网素材平台官方入口
WordPress 子目录安装中正确处理脚本路径的完整指南
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
java获取注册ip实例
如何快速搭建自助建站会员专属系统?
如何在阿里云高效完成企业建站全流程?
如何为不同团队 ID 动态生成多个独立按钮
如何在万网自助建站中设置域名及备案?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
创业网站制作流程,创业网站可靠吗?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
Bootstrap整体框架之JavaScript插件架构
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
米侠浏览器网页背景异常怎么办 米侠显示修复
海南网站制作公司有哪些,海口网是哪家的?
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
如何在阿里云虚拟服务器快速搭建网站?
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤

