欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android DrawableTextView图片文字居中显示实例

程序员文章站 2023-12-16 21:06:22
 在我们开发中,textview设置android:drawableleft一定使用的非常多,但drawable和text同时居中显示可能不好控制,有没有好的办法...

 在我们开发中,textview设置android:drawableleft一定使用的非常多,但drawable和text同时居中显示可能不好控制,有没有好的办法解决呢?

小编的方案是通过自定义textview实现。

实现的效果图:

Android DrawableTextView图片文字居中显示实例

注:第一行为原生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图片文字居中显示实例,希望对大家有所帮助

上一篇:

下一篇: