TextView 에서 DrawableXXX 그림 의 크기 를 설정 할 수 없 는 솔 루 션

3797 단어
개발 과정 에서 우 리 는 그림 옆 에 문자 가 있 는 구 조 를 만 날 수 있 습 니 다. 이런 구 조 는 비교적 낮은 개발 은 하나의 ImageView 와 TextView 를 사용 합 니 다. 경험 이 있 는 사람 은 TextView 에 Drawable Left, Drawable Right 등 속성 을 설정 하고 하나의 View 로 해결 합 니 다. 그러나 이 속성 설정 그림 은 크기 를 조절 할 수 없습니다. xml 안에 있 습 니 다.물론 자바 코드 에 서 는 설정 할 수 있 습 니 다.
        TextView textView = new TextView(mContext);
        Drawable drawable = getResources().getDrawable(R.drawable.icon_friend);
        //        
        drawable.setBounds(0, 0, 20, 20);
        //        , 、 、 、 
        textView.setCompoundDrawables(null, null, drawable, null);

물론 우 리 는 사용자 정의 View 로 이 효 과 를 실현 할 수 있 고 코드 도 매우 간단 하 다.

    
        
        
        
        
        
        
    
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import com.rzj.zhongshi.R;

public class DrawableTextView extends android.support.v7.widget.AppCompatTextView {
    private Drawable drawableLeft = null, drawableTop = null, drawableRight = null,
     drawableBottom = null;
    private int drawableWidth, drawableHeight;
    public DrawableTextView(Context context) {
        this(context, null);
    }

    public DrawableTextView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public DrawableTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DrawableTextView);
        int count = typedArray.getIndexCount();
        for(int i = 0; i < count; i++){
            int attr = typedArray.getIndex(i);
            switch (attr){
                case R.styleable.DrawableTextView_drawableRight:
                    drawableRight = typedArray.getDrawable(attr);
                    break;
                case R.styleable.DrawableTextView_drawableLeft:
                    drawableLeft = typedArray.getDrawable(attr);
                    break;
                case R.styleable.DrawableTextView_drawableTop:
                    drawableTop = typedArray.getDrawable(attr);
                    break;
                case R.styleable.DrawableTextView_drawableBottom:
                    drawableBottom = typedArray.getDrawable(attr);
                    break;
                case R.styleable.DrawableTextView_drawableWidth:
                    drawableWidth = typedArray.getDimensionPixelSize(attr, 0);
                    break;
                case R.styleable.DrawableTextView_drawableHeight:
                    drawableHeight = typedArray.getDimensionPixelSize(attr,0);
                    break;
            }
        }
        if(null != drawableLeft){
            drawableLeft.setBounds(0,0, drawableWidth, drawableHeight);
        }
        if(null != drawableRight){
            drawableRight.setBounds(0,0, drawableWidth, drawableHeight);
        }
        if(null != drawableTop){
            drawableTop.setBounds(0,0, drawableWidth, drawableHeight);
        }
        if(null != drawableBottom){
            drawableBottom.setBounds(0,0, drawableWidth, drawableHeight);
        }
        setCompoundDrawables(drawableLeft, drawableTop, drawableRight, drawableBottom);
    }

}

좋은 웹페이지 즐겨찾기