How to adjust text font size to fit textview

后端 未结 22 1672
無奈伤痛
無奈伤痛 2020-11-22 05:15

Is there any way in android to adjust the textsize in a textview to fit the space it occupies?

E.g. I\'m using a TableLayout and adding several Te

22条回答
  •  南笙
    南笙 (楼主)
    2020-11-22 05:50

    Slight modification to onMeasure:

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
        int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
        refitText(this.getText().toString(), parentWidth);
        this.setMeasuredDimension(parentWidth, parentHeight);
    }
    

    And binary search on refitText:

    private void refitText(String text, int textWidth) 
    { 
        if (textWidth > 0) 
        {
            int availableWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight();         
            int trySize = (int)maxTextSize;
            int increment = ~( trySize - (int)minTextSize ) / 2;
    
            testPaint.setTextSize(trySize);
            while ((trySize > minTextSize) && (testPaint.measureText(text) > availableWidth)) 
            {
                trySize += increment;
                increment = ( increment == 0 ) ? -1 : ~increment / 2;
                if (trySize <= minTextSize) 
                {
                    trySize = (int)minTextSize;
                    break;
                }
                testPaint.setTextSize(trySize);
            }
    
            this.setTextSize( TypedValue.COMPLEX_UNIT_PX, trySize);
        }
    }
    

提交回复
热议问题