自动缩放文字大小 [英] Auto Scale Text Size
问题描述
我正在寻找一种方法来当我改变屏幕尺寸会按比例调整文本。 目前,我试着 自动缩放TextView的文本,以在一定范围内配合,但它不吨似乎是工作。但我不知道我做了正确的方法还是不行。我现在目前由
呼叫 AutoResizeTextView测试=新AutoResizeTextView(本);
测试=(AutoResizeTextView)findViewById(R.id.test456);
test.resizeText(); //我把这个来调整..我对不对?
XML
< com.mypackage.AutoResizeTextView
机器人:ID =@ + ID / test456
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:layout_weight =1/>
您不需要调用 AutoResizeTextView测试
,你可以说的TextView
,因为该类扩展的TextView
。我不明白你为什么会需要调用 resizeText()
或者
无论哪种方式,这里有一个自定义类,我喜欢使用自动调整大小的文本。
公共类AutoFitTextView扩展TextView的{
公共AutoFitTextView(上下文的背景下){
超(上下文);
在里面();
}
公共AutoFitTextView(上下文的背景下,ATTRS的AttributeSet){
超(背景下,ATTRS);
在里面();
}
私人无效的init(){
maxTextSize = this.getTextSize();
如果(maxTextSize&{35){
maxTextSize = 30;
}
minTextSize = 20;
}
私人无效refitText(字符串文本,诠释输出textWidth){
如果(输出textWidth大于0){
INT availableWidth =输出textWidth - this.getPaddingLeft()
- this.getPaddingRight();
浮trySize = maxTextSize;
this.setTextSize(TypedValue.COMPLEX_UNIT_PX,trySize);
而((trySize> minTextSize)
&功放;&安培; (this.getPaint()measureText(文本)GT; availableWidth)){
trySize - = 1;
如果(trySize< = minTextSize){
trySize = minTextSize;
打破;
}
this.setTextSize(TypedValue.COMPLEX_UNIT_PX,trySize);
}
this.setTextSize(TypedValue.COMPLEX_UNIT_PX,trySize);
}
}
@覆盖
保护无效onTextChanged(最终CharSequence的文字,最终诠释开始,
最终诠释前,后的最终诠释){
refitText(text.toString(),this.getWidth());
}
@覆盖
保护无效onSizeChanged(INT W,INT小时,INT oldw,诠释oldh){
如果(W!= oldw){
refitText(this.getText()的toString(),W);
}
}
@覆盖
保护无效onMeasure(INT widthMeasureSpec,诠释heightMeasureSpec){
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
INT上级宽度= MeasureSpec.getSize(widthMeasureSpec);
refitText(this.getText()的toString(),上级宽度。);
}
公众持股量getMinTextSize(){
返回minTextSize;
}
公共无效setMinTextSize(INT minTextSize){
this.minTextSize = minTextSize;
}
公众持股量getMaxTextSize(){
返回maxTextSize;
}
公共无效setMaxTextSize(INT minTextSize){
this.maxTextSize = minTextSize;
}
私人浮动minTextSize;
私人浮动maxTextSize;
}
I'm looking for a way to when I change a screen size it will proportionally resize the text. Currently I tried Auto Scale TextView Text to Fit within Bounds but it doesn't seems to be working. but I'm not sure I do it the right way or not. I'm now currently calling by
AutoResizeTextView test = new AutoResizeTextView(this);
test=(AutoResizeTextView)findViewById(R.id.test456);
test.resizeText(); // I call this to resize.. am I right?
XML
<com.mypackage.AutoResizeTextView
android:id="@+id/test456"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
You don't need to call AutoResizeTextView test
, you can say TextView
since the class extends TextView
. I don't see why you'd need to call resizeText()
either.
Either way, here's a custom class I like to use to auto re-size text.
public class AutoFitTextView extends TextView {
public AutoFitTextView(Context context) {
super(context);
init();
}
public AutoFitTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
maxTextSize = this.getTextSize();
if (maxTextSize < 35) {
maxTextSize = 30;
}
minTextSize = 20;
}
private void refitText(String text, int textWidth) {
if (textWidth > 0) {
int availableWidth = textWidth - this.getPaddingLeft()
- this.getPaddingRight();
float trySize = maxTextSize;
this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize);
while ((trySize > minTextSize)
&& (this.getPaint().measureText(text) > availableWidth)) {
trySize -= 1;
if (trySize <= minTextSize) {
trySize = minTextSize;
break;
}
this.setTextSize(TypedValue.COMPLEX_UNIT_PX, 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);
refitText(this.getText().toString(), parentWidth);
}
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;
}
private float minTextSize;
private float maxTextSize;
}
这篇关于自动缩放文字大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!