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项目的完整流程与步骤