在我们开发中,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
相关文章:
详解jQuery停止动画——stop()方法的使用
南宁网站建设制作定制,南宁网站建设可以定制吗?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
,网页ppt怎么弄成自己的ppt?
建站之星Pro快速搭建教程:模板选择与功能配置指南
如何在VPS电脑上快速搭建网站?
如何批量查询域名的建站时间记录?
微信h5制作网站有哪些,免费微信H5页面制作工具?
公司网站的制作公司,企业网站制作基本流程有哪些?
定制建站如何定义?其核心优势是什么?
如何选择PHP开源工具快速搭建网站?
,想在网上投简历,哪几个网站比较好?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何选择适配移动端的WAP自助建站平台?
如何快速查询域名建站关键信息?
如何通过二级域名建站提升品牌影响力?
如何快速搭建安全的FTP站点?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
定制建站模板如何实现SEO优化与智能系统配置?18字教程
青浦网站制作公司有哪些,苹果官网发货地是哪里?
开封网站制作公司,网络用语开封是什么意思?
广州商城建站系统开发成本与周期如何控制?
Thinkphp 中 distinct 的用法解析
建站之星安全性能如何?防护体系能否抵御黑客入侵?
如何选择服务器才能高效搭建专属网站?
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何在阿里云通过域名搭建网站?
高防服务器租用如何选择配置与防御等级?
建站之星安装步骤有哪些常见问题?
如何彻底删除建站之星生成的Banner?
C#如何序列化对象为XML XmlSerializer用法
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
如何快速选择适合个人网站的云服务器配置?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何通过FTP空间快速搭建安全高效网站?
如何快速生成高效建站系统源代码?
网站制作难吗安全吗,做一个网站需要多久时间?
如何构建满足综合性能需求的优质建站方案?
如何配置FTP站点权限与安全设置?
用v-html解决Vue.js渲染中html标签不被解析的问题
建站之星上传入口如何快速找到?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
股票网站制作软件,网上股票怎么开户?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
Swift中循环语句中的转移语句 break 和 continue
招贴海报怎么做,什么是海报招贴?
*请认真填写需求信息,我们会在24小时内与您取得联系。