因为Editview是继承Textview,所以重写EditText跟重写Textview的方法差不多,不过EditText使用此方法的目的是为了 让字体的高度不要超过控件的高度,否则输入的文字和提示文字显示不全。压缩的方式跟Textview差不多,不过这次做判断的是用到字体和控件的高度。

package com.example.myedittext;
 
 
import android.content.Context;
 
import android.graphics.Paint;
 
import android.util.AttributeSet;
 
import android.util.Log;
 
import android.widget.EditText;
 
 
public class EditAutoResize extends EditText{
 
private static final float MIN_TEXT_SIZE = 25.0F;
 
private static final float MAX_TEXT_SIZE = 55.0F;
 
public EditAutoResize(Context context) {
 
super(context);
 
// TODO Auto-generated constructor stub
 
}
 
public EditAutoResize(Context paramContext,
 
AttributeSet paramAttributeSet) {
 
super(paramContext, paramAttributeSet);
 
}
 
/**
 
 
 
 
public void resize()
 
{
 
//获得控件的宽度
 
int i = getHeight();
 
//获得字体的大小
 
float f1 = getTextSize();
 
//计算控件中文字的总长度
 
while (true) {
 
//字体最小控制在15.0F
 
while (true) {
 
setTextSize(0, f1);
 
//在最大值和最小值之间,正常压缩调整
 
if (MAX_TEXT_SIZE >= f1&&f1>=MIN_TEXT_SIZE)
 
{
 
break;
 
}
 
else
 
{
 
//超过最大程度
 
if(f1>MAX_TEXT_SIZE)
 
{
 
f1 = MAX_TEXT_SIZE;
 
}
 
//小于最小程度
 
if(f1<MIN_TEXT_SIZE)
 
{
 
f1 = MIN_TEXT_SIZE;
 
}
 
}
 
}
 
 
//如果i大于最大 小于最小,设置成最大或最小后退出
 
if(i>MAX_TEXT_SIZE&&i<MIN_TEXT_SIZE)
 
{
 
break;
 
}
 
 
//进行压缩
 
if(f1>i)
 
{
 
f1--;
 
}
 
else
 
{
 
break;
 
}
 
 
}
 
}
 
 
@Override
 
protected void onLayout(boolean paramBoolean, int paramInt1, int paramInt2,
 
int paramInt3, int paramInt4) {
 
super.onLayout(paramBoolean, paramInt1, paramInt2, paramInt3, paramInt4);
 
resize();
 
}
 
 
}