固定Textview,字体随着字数的多少字体动态变化大小
2014-07-17 14:19
459 查看
package de.ankri.views; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Paint; import android.util.AttributeSet; import android.util.TypedValue; import android.widget.TextView; import de.ankri.R; /** * A custom Text View that lowers the text size when the text is to big for the TextView. Modified version of one found on stackoverflow * * @author Andreas Krings - www.ankri.de * @version 1.0 * */ public class AutoScaleTextView extends TextView { private Paint textPaint; private float preferredTextSize; private float minTextSize; public AutoScaleTextView(Context context) { this(context, null); } public AutoScaleTextView(Context context, AttributeSet attrs) { this(context, attrs, R.attr.autoScaleTextViewStyle); // Use this constructor, if you do not want use the default style // super(context, attrs); } public AutoScaleTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.textPaint = new Paint(); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AutoScaleTextView, defStyle, 0); this.minTextSize = a.getDimension(R.styleable.AutoScaleTextView_minTextSize, 10f); a.recycle(); this.preferredTextSize = this.getTextSize(); } /** * Set the minimum text size for this view * * @param minTextSize * The minimum text size */ public void setMinTextSize(float minTextSize) { this.minTextSize = minTextSize; } /** * Resize the text so that it fits * * @param text * The text. Neither <code>null</code> nor empty. * @param textWidth * The width of the TextView. > 0 */ private void refitText(String text, int textWidth) { if (textWidth <= 0 || text == null || text.length() == 0) return; // the width int targetWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight(); final float threshold = 0.5f; // How close we have to be this.textPaint.set(this.getPaint()); while ((this.preferredTextSize - this.minTextSize) > threshold) { float size = (this.preferredTextSize + this.minTextSize) / 2; this.textPaint.setTextSize(size); if (this.textPaint.measureText(text) >= targetWidth) this.preferredTextSize = size; // too big else this.minTextSize = size; // too small } // Use min size so that we undershoot rather than overshoot this.setTextSize(TypedValue.COMPLEX_UNIT_PX, this.minTextSize); } @Override protected void onTextChanged(final CharSequence text, final int start, final int before, final int after) { this.refitText(text.toString(), this.getWidth()); } @Override protected void onSizeChanged(int width, int height, int oldwidth, int oldheight) { if (width != oldwidth) this.refitText(this.getText().toString(), width); } }访问更多请点击https://bitbucket.org/ankri/autoscaletextview/src/fd5625ceb37b5cf18b8bf1e0c3c20dca569de80d/src/de/ankri/views/?at=default点击打开链接
相关文章推荐
- 固定textview大小,根据文字多少调整字体自适应textview大小
- Android动态更改TextView的字体大小
- Android 动态改变TextView字体大小
- Android TextView 动态改变字体颜色、大小
- Android 代码中动态设置字体大小-TextView.SetTextSize()
- 代码中textview中怎么样让字体大小适应固定长度
- android开发 textview根据字数长度自动调整字体大小
- 改变textview或lab等多行字体的大小与颜色等变化
- android根据内容动态更改TextView的字体大小
- 如何让Android TextView(包括子类)的字体大小随着字数的增加而变化,以显示全部内容
- 笔记11 | 动态更改TextView的字体大小
- 动态更改textview的字体大小
- android textview宽度固定的情况下字体大小自适应
- Android 代码中动态设置字体大小-TextView.SetTextSize()
- TextView代码动态实现字体不同大小样式风格颜色
- 动态代码设置Textview的字体大小,引用Dimen资源
- SpannableString 动态设置textView中字体颜色和大小
- textView 动态改变字体的大小
- CFormView上让控件的大小随着窗体的变化而自动适应
- Android TextView 一些字体颜色、大小设置属性