让TextView的drawableLeft与文本一起居中显示

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

声明

欢迎转载,请注明出处!

博客园:http://www.cnblogs.com/

农民伯伯: http://www.cnblogs.com/over140/

 1 /**
 2  * drawableLeft与文本一起居中显示
 3  */
 4 public class DrawableCenterTextView extends TextView {
 5
 6     public DrawableCenterTextView(Context context, AttributeSet attrs,
 7             int defStyle) {
 8         super(context, attrs, defStyle);
 9     }
10
11     public DrawableCenterTextView(Context context, AttributeSet attrs) {
12         super(context, attrs);
13     }
14
15     public DrawableCenterTextView(Context context) {
16         super(context);
17     }
18
19     @Override
20     protected void onDraw(Canvas canvas) {
21         Drawable[] drawables = getCompoundDrawables();
22         if (drawables != null) {
23             Drawable drawableLeft = drawables[0];
24             if (drawableLeft != null) {
25                 float textWidth = getPaint().measureText(getText().toString());
26                 int drawablePadding = getCompoundDrawablePadding();
27                 int drawableWidth = 0;
28                 drawableWidth = drawableLeft.getIntrinsicWidth();
29                 float bodyWidth = textWidth + drawableWidth + drawablePadding;
30                 canvas.translate((getWidth() - bodyWidth) / 2, 0);
31             }
32         }
33         super.onDraw(canvas);
34     }
35 }
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:drawableLeft="@drawable/pay_weixin"
        android:drawablePadding="10dp"
        android:textColor="@color/code08"
        android:textSize="16sp"
        android:text="微信支付" />
时间: 2024-12-16 19:17:31

让TextView的drawableLeft与文本一起居中显示的相关文章

重写TextView,实现圆形背景,文本居中显示

最近,在做考试试题排版,产品提出题号希望显示成圆形背景,序号文本居中显示. (有点问题:文本没有绝对居中,暂时没做处理.) 为此,我采取的方式是重写TextView的onDraw方法,绘制一个圆形背景. 具体代码如下: package com.example.myapp; import android.content.Context; import android.content.res.TypedArray; import android.graphics.*; import android.

使用代码为textview设置drawableLeft

xml中的textView中设置android:drawableLeft: <TextView android:id="@+id/bookTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:drawableLeft="@drawable/

如何用textview设置drawableLeft属性

在麦子学院的论坛里,我看见很多android新手都在问textview设置drawableleft属性的方法,我把那位在麦子学院论坛里的问题复制下来了,然后我们一起来解答下:  原问题描述:  xml中的textView:  1. <font face="宋体" size="3"> <TextView  2. android:id="@+id/bookTitle"  3. android:layout_width="m

flex的Accordion组件头部文本居中显示

flex的Accordion组件头部文本默认是居左的,可以通过设置headerStyleName属性使之居中,另外还可以设置字体的样式等 1 <?xml version="1.0" encoding="utf-8"?> 2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 3 xmlns:s="library://ns.adobe.com/flex/spar

(转)TextView 设置背景和文本颜色的问题

在做一个项目,突然遇到如下问题 比如:在color.xml中定义了几个颜色 <color name="white">#FFFFFF</color> <color name="orange">#DF8326</color> 复制代码 又给TextView 设置了字体颜色和背景色 <TextView android:id="@+id/hello" android:textColor="@

CSS文本居中显示

因为一直为元素居中问题而困扰,所以决定把自己遇到和看到的方法记录下来,以便以后查看 如果要让inline或inline-block元素居中显示,则父元素css中包含text-align:center; 如果让block元素居中,为其本身添加margin:0 auto; 复杂情形下可以用: display:flex; /*盒子模型*/ flex-direction: row; /*横向*/ justify-content: space-around; /*主轴居中*/ align-items: c

Android实例-手机安全卫士(三十九)-自定义吐司(文本格式、显示窗口)

一.目标 自定义显示的吐司,包括内容文本格式.显示窗口格式. 二.代码实现 1.在“显示号码归属地”服务类(ShowPhoneAddService)中自定义吐司方法(取名myToast(String sting)),参数string为需要显示的字符串(注:本例中只需要使用自定义的吐司来显示号码归属地,其他地方不使用,因此在类中创建方法).在自定义方法中(myToast): (1)通过new TextView(Context context)方法定义一个TextView对象(取名view),参数c

扩展Snackbar 使其支持居中显示

默认Snackbar支持底部或者顶部显示,不支持居中显示 查看Snackbar的源码可以看到createMarginLayoutParams方法中有位置的处理SnackbarPosition , 针对不同的显示位置设置对应的params规则,这里我们将表示位置的枚举SnackbarPosition中添加一种类型PARENT_CENTER public static enum SnackbarPosition { TOP(Gravity.TOP), BOTTOM(Gravity.BOTTOM),

Js打开网页后居中显示

使用JavaScript定义打开网页后居中显示,并可为窗口设置大小,使用“window.open”方法打开新窗口:先来看完整的代码及调用方法: <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>打开居中的窗口</title> <script language="javascript"> //参数-url:要打开的网站,winname:打开后