文档章节

TextView+ImageSpan同一行文字图片居中

xunfang
 xunfang
发布于 2016/05/10 14:40
字数 274
阅读 178
收藏 0

项目开发中遇到了这样一个需求,标签(图片)和文字,标签显示在标题的开头,自然而然想到了用TextView+ImageSpan的方式来弄,开始没有思路,网上搜索一下基本上都有说到,但是都没有解决一个问题,就是居中。怎么设置都设置不了!后来找到一篇文章里面介绍了ImageSpan的getSize()方法设置了展示位置!下面给出自定义修改的ImageSpan,至于怎么用ImageSpan就不多说了

 

/**
 * 垂直居中的ImageSpan
 *
 * @author KenChung
 */
public class VerticalImageSpan extends ImageSpan {

    public VerticalImageSpan(Drawable drawable) {
        super(drawable);
    }

    public int getSize(Paint paint, CharSequence text, int start, int end,
                       Paint.FontMetricsInt fontMetricsInt) {
        Drawable drawable = getDrawable();
        Rect rect = drawable.getBounds();
        if (fontMetricsInt != null) {
            Paint.FontMetricsInt fmPaint = paint.getFontMetricsInt();
            int fontHeight = fmPaint.bottom - fmPaint.top;
            int drHeight = rect.bottom - rect.top;

            int top = drHeight / 2 - fontHeight / 4;
            int bottom = drHeight / 2 + fontHeight / 4;

            fontMetricsInt.ascent = -bottom;
            fontMetricsInt.top = -bottom;
            fontMetricsInt.bottom = top;
            fontMetricsInt.descent = top;
        }
        return rect.right;
    }

    @Override
    public void draw(Canvas canvas, CharSequence text, int start, int end,
                     float x, int top, int y, int bottom, Paint paint) {
        Drawable drawable = getDrawable();
        canvas.save();
        int transY = 0;
        transY = ((bottom - top) - drawable.getBounds().bottom) / 2 + top;
        canvas.translate(x, transY);
        drawable.draw(canvas);
        canvas.restore();
    }
}

本文转载自:http://www.2cto.com/kf/201412/360948.html

xunfang
粉丝 0
博文 51
码字总数 7950
作品 0
海淀
程序员
私信 提问
html5 图片与文字中间对齐处于同一行、或者图片与按钮处于同一行

在日常开发中,经常会使用到图片与文字或图片与按钮对齐。 1.图片与按钮 处于同一行,并居中对齐,长使用的方法如下: <div> <img src="" style="vertical-align:middle"/> <button type="bu......

突然很想飞
2015/12/08
5.4K
0
css行高line-height的一些深入理解及应用

二、一些字面意思 “行高”顾名思意指一行文字的高度。具体来说是指两行文字间基线之间的距离。基线实在英文字母中用到的一个概念,我们刚学英语的时使用的那个英语本子每行有四条线,其中底...

manlianman
2013/10/22
0
0
彻底搞定vertical-align垂直居中不起作用疑难杂症

原本我的文章标题是深入探讨line-height与vertical-align的疑难杂症,但这样似乎没能针对性的抛出一个问题,故改成“彻底搞定vertical-align垂直居中不起作用疑难杂症”。因此,本文讲解的还...

阿K1225
2018/02/12
1K
0
Android 解决图文混排,图片和文字居中对齐问题(ImageSpan)

一. 概述 众所周知,Android图文混排可以通过SpannableString来实现,通过在相应位置使用ImageSpan替换即可,但是使用过的人会发现,imageSpan只提供了两种对齐方式,如下所示: 但是在大多数...

Mr云台
2017/04/10
0
0
Q:你知道如何用line-height使多行文字垂直居中么?

我们先看运行效果: 知识点 line-height(行高) : 指的是两行文字间基线之间的距离,而实际撑开div高度的不是height,而是line-height。 line box : 每一行称为一条line box,它又是由这一行...

Juicyangxj
2017/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

未初始化指针问题

《C和指针》书上说 int *a ... *a = 12 这样写声明一个变量,但未对指针初始化 如果指针是函数的形参,比如 void func(int *a) { (* a) = 12;//这样操作有无问题? } ======================...

天王盖地虎626
6分钟前
0
0
CSS布局

一列布局 <style type="text/css">body{margin:0px;padding:0px;}.main{width:800px;height:300px;background:#ccc;margin:0 auto;}</style> <div class="main"></div> 两列布......

RichardZane
12分钟前
3
0
Python的一些细节 II

1. isinstance() 与 type() 区别 class type(name, bases, dict) name -- 类的名称。 bases -- 基类的元组。 dict -- 字典,类内定义的命名空间变量。 返回值:一个参数,返回对象的类型;三...

Eappo_Geng
17分钟前
1
0
笔试题-武汉珞珈德毅笔试题

1.写出Java语言的基本数据类型。 2.简述cookie和session区别。 1、cookie数据存放在客户的浏览器上,session数据放在服务器上。 2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行...

QuasimodoALei
28分钟前
3
0
IDEA Maven project: 'xxx/pom.xml' already exists in VFS

Failed to create a Maven project: ‘xxx/pom.xml‘ already exists in VFS idea创建项目后,发现项目有问题,删除后重新创建,提示错误如下。 解决办法 1.通过idea打开任意一个项目 2.File...

国产大熊猫
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部