1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android 字体间间隔 TextView设置行间距 字体间距

android 字体间间隔 TextView设置行间距 字体间距

时间:2019-09-09 16:17:04

相关推荐

android 字体间间隔 TextView设置行间距 字体间距

一、设置行间距

1、设置行间距:android:lineSpacingExtra,取值范围:正数、负数和0,正数表示增加相应的大小,负数表示减少相应的大小,0表示无变化

2、设置行间距的倍数:android:lineSpacingMultiplier,取值范围:浮点数,如果值大于1.0表示增加行间距,如果值小于1.0表示减少行间距,等于1.0时表示无变化。

有时候在UI界面会失效,可以在代码动态设置

reuse_list_name.setLineSpacing(8,1);//第一个参数是字体大小,第二个是倍数

二、设置字体间距

setTextScaleX() 方法设置字间距,但从字面上(Scale)就可看出其实它是用于设置字体的缩放比率,并不正确

我们可以用通过继承 TextView 并重写setText() 和getText()方法,增加setLetterSpacing() 等方法搞定该需求。

/**

* 示例:设置 TextView 的字间距

* @author Pedro Barros (pedrobarros.dev at )

* @since May 7,

*/

import android.content.Context;

import android.text.Spannable;

import android.text.SpannableString;

import android.text.style.ScaleXSpan;

import android.util.AttributeSet;

import android.widget.TextView;

public class LetterSpacingTextView extends TextView {

private float letterSpacing = LetterSpacing.NORMAL;

private CharSequence originalText = "";

public LetterSpacingTextView(Context context) {

super(context);

}

public LetterSpacingTextView(Context context, AttributeSet attrs){

super(context, attrs);

}

public LetterSpacingTextView(Context context, AttributeSet attrs, int defStyle){

super(context, attrs, defStyle);

}

public float getLetterSpacing() {

return letterSpacing;

}

public void setLetterSpacing(float letterSpacing) {

this.letterSpacing = letterSpacing;

applyLetterSpacing();

}

@Override

public void setText(CharSequence text, BufferType type) {

originalText = text;

applyLetterSpacing();

}

@Override

public CharSequence getText() {

return originalText;

}

private void applyLetterSpacing() {

StringBuilder builder = new StringBuilder();

for(int i = 0; i < originalText.length(); i++) {

builder.append(originalText.charAt(i));

if(i+1 < originalText.length()) {

builder.append("\u00A0");

}

}

SpannableString finalText = new SpannableString(builder.toString());

if(builder.toString().length() > 1) {

for(int i = 1; i < builder.toString().length(); i+=2) {

finalText.setSpan(new ScaleXSpan((letterSpacing+1)/10), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

}

}

super.setText(finalText, BufferType.SPANNABLE);

}

public class LetterSpacing {

public final static float NORMAL = 0;

}

}

应用例:

LetterSpacingTextView textView = new LetterSpacingTextView(context);

textView.setLetterSpacing(10); //参数为 float 类型。可另设其他值如 0 或者默认值 LetterSpacingTextView.LetterSpacing.NORMAL

textView.setText("My text");

//Add the textView in a layout, for instance:

((LinearLayout) findViewById(R.id.myLinearLayout)).addView(textView);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。