Android EditText设置固定行高,自动删除超出文本

本文介绍如何在Android中实现EditText输入时固定行高,超出部分自动删除。通过自定义TextWatcher监听文本变化,利用异步任务获取EditText的准确行数,若超出设定的最大行数,则删除多余文本。这种方法适用于需要限制EditText输入内容行数的场景。
摘要由CSDN通过智能技术生成

项目需要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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值