Android EditText 换行 BUG (自动换行与限制行数)
目录
前言
实现步骤
1、限制行数
2、通过java代码配合maxLines 参数,实时删除三行之外的内容(包括回车键的换行符输入)
3、在src/main/res/values/attrs.xml中添加相关属性
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 = context.obtainStyledAttributes(attrs, R.styleable.album, defStyleAttr, 0);try {maxLins = array.getInt(R.styleable.album_android_maxLines, Integer.MAX_VALUE);} finally {array.recycle();}} public class MyTextWatcher implements TextWatcher {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {int lineCount = getLineCount();if (lineCount > maxLins) {//发现输入的内容大于最大行数,则删除多余的内容deleteExtra();}}private void deleteExtra() {String str = getText().toString();str = str.substring(0, str.length() - 1);setText(str);setSelection(getText().length());}}
}
3、在src/main/res/values/attrs.xml中添加相关属性
<resources><declare-styleable name="album"> <attr name="android:maxLines" /> </declare-styleable>
</resources>
4、XML 完整代码
<yourPackagePath.ActionEditTextandroid:id="@+id/et_content"android:layout_width="match_parent"android:layout_height="wrap_content"android:maxLines="3"android:inputType="textMultiLine" />
以上就是全部的解决方案,如有更好的办法,欢迎讨论
Android EditText 换行 BUG (自动换行与限制行数)相关推荐
- android edittext换行位置不变,Android EditText使用自动换行但无硬性返回
我也在寻找一些东西来做到这一点.我发现的唯一的解决办法是延长的EditText如下: package com.kylemilligan.test; import android.content.Con ...
- android edittext限制字节_android EditText输入限制
zyz 发表于 2012-5-30 18:19:03 android EditText输入限制 android:digits="1234567890.+-*/%\n()" 限制输入 ...
- Android:EditText 属性
Android开发EditText属性 EditText 官网链接 EditText继承关系:View-->TextView-->EditText EditText 部分属性: XML 设 ...
- Android EditText密码显示隐藏和全部属性的介绍
Android EditText密码显示隐藏和全部属性的介绍 2016-08-20 17:06 4455人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: Android控件的功能(11) 作者 ...
- android edittext控件常用属性,Android_Android EditText常用属性功能汇总,本文总结分析了Android EditText常 - phpStudy...
Android EditText常用属性功能汇总 本文总结分析了Android EditText常用属性.分享给大家供大家参考,具体如下: android:hint="请输入数字!" ...
- TextView设置最大行数、或者最多显示6个字、结束时为省略号
android:maxLines 设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示. android:maxEms="6" ...
- android什么控件能够输入多行文字,Android开发:文本控件详解——EditText(一)基本属性...
一.简单实例: EditText输入的文字样式部分的属性,基本都是和TextView中的属性一样. 除此之外,EditText还有自己独有的属性. 二.基本属性: hint 输入框显示的提示文本 te ...
- Android完美实现EditText换行自动缩进
Android完美实现EditText换行自动缩进 一.目标 二.体验地址 三.实现方案 四.组合起来 1. IndentTextWatcher 五.Finally 一.目标 实现换行时,自动对齐当前 ...
- Android 解决Android的TextView和EditText换行问题
Android 解决Android的TextView和EditText换行问题 参考文章: (1)Android 解决Android的TextView和EditText换行问题 (2)https:// ...
最新文章
- java socket实现简单即时通讯
- [转载] Python中str跟int的转换
- “租房帮”产品体验报告
- Spring配置跨域请求
- idea 开源项目申请地址
- JavaScript面向对象学习小结
- 记录几个视频处理软件
- 知识图谱顶刊综述 - (2021年4月) A Survey on Knowledge Graphs: Representation, Acquisition, and Applications
- 判断数字正数为红色负数为绿色
- 装完虚拟机后键盘无法使用
- 190108每日一句
- iphone主屏幕动态壁纸_iPhoneXLivePhoto动态壁纸
- Sql STUFF 用法
- 程序员女盆友的学习日记(没内容)
- 郭博绘制的类似modbus的处理机制
- 计算机电脑无法充电,iphone连接电脑无法充电怎么办
- Android-69-音视频开发:AnyChat for Android SDK
- 微信小程序中使用Base64编码解码
- PS替换图片中的颜色-局部以及整体变色
- 子类方法中super.父类方法
热门文章
- 基于Python的多时相数据合成
- Python csv 跳过第一行
- Cannot initialize a variable of type 'Stu *' with an rvalue of type 'void *'
- python3 for index_Python3 抓取数据报错IndexError: list index out of range
- 老子《道德经》第六十章
- Solidworks二次开发:获取零件选中边的圆心坐标
- VBA提取PPT中的文字
- 服务器显卡驱动安装NVIDIA-1080Ti
- Python + Tweepy 实现Twitter信息抓取(1)——准备阶段
- 基于springboot的药店进销存管理系统