美文网首页
解决TextView drawableLeft左侧图片大小不可控

解决TextView drawableLeft左侧图片大小不可控

作者: happyxinxin | 来源:发表于2017-02-21 20:56 被阅读7265次

    设置完代码后图片的大小无效果

    Drawable rightDrawable= context.getResources().getDrawable(R.drawable.more);
    rightDrawable.setBounds(0, 0, 5, 5)
    tvMore.setCompoundDrawablesWithIntrinsicBounds(null,null,rightDrawable,null);
    

    解决方法

    自定义ImageTextView控件

    /**
     * Package Name:com.xes.jazhanghui.views ClassName: ImageTextView <br/>
     * Description: 解决TextView 图片大小不可控问题. <br/>
     * Date: 2017-2-21 下午4:52:45 <br/>
     * 
     * @author lihuixin
     * @version
     */
    public class ImageTextView extends TextView {
        private Drawable mDrawable;//设置的图片
        private int mScaleWidth; // 图片的宽度
        private int mScaleHeight;// 图片的高度
        private int mPosition;// 图片的位置 1上2左3下4右
    
        public ImageTextView(Context context) {
            super(context);
        }
    
        public ImageTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context, attrs);
        }
    
        public ImageTextView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init(context, attrs);
        }
    
        public void init(Context context, AttributeSet attrs) {
            TypedArray typedArray = context.obtainStyledAttributes(attrs,
                    R.styleable.ImageTextView);
    
            mDrawable = typedArray.getDrawable(R.styleable.ImageTextView_drawable);
            mScaleWidth = typedArray
                    .getDimensionPixelOffset(
                            R.styleable.ImageTextView_drawableWidth,
                            DensityUtil.dip2px(20));
            mScaleHeight = typedArray.getDimensionPixelOffset(
                    R.styleable.ImageTextView_drawableHeight,
                    DensityUtil.dip2px(20));
            mPosition = typedArray.getInt(R.styleable.ImageTextView_position, 3);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            if (mDrawable != null) {
                mDrawable.setBounds(0, 0, DensityUtil.dip2px(mScaleWidth),
                        DensityUtil.dip2px(mScaleHeight));
    
            }
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            switch (mPosition) {
            case 1:
                this.setCompoundDrawables(mDrawable, null, null, null);
                break;
            case 2:
                this.setCompoundDrawables(null, mDrawable, null, null);
                break;
            case 3:
                this.setCompoundDrawables(null, null, mDrawable, null);
                break;
            case 4:
                this.setCompoundDrawables(null, null, null, mDrawable);
                break;
            default:
                break;
            }
        }
    
        /**
         * 设置左侧图片并重绘
         * 
         * @param drawableLeft
         */
        public void setDrawableLeft(Drawable drawable) {
            this.mDrawable = drawable;
            invalidate();
        }
    
        /**
         * 设置左侧图片并重绘
         * 
         * @param drawableLeftRes
         */
        public void setDrawableLeft(int drawableRes, Context context) {
            this.mDrawable = context.getResources().getDrawable(drawableRes);
            invalidate();
        }
    }
    

    设置attrs.xml配置

       <declare-styleable name="ImageTextView">
           <attr name="drawable" format="reference"/>
           <attr name="drawableWidth" format="dimension"/>
           <attr name="drawableHeight" format="dimension"/>
           <attr name="position" format="integer"/>
       </declare-styleable>
    

    布局文件中使用

     
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       xmlns:app="http://schemas.android.com/apk/res/com.xes.jazhanghui.activity"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:background="@drawable/bg_block_inset_white_ltr_8"
       android:orientation="vertical" >
    
      
           <com.xes.jazhanghui.views.ImageTextView
               android:id="@+id/tv_more"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:drawablePadding="5dp"
               android:text="更多"
               android:textColor="@color/color_737373"
               android:textSize="12sp"
               app:drawable="@drawable/more"
               app:drawableHeight="4dp"
               app:drawableWidth="3dp"
               app:position="3" />
    
       </RelativeLayout>
    
    </LinearLayout>
    
    

    相关文章

      网友评论

          本文标题:解决TextView drawableLeft左侧图片大小不可控

          本文链接:https://www.haomeiwen.com/subject/frauwttx.html