项目需要EditText只能输入固定行高的内容,超出部分要删掉,本以为很简单,设置个属性就行了结果发现不是那样的,maxLength,maxLines,lines这些都不行,后来查了资料发现,没有方法可以删除多余的文本,那只能自己写监听了,在文本长度发生变化时候判断是否大于要设置的,超出的话直接,删掉,这样就可以递归下去,直到删到指定行数.原理就是这样的 .先看效果图
在实际操作的时候,发现在onTextChanged()只能获取到一次行高,第二次递归时就是0.查了资料 发现是因为EditText需要把文本绘制上去后才能获取到行高,刚设置上去之后还没有绘制完成, 这就和onCreat获取不到textView高度是一样的,查了资料,可以用android.os.AsyncTask这个类执行异步任务,在onPostExecute方法中可以获取 到.当获取到高度后在进行判断就是否删除多余的文本.这个方法比较简单.(也可以用其他方式和onCreat获取textView 高度是一样的,在绘制完成后进行获取)
/**
*
* @author 王瑜 ake
*有兴趣的可以自己封装成一个自定义控件
*/
public class TestActivity extends Activity {
private EditText et_content;
private int MaxLine=5; //最大行数,超过会自动删除多余文本
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edittext);
et_content = (EditText) findViewById(R.id.editText1);
MyTextWatcher textWatcher=new MyTextWatcher();