目录
前言
实现步骤
1、限制行数
2、通过java代码配合maxLines 参数,实时删除三行之外的内容(包括回车键的换行符输入)
3、在src/main/res/values/中添加相关属性
4、XML 完整代码
前言
本片介绍 目标,让EditText既可以自动换行,也能完美限制行数,并且让回车键不能换行(完整代码在最后部分,不想看分析过程请拉到底部)
注:如果是限制单行,只需要设置在xml中设置android:singleLine="true",后面的内容可以不看
限制只能输入n行:
实现步骤
1、限制行数
在Android的输入控件EditText 通过
android:maxLines=“2”
限制行数的时候 ,需要android:inputType配合使用,否则不能生效,这个时候有两个文本类型的值供我们选择
android:inputType="textMultiLine"
android:inputType="text"
但是设置android:inputType="text",输入框会失去自动换行的能力,所以我们
只能用 android:inputType="textMultiLine"
这个时候 BUG 来了
在输入文本的时候可以很好的限制行数,但是唯独软键盘上的回车键打破了这个规则.
2、通过java代码配合maxLines 参数,实时删除三行之外的内容(包括回车键的换行符输入)
public class ActionEditText extends AppCompatEditText {
public ActionEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
int maxLins;
public ActionEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
}
public void init(Context context, AttributeSet attrs, int defStyleAttr) {
addTextChangedListener(new MyTextWatcher());
TypedArray array = (attrs, , defStyleAttr, 0);
try {
maxLins = (.album_android_maxLines, Integer.MAX_VALUE);
} finally {
();
}
}
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) {
}
@Override
public void afterTextChanged(Editable s) {
int lineCount = getLineCount();
if (lineCount > maxLins) {
//发现输入的内容大于最大行数,则删除多余的内容
deleteExtra();
}
}
private void deleteExtra() {
String str = getText().toString();
str = (0, () - 1);
setText(str);
setSelection(getText().length());
}
}
}
3、在src/main/res/values/中添加相关属性
<resources>
<declare-styleable name="album">
<attr name="android:maxLines" />
</declare-styleable>
</resources>
4、XML 完整代码
<
android:
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="3"
android:inputType="textMultiLine" />
以上就是全部的解决方案,如有更好的办法,欢迎讨论