android开发 自定义View实现TextView文本间距
2017-07-21 14:11
453 查看
一、应用背景:
在工作中遇到凭证界面展示金额的时候,用原生TextView数字之间间距太小,于是想到自定控件来实现。
二、具体实现:
三、效果如下:
![](https://img-blog.csdn.net/20170721140657900?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjUxODg3MDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
参考文章:http://blog.csdn.net/lovexieyuan520/article/details/43153275
在工作中遇到凭证界面展示金额的时候,用原生TextView数字之间间距太小,于是想到自定控件来实现。
二、具体实现:
public class MoneyTextView extends View { private float letterSpacing;//字符间距 private Paint letterPaint;//画笔 private CharSequence content = "13200000081";//金额,最多11位数 private Context context; public MoneyTextView(Context context) { super(context); this.context = context; init(); } public MoneyTextView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); this.context = context; init(); } public void setText(CharSequence text) { content = text; invalidate(); } private void init() { Paint mPaint = new Paint(); mPaint.setStrokeWidth(3); mPaint.setTextSize(dip2px(14)); mPaint.setAntiAlias(true); mPaint.setColor(Color.RED); mPaint.setTextAlign(Paint.Align.LEFT); letterPaint = mPaint; } public MoneyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; init(); } /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dip2px(float dpValue) { 4000 final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * 根据手机的分辨率从 px(像素) 的单位 转成为 dp */ public int px2dip(float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(content != null ) { letterSpacing = (float) (getMeasuredWidth()/11.0);//项目需要固定十一份大小,可根据需要调整 Log.e("onDraw",letterSpacing+","+getMeasuredWidth()); for (int i = content.length() - 1, j = 0; i >= 0; i--) { Rect bounds = new Rect(); String str = String.valueOf(content.charAt(i)); Log.e("onDraw", str + ""); letterPaint.getTextBounds(str, 0, str.length(), bounds); Paint.FontMetricsInt fontMetrics = letterPaint.getFontMetricsInt(); int baseline = (getMeasuredHeight() - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top; canvas.drawText(str, getMeasuredWidth() - bounds.width() - (letterSpacing/2 - bounds.width()/2 )- j++ * letterSpacing, baseline, letterPaint); } } } }
三、效果如下:
MoneyTextView tv = (MoneyTextView) findViewById(R.id.moneyTv); tv.setText("15000320");
参考文章:http://blog.csdn.net/lovexieyuan520/article/details/43153275
相关文章推荐
- Android 自定义TextView 实现文本间距
- Android 自定义TextView 实现文本间距
- Android开发中TextView文本过长滚动显示实现方法分析
- Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小
- Android 自定义TextView实现文本内容自动调整字体大小
- Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView
- Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小
- Android开发TextView实现长按复制文本功能的方法
- Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView
- Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView
- Android开发中TextView 实现右上角跟随文本动态追加圆形红点
- Android TextView 自定义识别文本中的超链接并打开自身WebView(按照微信效果实现)
- android开发之自定义TextView设置字间距以及通过TextView控件属性设置行间距
- Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小
- Android 自己定义TextView 实现文本间距
- Android开发中自定义View设定到FrameLayout布局中实现多组件显示
- Android自定义控件超链接文本LinkTextView的实现
- android开发之自定义带边框的TextView
- Android 自定义AutoCompleteTextView实现显示所有项
- android textview 多行文本显示 scroll滑动实现