Android中自定义控件让TextView的drawableLeft与文本一起居中

前言

TextView的drawableLeft、drawableRight和drawableTop是一个常用、好用的属性,可以在文本的上下左右放置一个图片,而不使用更加复杂布局就能达到,我也常常喜欢用RadioButton的这几个属性实现很多效果,但是苦于不支持让drawbleLeft与文本一起居中,设置gravity为center也无济于事,终于有空研究了一下,这里与大家一起分享。

一、效果图

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/

二、实现代码

自定义控件

/**
 * drawableLeft与文本一起居中显示
 *
 * @author 农民伯伯
 * @see http://www.cnblogs.com/over140/p/3464348.html
 *
 */
public class DrawableCenterTextView extends TextView {

    public DrawableCenterTextView(Context context, AttributeSet attrs,
            int defStyle) {
        super(context, attrs, defStyle);
    }

    public DrawableCenterTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawableCenterTextView(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        Drawable[] drawables = getCompoundDrawables();
        if (drawables != null) {
            Drawable drawableLeft = drawables[0];
            if (drawableLeft != null) {
                float textWidth = getPaint().measureText(getText().toString());
                int drawablePadding = getCompoundDrawablePadding();
                int drawableWidth = 0;
                drawableWidth = drawableLeft.getIntrinsicWidth();
                float bodyWidth = textWidth + drawableWidth + drawablePadding;
                canvas.translate((getWidth() - bodyWidth) / 2, 0);
            }
        }
        super.onDraw(canvas);
    }
}

和普通TextView用法一致,无需额外增加属性。

2013-12-13注意,drawableRight不管用!感谢网友提醒,后续有进展了再更新文章。

结束

那些让你难受的技术问题一定要找时间想办法摆平TA!

作者:cnblogs 农民伯伯

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android textview
, textview
, drawabletop
, context
, 文本
, public
, 控件textview显示android
, 自定义TextView
, drawable用法
, TextView控件
attrs
qml text 文本居中、edittext文本居中、textview文本居中、float left 居中、drawableleft居中,以便于您获取更多的相关知识。

时间: 2024-10-01 06:40:37

Android中自定义控件让TextView的drawableLeft与文本一起居中的相关文章

【Android】自定义控件让TextView的drawableLeft与文本一起居中显示

前言  TextView的drawableLeft.drawableRight和drawableTop是一个常用.好用的属性,可以在文本的上下左右放置一个图片,而不使用更加复杂布局就能达到,我也常常喜欢用RadioButton的这几个属性实现很多效果,但是苦于不支持让drawbleLeft与文本一起居中,设置gravity为center也无济于事,终于有空研究了一下,这里与大家一起分享.   声明 欢迎转载,请注明出处! 博客园:http://www.cnblogs.com/ 农民伯伯: htt

Android 让自定义TextView的drawableLeft与文本一起居中_Android

前言   TextView的drawableLeft.drawableRight和drawableTop是一个常用.好用的属性,可以在文本的上下左右放置一个图片,而不使用更加复杂布局就能达到,我也常常喜欢用RadioButton的这几个属性实现很多效果,但是苦于不支持让drawbleLeft与文本一起居中,设置gravity为center也无济于事,终于有空研究了一下,这里与大家一起分享. 正文  一.效果图  二.实现代码  自定义控件 /** * drawableLeft与文本一起居中显示

android开发-关于android中listview里面textview显示混乱

问题描述 关于android中listview里面textview显示混乱 哪位大神能帮我解决下面代码中的listview里面textview的显示混乱问题 纠结好久了 谢谢 复制可以直接执行 源文件: package com.example.listviewtest; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.view.LayoutInfla

Android中实现为TextView添加多个可点击的文本_Android

本文实例展示了Android中实现为TextView添加多个可点击的文本的方法.该功能在Android社交软件的制作中非常具有实用价值.分享给大家供大家参考.具体如下: 很多时候我们在使用社交软件的过程中多多少少会为别人的帖子点赞,如下图所示: 可以看到用户页面显示出来的只是点了赞的用户的名称,点击这些名称可以进入到该用户的主页.下面我们就来实现类似的效果. 具体代码如下: @Override protected void onCreate(Bundle savedInstanceState)

Android中自定义控件之液位指示器_Android

由于安卓应用很广泛,在工业中也常有一些应用,比如可以用安卓来去工业中的一些数据进行实现的监测,显示,同时可以做一些自动化控制,当然在这里,我不是做这些自动化控制方面的研究,只是做一个控件,液位指示,其实就是继承自progressbar,然后重新写一测量与绘制,算是对自定义控件进行一下复习. 我们要做的最终就是下面这个效果: 在这里,我们要做到对这个指示器的以下属性可设置: 容器壁的厚度.容器壁的颜色.容器中液体的宽度.液体总高度.液体当前高度的颜色显示.液体未达到颜色显示.当前高度的文字指示.指

Android中自定义控件之液位指示器

由于安卓应用很广泛,在工业中也常有一些应用,比如可以用安卓来去工业中的一些数据进行实现的监测,显示,同时可以做一些自动化控制,当然在这里,我不是做这些自动化控制方面的研究,只是做一个控件,液位指示,其实就是继承自progressbar,然后重新写一测量与绘制,算是对自定义控件进行一下复习. 我们要做的最终就是下面这个效果: 在这里,我们要做到对这个指示器的以下属性可设置: 容器壁的厚度.容器壁的颜色.容器中液体的宽度.液体总高度.液体当前高度的颜色显示.液体未达到颜色显示.当前高度的文字指示.指

Android中实现为TextView添加多个可点击的文本

本文实例展示了Android中实现为TextView添加多个可点击的文本的方法.该功能在Android社交软件的制作中非常具有实用价值.分享给大家供大家参考.具体如下: 很多时候我们在使用社交软件的过程中多多少少会为别人的帖子点赞,如下图所示: 可以看到用户页面显示出来的只是点了赞的用户的名称,点击这些名称可以进入到该用户的主页.下面我们就来实现类似的效果. 具体代码如下: @Override protected void onCreate(Bundle savedInstanceState)

Android中自定义控件的declare-styleable属性重用方案_Android

最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在attrs.xml这个文件中,发现属性冗余,于是就想有没有类似属性继承或者include之类的方法.本文将就declare-stylable中属性重用记录一下. 不完美的代码 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <resources>     

Android中自定义控件的declare-styleable属性重用方案

最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在attrs.xml这个文件中,发现属性冗余,于是就想有没有类似属性继承或者include之类的方法.本文将就declare-stylable中属性重用记录一下. 不完美的代码 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <resources>