By dunni ,gjpc


import android.content.Context;

import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;

public class FontFitTextView extends TextView {

public FontFitTextView(Context context) {
super(context);
initialise();
}

public FontFitTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initialise();
}

private void initialise() {
testPaint = new Paint();
testPaint.set(this.getPaint());
//max size defaults to the intially specified text size unless it is too small
maxTextSize = this.getTextSize();
if (maxTextSize < 11) {
maxTextSize = 20;
}
minTextSize = 10;
}

/* Re size the font so the specified text fits in the text box
* assuming the text box is the specified width.
*/
private void refitText(String text, int textWidth)
{
if (textWidth > 0)
{
int availableWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight();
int trySize = (int)maxTextSize;
int increment = ~( trySize - (int)minTextSize ) / 2;

testPaint.setTextSize(trySize);
while ((trySize > minTextSize) && (testPaint.measureText(text) > availableWidth))
{
trySize += increment;
increment = ( increment == 0 ) ? -1 : ~increment / 2;
if (trySize <= minTextSize)
{
trySize = (int)minTextSize;
break;
}
testPaint.setTextSize(trySize);
}

this.setTextSize( TypedValue.COMPLEX_UNIT_PX, trySize);
}
}


@Override
protected void onTextChanged(final CharSequence text, final int start, final int before, final int after) {
refitText(text.toString(), this.getWidth());
}

@Override
protected void onSizeChanged (int w, int h, int oldw, int oldh) {
if (w != oldw) {
refitText(this.getText().toString(), w);
}
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
refitText(this.getText().toString(), parentWidth);
this.setMeasuredDimension(parentWidth, parentHeight);
}

//Getters and Setters
public float getMinTextSize() {
return minTextSize;
}

public void setMinTextSize(int minTextSize) {
this.minTextSize = minTextSize;
}

public float getMaxTextSize() {
return maxTextSize;
}

public void setMaxTextSize(int minTextSize) {
this.maxTextSize = minTextSize;
}


//Attributes
private Paint testPaint;
private float minTextSize;
private float maxTextSize;

}


更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android、H5 单独调起拍照与摄像
  2. android studio中导入第三方库
  3. OkHttp学习系列二:谈谈Android中使用的坑
  4. 手把手教你在Windows下搭建React Native
  5. Matrix源码分析之第一篇
  6. NDK构建osgEarth到Android上——成功案例
  7. Android(安卓)API Demos学习(4) - Receiv
  8. Android打电话过程
  9. cocos2d怎么设置屏幕朝向?横屏 or 竖屏设
  10. Android系统java层次service实现