在我们开发中,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);

}

}

布局文件中引入:

android:layout_width="match_parent"

android:layout_height="100dp"

android:orientation="horizontal">

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" />

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" />

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+" />

以上所述是小编给大家介绍的Android DrawableTextView图片文字居中显示实例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

android动态设置文本居中显示图片,Android DrawableTextView图片文字居中显示实例相关推荐

  1. android动态设置文本居中显示图片,android按钮图片和文本居中的代码-你躺枪了吗...

    最近优化项目代码时,发现一个比较诡异的现象:每当界面进入ActivityA时,cpu在不断的消耗,内存在不断的缓慢增长(虽然每次增长的量非常小).如下图: 屏幕快照 2016-07-24 12.26. ...

  2. android 动态设置padding,Android动态设置控件大小以及设定margin以及padding值

    http://www.aichengxu.com/Java/73893.htm Android动态设置控件大小以及设定margin以及padding值,有需要的朋友可以参考下. 一.概述 在andro ...

  3. android 动态改变语言,android动态设置app当前运行语言的方法

    android开发中有时候碰到切换语言的需求,这时候需要通过代码动态改变当前运行语言. package com.example.androidtest; import java.util.Locale ...

  4. Android 动态设置宽高

    Android 动态设置宽高 val params: FrameLayout.LayoutParams = view?.layoutParams as FrameLayout.LayoutParams ...

  5. android textview layoutparams,Android动态设置布局的LayoutParams属性总遇到造型异常

    Android动态设置布局的setLayoutParams()属性总遇到造型异常问题 android:id="@+id/introduce" android:layout_widt ...

  6. Python图像处理-使用PIL模块在图片上生成的文字居中显示

    主要解决在图片上面写的文字并把文字居中显示 PIL 安装 pip install pillow 初始图片 基本使用 # 导入需要的包 from PIL import Image, ImageDraw ...

  7. SSRS动态设置文本框属性

    SSRS可以通过表达式动态设置文本框所有的属性,比如字体,字号,是否加粗,如下图所示: 汉字和数字英文字母占用的空间不一样,一个汉字占用两个数字和英文字母的空间,VB里有LENB取得字节数,这SSRS ...

  8. HTML图片和多行文字并列显示

    上课涉及到一点HTML编程,有的时候网页上有图片和多行文字并列显示的情况,类似下面的简历那样: 查阅了一些方法,才得以实现.记录在这里,以备后用,也方便后来人. 首先,可以采用无边框table实现图片 ...

  9. android动态设置EditText显示英文带数字键盘

    开启软键盘和隐藏软键盘 //软键盘控制器 InputMethodManagerimm =(InputMethodManager)getActivity().getSystemService(Conte ...

最新文章

  1. 蚂蚁金服“刷脸”支付技术解读:错误率低于百万分之一
  2. 强化学习样本复杂性综述
  3. vs2005sp1安装加速
  4. mysql查询时给字段加内容,mysql数据库查询之对应库对应表中的注释信息查询以及加字段查询...
  5. 【DWR系列04】- DWR配置详解
  6. 一台25万公里卡罗拉的返老还童记
  7. ASP.NET在IIS7中上下文中不可用
  8. 数组序列化 java_Java基础之数组序列化、反序列化 小发现(不知道 是不是有问题)...
  9. mybatisplus 操作另一个数据库的数据_MySQL数据库的基础操作
  10. docker容器配置加速器
  11. 第48次《中国互联网络发展状况统计报告》
  12. Java基础知识强化84:System类之exit()方法和currentTimeMillis()方法
  13. 职工信息管理系统C++代码
  14. 戴尔微型计算机7050配置,戴尔 Dell OptiPlex 7060 微型机体验分享 - 1升的迷你小钢炮...
  15. 拆解一个老式电感电容表
  16. 怎样能把在线视频(不提供下载)储存下来到电脑
  17. 矩阵运算-克罗内克积⨂ Hadamard乘积 2022年3月24日
  18. 网格设计版式设计_编辑版式,排除项和CSS网格
  19. SG3525频率和占空比参数的选取
  20. 世上安得两全法,不负如来不负卿?

热门文章

  1. 图书管理系统~简单流程
  2. ASP.NET MVC教程八:_ViewStart.cshtml
  3. 企业——Docker容器的搭建及简单应用
  4. LUGOU P3907 圈的异或
  5. 支付宝支付-刷卡支付(条码支付)
  6. javascript 学习笔记(一)
  7. iOS开发 autoResizingMask使用
  8. AngularJs入门学习
  9. Receiver type ‘X’ for instance message is a forward declaration
  10. 详细介绍软件架构设计的三个维度