首页 > 其他分享 >Android 自定义TextView实现文字和图片居中显示

Android 自定义TextView实现文字和图片居中显示

时间:2022-11-05 23:01:34浏览次数:53  
标签:自定义 drawableRight drawables Gravity getWidth contentWidth Android null TextView


默认情况下,如果TextView的宽度超过文字的宽度,文字居中显示时,想要在文字的左边或者右边添加一个图片时,左边或者右边的文字就会默认以左边和右边开始排列,效果如下。


如果想要让,文字和图片一起居中显示,那么需要重写onDraw()方法,涉及的代码如下:

@Override
protected void onDraw(Canvas canvas) {
Drawable[] drawables = getCompoundDrawables();
if (null != drawables) {
Drawable drawableLeft = drawables[0];
Drawable drawableRight = drawables[2];
float textWidth = getPaint().measureText(getText().toString());
if (null != drawableLeft) {
setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
float contentWidth = textWidth + getCompoundDrawablePadding() + drawableLeft.getIntrinsicWidth();
if (getWidth() - contentWidth > 0) {
canvas.translate((getWidth() - contentWidth - getPaddingRight() - getPaddingLeft()) / 2, 0);
}
}
if (null != drawableRight) {
setGravity(Gravity.END | Gravity.CENTER_VERTICAL);
float contentWidth = textWidth + getCompoundDrawablePadding() + drawableRight.getIntrinsicWidth();
if (getWidth() - contentWidth > 0) {
canvas.translate(-(getWidth() - contentWidth - getPaddingRight() - getPaddingLeft()) / 2, 0);
}
}
if (null == drawableRight && null == drawableLeft) {
setGravity(Gravity.CENTER);
}
}

super.onDraw(canvas);
}

然后,再页面中引入我们自定义的TextView即可实现文字和图片的居中显示。


标签:自定义,drawableRight,drawables,Gravity,getWidth,contentWidth,Android,null,TextView
From: https://blog.51cto.com/u_13657808/5826357

相关文章

  • Xamrin.Forms android端全局异常处理
     以下为MainActivity中代码usingSystem;usingAndroid.App;usingAndroid.Content.PM;usingAndroid.Runtime;usingAndroid.OS;usingXamrinScanner.Services;......
  • PX01如何实现自定义循环老化画面、开关机冲击及自动关机
    屏在做实验室老化的时候,可能会需要对屏进行多种画面循环老化测试一定时间,完毕后自动关机下电;而循环画面要求也相对复杂,可能会有多种循环画面测试,而且每种循环次数不同,画面......
  • 自定义异常类
    1.继承现有异常结构,RuntimeException或者Exception2.提供全局常量:erialVersionUID 3.提供重载构造器4.在项目中即可调用throw MyException("不能。。。");publi......
  • ZYNQ & AXI总线 & PS与PL内部通信(用户自定义IP)
      ZYNQ、AXI协议、PS与PL内部通信 三种AXI总线分别为:AXI4:(Forhigh-performancememory-mappedrequirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接......
  • React使用Antd自定义主题报错
    安装包"customize-cra":"^1.0.0","customize-cra-less-loader":"^2.0.0","less":"^4.1.3","less-loader":"^11.1.0",修改config-overrides.jsconst{override......
  • Thinkphp6笔记十九:加载自定义配置
    适用场景:加载自己的某些配置1.创建配置文件app/config/test.php或者app/admin/test.php<?phpreturn['rule'=>['alibaba'=>[],'ebay'=>[],......
  • vue+WangEditor+自定义上传图片
     1<divclass="content">2<pname="editor"id="editor"ref="editor"style="z-index:-1"></p>3<el-inputid="in"type="hidden"></el......
  • Android通知监听服务之NotificationListenerService使用篇
    前言本篇我们将介绍如何利用NotificationListenerService实现类似智能手表通知同步、微信自动抢红包等功能。实现这些功能的原理其实就是监听系统的通知服务,接下来我们来看......
  • Spring Cloud LoadBalancer--自定义负载均衡策略--方法/实例
    简介说明    本文用示例介绍SpringCloudLoadBalancer如何自定义负载均衡策略。        SpringCloudLoadBalancer的默认负载均衡策略为轮询策略。我们可......
  • Android 明年将不再支持 32 位应用
    上周,Google正式发布了Android13并率先向Pixel设备推送了系统更新,其他OEM厂商也将跟进这一最新系统,并会在今年晚些时候向他们旗下的设备推送更新。近日,MishaalRahma......