Individual line spacing for each line

前端 未结 5 1264
感动是毒
感动是毒 2020-12-29 12:36

Is it possible to define individual line spacings for each text line of a TextView?

Example:

TextView tv = new TextView(context);
tv.set         


        
5条回答
  •  别那么骄傲
    2020-12-29 13:33

    Yes, you can do it by utilizing the LineHeightSpan interface. Here's a quick and dirty sample code on how to do this:

    public class MyActivity extends Activity {
    
        private static class MySpan implements LineHeightSpan {
            private final int height;
    
            MySpan(int height) {
                this.height = height;
            }
    
            @Override
            public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v,
                    FontMetricsInt fm) {
                fm.bottom += height;
                fm.descent += height;
            }
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            final TextView tv = new TextView(this);
            setContentView(tv);
    
            tv.setText("Lines:\n", BufferType.EDITABLE);
            appendLine(tv.getEditableText(), "Line 1 = 40\n", 40);
            appendLine(tv.getEditableText(), "Line 2 = 30\n", 30);
            appendLine(tv.getEditableText(), "Line 3 = 20\n", 20);
            appendLine(tv.getEditableText(), "Line 4 = 10\n", 10);
        }
    
        private void appendLine(Editable text, String string, int height) {
            final int start = text.length();
            text.append(string);
            final int end = text.length();
            text.setSpan(new MySpan(height), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    
    }
    

提交回复
热议问题