android RadioButton button drawable gravity

前端 未结 6 1439
再見小時候
再見小時候 2020-12-02 11:20

I am generating RadioButtons dynamically with

RadioButton radioButton=new RadioButton(context);  

LayoutParams layoutParams=new LayoutParams(radioWidth,rad         


        
6条回答
  •  情书的邮戳
    2020-12-02 11:54

    Based on @Reprator answers.

    JAVA version:

    public class RadioButtonCentered extends AppCompatRadioButton {
    
      private Drawable buttonDrawable;
    
    
      public RadioButtonCentered(Context context) {
        super(context);
      }
    
      public RadioButtonCentered(Context context, AttributeSet attrs) {
        super(context, attrs);
      }
    
      public RadioButtonCentered(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
      }
    
    
    
    
      @Override
      protected void onDraw(Canvas canvas) {
          if (buttonDrawable != null) {
            int iconHeight = buttonDrawable.getIntrinsicHeight();
            int buttonWidth = buttonDrawable.getIntrinsicWidth();
            int width = getWidth();
            float totalWidth = buttonWidth + getPaint().measureText(getText().toString()) + getPaddingLeft() + getPaddingRight() + getCompoundDrawablePadding();
    
            if (totalWidth >= width) { super.onDraw(canvas); }
            else {
                int yTop = 0;
                int height = getHeight();
                int availableSpace = (int) ((width - totalWidth) / 2);
                int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
                int rightWidth = availableSpace + buttonWidth;
    
                switch (verticalGravity) {
                    case Gravity.BOTTOM:
                        yTop = height - iconHeight;
                        break;
                    case Gravity.CENTER_VERTICAL:
                        yTop = (height - iconHeight) / 2;
                        break;
                }
    
                setButtonDrawable(android.R.color.transparent);
                buttonDrawable.setState(getDrawableState());
                buttonDrawable.setBounds(availableSpace, yTop, rightWidth, yTop + iconHeight);
                buttonDrawable.draw(canvas);
    
                float yPos = (height / 2 - (getPaint().descent() + getPaint().ascent()) / 2);
    
                canvas.drawText(getText().toString(), ((float) (rightWidth + getCompoundDrawablePadding())), yPos, getPaint());
            }
        } else {buttonDrawable = CompoundButtonCompat.getButtonDrawable(this); invalidate();}
      }
    }
    

提交回复
热议问题