Android 根据显示长度 调整字体大小的 TextView
来源:互联网 发布:中国银行网银助手mac 编辑:程序博客网 时间:2024/05/04 16:33
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;
}
- Android 根据显示长度 调整字体大小的 TextView
- AutoFitTextView(Android textview根据字体长度调整字体大小)
- Android根据文字长度自动调整字号的TextView
- Android根据可显示宽度调整字体大小
- AutoFitTextView-根据文本内容自动调整字体大小的TextView
- 自动调整textview字体大小以适应textview长度
- android根据分辨率自动调整字体大小的实例代码
- android根据分辨率自动调整字体大小的实例代码
- Android textview自适应宽度自动调整字体大小
- 自动调整TextView字体大小以适应文字长度
- android字体大小根据分辨率自动调整
- android字体大小根据分辨率自动调整
- android字体大小根据分辨率自动调整
- android字体大小根据分辨率自动调整
- android 字体大小 根据分辨率 自动调整
- android字体大小根据分辨率自动调整
- android字体大小根据分辨率自动调整
- Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小
- Python 3来抓取网页
- 传值调用与传地址调用(传引用)
- C#判断系统是32位还是64位
- Oracle 跟踪事件 set event
- 二十八个 HTML5 特性与技巧
- Android 根据显示长度 调整字体大小的 TextView
- 用图片替代文本在 Google 上进行搜索。多么强大,你用过嘛?
- Bundle 类的内部构造
- Event 10053 执行计划 绑定变量 Bind peeking
- bitmap 与 drawable之间转换
- ubuntu 11.04 配置双显示器
- Infragistics:UltraWebGrid:与下拉框使用及模板列使用
- Linux C 编程内存泄露检测工具(一):mtrace
- MikeOS