How to adjust text kerning in Android TextView?

后端 未结 12 1602
醉话见心
醉话见心 2020-11-30 20:20

Is there a way to adjust the spacing between characters in an Android TextView? I believe this is typically called \"kerning\".

I\'m aware of the

12条回答
  •  甜味超标
    2020-11-30 21:12

    Here's my solution, which adds uniform spacing (in pixels) between each character. This span assumes all text is in a single line. This basically implements what @commonsWare suggests.

    SpannableStringBuilder builder = new SpannableStringBuilder("WIDE normal");
    builder.setSpan(new TrackingSpan(20), 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    ...
    
    private static class TrackingSpan extends ReplacementSpan {
        private float mTrackingPx;
    
        public TrackingSpan(float tracking) {
            mTrackingPx = tracking;
        }
    
        @Override
        public int getSize(Paint paint, CharSequence text, 
            int start, int end, Paint.FontMetricsInt fm) {
            return (int) (paint.measureText(text, start, end) 
                + mTrackingPx * (end - start - 1));
        }
    
        @Override
        public void draw(Canvas canvas, CharSequence text, 
            int start, int end, float x, int top, int y, 
            int bottom, Paint paint) {
            float dx = x;
            for (int i = start; i < end; i++) {
                canvas.drawText(text, i, i + 1, dx, y, paint);
                dx += paint.measureText(text, i, i + 1) + mTrackingPx;
            }
        }
    }
    

提交回复
热议问题