TextView drawablePadding没有效果

1.当TextView 设置宽度设置为match_parent的时候

 

TextView drawablePadding没有效果 ,字设置了center位置,但是和左边的图片离开很远

 

2.当TextView 设置的宽度为wrap_parent的时候,extView drawablePadding有效果

 

解决:自定义TextView

package com.charlie.chpro.customview;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.TextView;

import com.charlie.chpro.R;

/**
 * 设置TextView Drawable的大小
 * Created by Charlie on 2016/7/30.
 */



public class ResetDrawableSizeTextView extends TextView {
    // 需要从xml中读取的各个方向图片的宽和高  
    private int leftHeight = -1;
    private int leftWidth = -1;
    private int rightHeight = -1;
    private int rightWidth = -1;
    private int topHeight = -1;
    private int topWidth = -1;
    private int bottomHeight = -1;
    private int bottomWidth = -1;

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

    public ResetDrawableSizeTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // super一定要在我们的代码之前配置文件  
        init(context, attrs, 0);
    }

    public ResetDrawableSizeTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // super一定要在我们的代码之前配置文件  
        init(context, attrs, defStyle);
    }

    /**
     * 初始化读取参数 
     * */
    private void init(Context context, AttributeSet attrs, int defStyle) {
        // TypeArray中含有我们需要使用的参数  
        TypedArray a = context.obtainStyledAttributes(attrs,
                R.styleable.ResetDrawableSizeTextView, defStyle, 0);
        if (a != null) {
            // 获得参数个数  
            int count = a.getIndexCount();
            int index = 0;
            // 遍历参数。先将index从TypedArray中读出来,  
            // 得到的这个index对应于attrs.xml中设置的参数名称在R中编译得到的数  
            // 这里会得到各个方向的宽和高  
            for (int i = 0; i < count; i++) {
                index = a.getIndex(i);
                switch (index) {
                    case R.styleable.ResetDrawableSizeTextView_bottom_height:
                        bottomHeight = a.getDimensionPixelSize(index, -1);
                        break;
                    case R.styleable.ResetDrawableSizeTextView_bottom_width:
                        bottomWidth = a.getDimensionPixelSize(index, -1);
                        break;
                    case R.styleable.ResetDrawableSizeTextView_left_height:
                        leftHeight = a.getDimensionPixelSize(index, -1);
                        break;
                    case R.styleable.ResetDrawableSizeTextView_left_width:
                        leftWidth = a.getDimensionPixelSize(index, -1);
                        break;
                    case R.styleable.ResetDrawableSizeTextView_right_height:
                        rightHeight = a.getDimensionPixelSize(index, -1);
                        break;
                    case R.styleable.ResetDrawableSizeTextView_right_width:
                        rightWidth = a.getDimensionPixelSize(index, -1);
                        break;
                    case R.styleable.ResetDrawableSizeTextView_top_height:
                        topHeight = a.getDimensionPixelSize(index, -1);
                        break;
                    case R.styleable.ResetDrawableSizeTextView_top_width:
                        topWidth = a.getDimensionPixelSize(index, -1);
                        break;
                }
            }

            // 获取各个方向的图片,按照:左-上-右-下 的顺序存于数组中  
            Drawable[] drawables = getCompoundDrawables();
            int dir = 0;
            // 0-left; 1-top; 2-right; 3-bottom;  
            for (Drawable drawable : drawables) {
                // 设定图片大小  
                setImageSize(drawable, dir++);
            }
            // 将图片放回到TextView中  
            setCompoundDrawables(drawables[0], drawables[1], drawables[2],
                    drawables[3]);

        }

    }

    /**
     * 设定图片的大小 
     * */
    private void setImageSize(Drawable d, int dir) {
        if (d == null) {
            return;
        }

        int height = -1;
        int width = -1;
        // 根据方向给宽和高赋值  
        switch (dir) {
            case 0:
                // left  
                height = leftHeight;
                width = leftWidth;
                break;
            case 1:
                // top  
                height = topHeight;
                width = topWidth;
                break;
            case 2:
                // right  
                height = rightHeight;
                width = rightWidth;
                break;
            case 3:
                // bottom  
                height = bottomHeight;
                width = bottomWidth;
                break;
        }
        // 如果有某个方向的宽或者高没有设定值,则不去设定图片大小  
        if (width != -1 && height != -1) {
            d.setBounds(0, 0, width, height);
        }
    }
}  

xml里面使用

        <com.charlie.chpro.customview.ResetDrawableSizeTextView
            android:id="@+id/ctv_left_title"
            style="@style/back_toolbar_textview_style"
            android:layout_gravity="left"
            android:layout_marginLeft="@dimen/x18"
            android:drawableLeft="@mipmap/back_normal"
            android:drawablePadding="@dimen/x6"
            android:text="@string/back"
            android:textSize="@dimen/y32"
            app:left_height="@dimen/y42"
            app:left_width="@dimen/x24"
            />

 

posted @ 2016-08-06 20:30  Charlie098765  阅读(3171)  评论(0编辑  收藏  举报