一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2017-05-11 编辑:简简单单 来源:一聚教程网

在我们开发中,TextView设置Android:drawableLeft一定使用的非常多,但Drawable和Text同时居中显示可能不好控制,有没有好的办法解决呢?

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

实现的效果图:

这里写图片描述

注:第一行为原生TextView添加android:drawableLeft

第二行为自定义TextView实现的效果。

实现思路:

继承TextView,覆盖onDraw(Canvas canvas),在onDraw中先将canvas进行translate平移,再调用父类onDraw进行绘制。

 

 代码如下 复制代码

DrawableTextView.Java:

packagecom.xing.drawabletextview;

importandroid.content.Context;

importandroid.graphics.Canvas;

importandroid.graphics.drawable.Drawable;

importandroid.util.AttributeSet;

importandroid.widget.TextView;

/**

 * Created by Administrator on 2017/2/28.

 */

publicclassDrawableTextViewextendsTextView {

  publicDrawableTextView(Context context) {

    this(context,null);

  }

  publicDrawableTextView(Context context, AttributeSet attrs) {

    this(context, attrs,0);

  }

  publicDrawableTextView(Context context, AttributeSet attrs,intdefStyleAttr) {

    super(context, attrs, defStyleAttr);

  }

  @Override

  protectedvoidonDraw(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的宽度

      intleftDrawableWidth = leftDrawable.getIntrinsicWidth();

      // 得到drawable与text之间的间距

      intdrawablePadding = getCompoundDrawablePadding();

      // 得到文本的宽度

      inttextWidth = (int) getPaint().measureText(getText().toString().trim());

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

  

 

热门栏目