目录

前言

实现步骤

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 (自动换行与限制行数)相关推荐

  1. android edittext换行位置不变,Android EditText使用自动换行但无硬性返回

    我也在寻找一些东西来做到这一点.我发现的唯一的解决办法是延长的EditText如下: package com.kylemilligan.test; import android.content.Con ...

  2. android edittext限制字节_android EditText输入限制

    zyz 发表于 2012-5-30 18:19:03 android EditText输入限制 android:digits="1234567890.+-*/%\n()" 限制输入 ...

  3. Android:EditText 属性

    Android开发EditText属性 EditText 官网链接 EditText继承关系:View-->TextView-->EditText EditText 部分属性: XML 设 ...

  4. Android EditText密码显示隐藏和全部属性的介绍

    Android EditText密码显示隐藏和全部属性的介绍 2016-08-20 17:06 4455人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: Android控件的功能(11) 作者 ...

  5. android edittext控件常用属性,Android_Android EditText常用属性功能汇总,本文总结分析了Android EditText常 - phpStudy...

    Android EditText常用属性功能汇总 本文总结分析了Android EditText常用属性.分享给大家供大家参考,具体如下: android:hint="请输入数字!" ...

  6. TextView设置最大行数、或者最多显示6个字、结束时为省略号

    android:maxLines 设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示. android:maxEms="6" ...

  7. android什么控件能够输入多行文字,Android开发:文本控件详解——EditText(一)基本属性...

    一.简单实例: EditText输入的文字样式部分的属性,基本都是和TextView中的属性一样. 除此之外,EditText还有自己独有的属性. 二.基本属性: hint 输入框显示的提示文本 te ...

  8. Android完美实现EditText换行自动缩进

    Android完美实现EditText换行自动缩进 一.目标 二.体验地址 三.实现方案 四.组合起来 1. IndentTextWatcher 五.Finally 一.目标 实现换行时,自动对齐当前 ...

  9. Android 解决Android的TextView和EditText换行问题

    Android 解决Android的TextView和EditText换行问题 参考文章: (1)Android 解决Android的TextView和EditText换行问题 (2)https:// ...

最新文章

  1. java socket实现简单即时通讯
  2. [转载] Python中str跟int的转换
  3. “租房帮”产品体验报告
  4. Spring配置跨域请求
  5. idea 开源项目申请地址
  6. JavaScript面向对象学习小结
  7. 记录几个视频处理软件
  8. 知识图谱顶刊综述 - (2021年4月) A Survey on Knowledge Graphs: Representation, Acquisition, and Applications
  9. 判断数字正数为红色负数为绿色
  10. 装完虚拟机后键盘无法使用
  11. 190108每日一句
  12. iphone主屏幕动态壁纸_iPhoneXLivePhoto动态壁纸
  13. Sql STUFF 用法
  14. 程序员女盆友的学习日记(没内容)
  15. 郭博绘制的类似modbus的处理机制
  16. 计算机电脑无法充电,iphone连接电脑无法充电怎么办
  17. Android-69-音视频开发:AnyChat for Android SDK
  18. 微信小程序中使用Base64编码解码
  19. PS替换图片中的颜色-局部以及整体变色
  20. 子类方法中super.父类方法

热门文章

  1. 基于Python的多时相数据合成
  2. Python csv 跳过第一行
  3. Cannot initialize a variable of type 'Stu *' with an rvalue of type 'void *'
  4. python3 for index_Python3 抓取数据报错IndexError: list index out of range
  5. 老子《道德经》第六十章
  6. Solidworks二次开发:获取零件选中边的圆心坐标
  7. VBA提取PPT中的文字
  8. 服务器显卡驱动安装NVIDIA-1080Ti
  9. Python + Tweepy 实现Twitter信息抓取(1)——准备阶段
  10. 基于springboot的药店进销存管理系统