Android EditText设置固定行高,自动删除超出文本
来源:互联网 发布:网络本统考的时间 编辑:程序博客网 时间:2024/05/17 02:50
项目需要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();
et_content.addTextChangedListener(textWatcher);
}
// EditText 的监听
public class MyTextWatcher implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// 限制最大输入行数
if (et_content.getLineCount() > MaxLine) {
deleteExtra();
return;
}else {//这里会交替执行if else也可以把if去掉,但是效率太低了
MyOpenTask tast=new MyOpenTask();
tast.execute();
}
}
@Override
public void afterTextChanged(Editable s) {
}
}
//检查是否超过MaxLine的异步任务
private class MyOpenTask extends AsyncTask<Integer, Integer, Integer> {
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected Integer doInBackground(Integer... params) {
return 1;
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if(et_content.getLineCount()>MaxLine){
deleteExtra();
}
}
}
//每次删除5个字符,可以根据情况更改,每次删一个效率太低
private void deleteExtra() {
String str = et_content.getText().toString();
str =str.substring(0,str.length()-5);
// setText会触发afterTextChanged的递归
et_content.setText(str);
et_content.setSelection(et_content.getText().length());
}
}
相关的布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.test.TestActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:minHeight="100dp"
android:lines="8"
android:maxLines="8"
android:gravity="left"
android:inputType="textMultiLine"
>
<requestFocus />
</EditText>
</RelativeLayout>
参考:
EditText 属性http://blog.csdn.net/lovexjyong/article/details/6852529
android:maxLength限制显示的文本长度,超出部分不显示。
android:lines设置文本的行数,设置两行就显示两行,即使第二行没有数据。
android:maxLines设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。
android:minLines设置文本的最小行数,与lines类似。
onCreat获取textView高度的N种方式
http://blog.csdn.net/lvshaorong/article/details/51077938
- Android EditText设置固定行高,自动删除超出文本
- 设置div中文字超出时自动换行和css实现文本超出N行之后显示省略号等
- android EditText 自动换行 设置
- android activitygroup中edittext文本无法删除
- HTML固定列表宽度,超出部分自动隐藏,设置2倍行距,单元格占据两行、两列
- android EditText向右滑动删除EditText中的文本
- Android之获取、设置EditText的文本...
- Android TextView和EditText设置文本颜色
- Android之获取、设置EditText的文本
- Android EditText 文本内容超过文本框失去焦点后,超出文本框内容显示...
- Android下edittext限制文本指定位置数字不能超出多少
- Android 设置EditText不会自动弹出键盘
- android: EditText 输入固定位数后光标自动移动到下一EditText
- css设置文本超出两行 末尾用省略号表示
- 动态设置文本行高!
- Android 解决TableRow中TextView或Edittext超出屏幕,不能自动换行或换行问题
- sublime 怎样设置识别语言?(txt文本设置固定编程语言高亮)
- 设置Android中EditText的Hint文本大小
- 二叉树的建立和遍历
- 华为交换机AR怎么做镜像,从一个端口到另外一个端口,数据抓包
- python目录操作
- 软件的本地化流程
- Hibernate缓存机制
- Android EditText设置固定行高,自动删除超出文本
- Lock和读写锁ReadWriteLock和缓存实例
- 线段树——操作格子(蓝桥杯试题集)
- Linux常用命令实例详解(N - Z)
- C#执行CMD命令并接收返回结果的实现方法
- grafika视频录制详细流程分析
- 程序设计中的三种不同出错的处理方式及其优缺点
- html5+css3实现扇形
- =="和Equals的区别