How to have Image and Text Center within a Button

后端 未结 12 2249
感动是毒
感动是毒 2020-12-02 15:48

I want to display TEXT and Icon on a Button.

+----------------------------+
|          Icon TEXT         |
+---------------------         


        
12条回答
  •  感动是毒
    2020-12-02 16:19

    This is what I did... It can be improved. The text is centered and the icon is to the left. So they both aren't centered as a group.

    public class CustomButton extends Button
    {
        Rect r = new Rect();
        private Drawable buttonIcon = null;
        private int textImageSeparation = 10;
    
        public CustomButton(Context context, AttributeSet attrs, int defStyle)
        {
            super(context, attrs, defStyle);
        }
    
        public CustomButton(Context context, AttributeSet attrs)
        {
            super(context, attrs);
        }
    
        public CustomButton(Context context)
        {
            super(context);
        }
    
        protected void onDraw(Canvas canvas)
        {
            super.onDraw(canvas);
    
    
            Drawable icon = getButtonIcon();
            if(icon != null)
            {
                int drawableHeight = icon.getIntrinsicHeight();
                int drawableWidth = icon.getIntrinsicWidth();
                if(icon instanceof BitmapDrawable)
                {
                    Bitmap bitmap = ((BitmapDrawable)icon).getBitmap();
                    drawableWidth = (int) AndroidScreenUtils.dipToPixels(bitmap.getWidth());
                    drawableHeight = (int) AndroidScreenUtils.dipToPixels(bitmap.getHeight());
                }
                else
                {
                    drawableWidth = (int) AndroidScreenUtils.dipToPixels(icon.getIntrinsicWidth());
                    drawableHeight = (int) AndroidScreenUtils.dipToPixels(icon.getIntrinsicHeight());
                }
                float textWidth = getLayout().getPaint().measureText(getText().toString());
                float left = ((getWidth() - textWidth) / 2) - getTextImageSeparation() - drawableWidth;
    
                int height = getHeight();
                int top = (height - drawableHeight) /2;
                int right = (int) (left + drawableWidth);
                int bottom = top + drawableHeight;
                r.set((int) left, top, right, bottom);
                icon.setBounds(r);
                icon.draw(canvas);
            }
        }
    
        private Drawable getButtonIcon()
        {
            return buttonIcon;
        }
    
        public void setButtonIcon(Drawable buttonIcon)
        {
            this.buttonIcon = buttonIcon;
        }
    
        private int getTextImageSeparation()
        {
            return textImageSeparation;
        }
    
        public void setTextImageSeparation(int dips)
        {
            this.textImageSeparation = (int) AndroidScreenUtils.dipToPixels(dips);
        }
    
    
    
    }
    

提交回复
热议问题