How to make RelativeSizeSpan align to top

后端 未结 9 2015
情深已故
情深已故 2021-01-31 03:14

I have the following String RM123.456. I would like to

  • Make RM relatively smaller
  • Make RM aligned to to
9条回答
  •  醉酒成梦
    2021-01-31 03:36

    However I did in this way:

    activity_main.xml:

    
    

    MainActivity.java:

    TextView txtView = (TextView) findViewById(R.id.txtView);
    
    SpannableString spannableString = new SpannableString("RM123.456");
    spannableString.setSpan( new TopAlignSuperscriptSpan( (float)0.35 ), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE );
    txtView.setText(spannableString);
    

    TopAlignSuperscriptSpan.java:

    private class TopAlignSuperscriptSpan extends SuperscriptSpan {
            //divide superscript by this number
            protected int fontScale = 2;
    
            //shift value, 0 to 1.0
            protected float shiftPercentage = 0;
    
            //doesn't shift
            TopAlignSuperscriptSpan() {}
    
            //sets the shift percentage
            TopAlignSuperscriptSpan( float shiftPercentage ) {
                if( shiftPercentage > 0.0 && shiftPercentage < 1.0 )
                    this.shiftPercentage = shiftPercentage;
            }
    
            @Override
            public void updateDrawState( TextPaint tp ) {
                //original ascent
                float ascent = tp.ascent();
    
                //scale down the font
                tp.setTextSize( tp.getTextSize() / fontScale );
    
                //get the new font ascent
                float newAscent = tp.getFontMetrics().ascent;
    
                //move baseline to top of old font, then move down size of new font
                //adjust for errors with shift percentage
                tp.baselineShift += ( ascent - ascent * shiftPercentage )
                        - (newAscent - newAscent * shiftPercentage );
            }
    
            @Override
            public void updateMeasureState( TextPaint tp ) {
                updateDrawState( tp );
            }
        }
    

    Hope this will help you.

提交回复
热议问题