package cc.coin.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.util.TypedValue; import android.widget.TextView; /** * 可根据字符串所占的长度(非字符串长度)自动缩小字体大小, 以适应显示区域的宽度 * * @author sheng * */ public class CustomTextView extends TextView { // Attributes private Paint testPaint; private float cTextSize; public CustomTextView (Context context, AttributeSet attrs) { super (context, attrs); } /** * Re size the font so the specified text fits in the text box * assuming * the text box is the specified width. * 在此方法中学习到:getTextSize返回值是以像素(px)为单位的,而setTextSize()是以sp为单位的, * 因此要这样设置setTextSize(TypedValue.COMPLEX_UNIT_PX, size); */ private void refitText(String text, int textWidth) { if (textWidth > 0 ) { testPaint = new Paint(); testPaint.set( this .getPaint()); //获得当前TextView的有效宽度 int availableWidth = textWidth - this .getPaddingLeft() - this .getPaddingRight(); float [] widths = new float [text.length()]; Rect rect = new Rect(); testPaint.getTextBounds(text, 0 , text.length(), rect); //所有字符串所占像素宽度 int textWidths = rect.width(); cTextSize = this .getTextSize(); //这个返回的单位为px while (textWidths > availableWidth){ cTextSize = cTextSize - 1 ; testPaint.setTextSize(cTextSize); //这里传入的单位是px textWidths = testPaint.getTextWidths(text, widths); } this .setTextSize(TypedValue.COMPLEX_UNIT_PX, cTextSize); //这里制定传入的单位是px } }; @Override protected void onDraw(Canvas canvas) { super .onDraw(canvas); refitText(getText().toString(), this .getWidth()); } }

更多相关文章

  1. android表情Gson EditText TextView
  2. android字符串 优化(一)
  3. Android(安卓)调用Gmail发送邮件
  4. android 利用socket 发送Json数据demo
  5. android 获取屏幕高度和宽度
  6. Android发送短信
  7. Android时间工具类 本地转UTC,UTC转本地
  8. Android中base64加密后的字符串带有“\n”导致出错的问题解决
  9. Android图片缩放效果代码

随机推荐

  1. Android和iOS自带的人脸检测API
  2. android中的content provider的使用
  3. Binder详解
  4. Android(安卓)Launcher 分析
  5. 【安卓开发】UI设计基础4:用网格布局 Grid
  6. MIUI 音乐播放器[Android] | 小众软件 >
  7. Android的内存机制
  8. 深入源码解析Android中的Handler,Message
  9. Android(安卓)Studio 单刷《第一行代码》
  10. Android面试系列文章2018之Android部分事