Android(安卓)自定义设置文本字体间间距
16lz
2022-03-13
自定义spacingTextView 继承TextView,代码如下:
public class SpacingTextView extends TextView {
private float letterSpacing = LetterSpacing.BIGGEST;
private CharSequence originalText = “”;
public SpacingTextView(Context context) { super(context);}public SpacingTextView(Context context, AttributeSet attrs){ super(context, attrs); originalText = super.getText(); applyLetterSpacing(); this.invalidate();}public SpacingTextView(Context context, AttributeSet attrs, int defStyle){ super(context, attrs, defStyle);}public float getLetterSpacing() { return letterSpacing;}public void setLetterSpacing(float letterSpacing) { this.letterSpacing = letterSpacing; applyLetterSpacing();}@Overridepublic void setText(CharSequence text, BufferType type) { originalText = text; applyLetterSpacing();}@Overridepublic CharSequence getText() { return originalText;}/** * 字距为任何字符串(技术上,一个简单的方法为CharSequence不使用)的TextView */private void applyLetterSpacing() { if (this == null || this.originalText == null) return; StringBuilder builder = new StringBuilder(); for(int i = 0; i < originalText.length(); i++) { String c = ""+ originalText.charAt(i); builder.append(c.toLowerCase()); 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; public final static float NORMALBIG = (float)0.025; public final static float BIG = (float)0.05; public final static float BIGGEST = (float)0.2;}
}
代码中调用:
public class SpacingTextViewActivity extends BaseActivity {
private SpacingTextView spacingTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_spacing_text_view); spacingTextView=findView(R.id.space_text); spacingTextView.setText(getResources().getString(R.string.space_test)); spacingTextView.setLetterSpacing(ConvertUtils.dip2px(this,20));}
}
更多相关文章
- Android平台开发-Power management-电源管理
- Android(安卓)studio 提取文件指定字符串
- 探寻 Android(安卓)代码抄袭细节,情节还不算严重
- Android————一个简单的新闻面板
- Android(安卓)编译流程解析01-AppPlugin初始化
- android ndk与sdk
- Android服务监控
- EditText光标不显示问题
- android 开发中判断网络是否连接的代码