如果喜欢栗子系列可以关注哦~各种栗子正在赶来中......


栗子惯例,先上GIF

栗子1.gif
栗子2.gif

核心代码(AnFQNumEditText自定义的组合控件)

  1. 先看调用(是不是很简单)
    xml

     <anfq.numedittext.lib.AnFQNumEditTextandroid:id="@+id/anetDemo"android:layout_width="match_parent"android:layout_height="wrap_content"/>复制代码

    java

     anetDemo = (AnFQNumEditText) findViewById(R.id.anetDemo);anetDemo.setEtHint("内容")//设置提示文字.setEtMinHeight(200)//设置最小高度,单位px.setLength(50)//设置总字数//TextView显示类型(SINGULAR单数类型)(PERCENTAGE百分比类型).setType(AnFQNumEditText.SINGULAR).setLineColor("#3F51B5")//设置横线颜色.show();复制代码
  2. 实现

    1. 首先通过LayoutInflater.from获取到layout,然后findViewById拿到里面的控件,这里用了三个控件EditText,TextView,View,View是最下面的横线

       LayoutInflater.from(context).inflate(R.layout.anfq_num_edittext, this, true);etContent = (EditText) findViewById(R.id.etContent);tvNum = (TextView) findViewById(R.id.tvNum);vLine = findViewById(R.id.vLine);复制代码
    2. 然后提供一些设置值的方法,如右下角的类型(这里有两种类型,即:单数类型和百分比类型)、最大字符的长度、EditText的Hint、横线的颜色。
    3. 设置EditText的监听TextWatcher(这里是参考了网上的一些代码,具体链接找不到了)

       public void afterTextChanged(Editable s) {editStart = etContent.getSelectionStart();editEnd = etContent.getSelectionEnd();// 先去掉监听器,否则会出现栈溢出etContent.removeTextChangedListener(mTextWatcher);// 注意这里只能每次都对整个EditText的内容求长度,不能对删除的单个字符求长度// 因为是中英文混合,单个字符而言,calculateLength函数都会返回1// 当输入字符个数超过限制的大小时,进行截断操作while (calculateLength(s.toString()) > MaxNum) { s.delete(editStart - 1, editEnd);editStart--;editEnd--;}// 恢复监听器etContent.addTextChangedListener(mTextWatcher);setLeftCount();}/** 刷新剩余输入字数 */private void setLeftCount() {if(TYPES.equals(SINGULAR)){//类型1tvNum.setText(String.valueOf((MaxNum - getInputCount())));}else if(TYPES.equals(PERCENTAGE)){//类型2tvNum.setText(MaxNum-(MaxNum - getInputCount())+"/"+MaxNum);}}/** 获取用户输入内容字数 */private long getInputCount() {return calculateLength(etContent.getText().toString());}/*** 计算分享内容的字数,一个汉字=两个英文字母,一个中文标点=两个英文标点* 注意:该函数的不适用于对单个字符进行计算,因为单个字符四舍五入后都是1* @param cs* @return*/public static long calculateLength(CharSequence cs) {double len = 0;for (int i = 0; i < cs.length(); i++) {int tmp = (int) cs.charAt(i);if (tmp > 0 && tmp < 127) {len += 1;} else {len++;}}return Math.round(len);}复制代码

总结:这种EditText显示输入字数的控件在开发中经常用到,但是如果在多个地方用到的话都要做监听代码重复太多,所以做了一下封装,以便以后使用


源码地址


转载请注明出处,简书:淡漠de人生

栗子——自定义EditText实现右下角计数控件相关推荐

  1. Android之自定义EditText光标和下划线颜色

    最近在写些小Demo复习基础,在用到EditText的时候突然发现之前几乎没有注意到它的光标和下划线的颜色,于是花了不少时间,看了不少博客,现在就来总结和分享一下收获. 1.第一印象:原生的EditT ...

  2. 根据条件控制参数控件是否显示(可用)

    1.应用场景 在用报表工具FineReport设计报表时,使用参数控件时,有时我们希望部分参数控件在没满足条件时不显示,满足条件后再显示,如下图效果:只有前面的下拉框选择了内容之后,后一层下拉框控件才 ...

  3. mysql抽屉图标_React Native自定义组件实现抽屉菜单控件效果

    一.需求分析 原生开发中,自定义View可谓是屡见不鲜的事情,往往系统的控件总不能满足现实的需求.五花八门的产品设计需要我们做出不同的View.关于自定义View的内容网上已经有很多的博文,本篇博客要 ...

  4. 报表参数控件和报表内容自动居中设置方法

    在用报表工具FineReport设计报表时,常遇到以下问题: 1.参数控件(多行控件)的居中问题. 2.报表内容的居中和自适应宽度问题,以及报表标题设置了重复标题和冻结如何不影响居中. 3.图表居中和 ...

  5. Android学习小Demo(11)一个显示行线的自定义EditText

    今天在处理一个EditText的时候,想着把EditText做成像一本作业本上的纸一样,每一行都可以由线条隔开,具体效果如下: 1)最开始的思路 一开始的想法是很简单的,找出每一行的高度,然后一行一行 ...

  6. WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探

    原文:WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探 最近因为项目需要,开始学习如何使用WPF开发桌面程序.使用WPF一段时间之后,感觉WPF的开发思 ...

  7. android lrc 歌词view,自定义View强势来袭,用自定义View实现歌词显示控件下篇之自定义LyricView的实现...

    在上篇中,我与大家分享了关于如何进行*.lrc歌词文件的解析,以及将解析完成后的歌词展示在镶嵌在ScrollView中的TextView上,就这样而言,一个简单的歌词显示功能也就实现了. 但是,如何才 ...

  8. 一个自定义的安卓验证码输入框控件、银行卡归属类型查询

    一个自定义的安卓验证码输入框控件.银行卡归属类型查询. GitHub:https://github.com/longer96/VerifyCode Dependency Gradle dependen ...

  9. Kotlin 自定义View之实现标尺控件(选择身高、体重等)

    本篇文章讲的是Kotlin 自定义view之实现标尺控件Ruler,以选择身高.体重等.开发中,当我们需要获取用户的身高和体重等信息时,如果直接让他们输入,显然体验不够好.像类似于唯品会.好轻等APP ...

最新文章

  1. Interview Q A 程序会在哪一行死掉
  2. 计算机软件资源包括哪些部分组成,操作系统的计算机系统资源包含哪些
  3. django项目允许其他机器访问
  4. SQL Server存储过程的基本概念以及语法【转】
  5. mysql 执行计划 优化_执行计划
  6. php5.3 gd库,php5.3动态编译gd库 zlib扩展 mcrypt扩展 mysqli扩展
  7. linux 日文 字体,安装Fedora 11的程序用的竟然是日文字体?!
  8. 计算机应用基础实例,计算机应用基础案例教程(Windows 7+Office 2010)
  9. python如何连接sql_python连接SQL数据库
  10. C语言代码如何运行的
  11. wx-jssdk,IOS调用API,config通过了,但是报错[ the permission value is offline verifying ]
  12. 小程序 房租水电费记录管理_长租公寓管理系统-智慧公寓小程序
  13. oracle手工重建EM步骤
  14. 微软超融合+混合云:源自Azure技术的超融合架构
  15. unity3D 鼠标滚轮实现物体的大小缩放
  16. Scratch-陶陶摘苹果
  17. Jtapi开发之转接二 传递uui
  18. github上三个不错的开源框架
  19. Arduino--YF-S201水流量检测传感器
  20. 聚类算法_层次聚类_密度聚类(dbscan,meanshift)_划分聚类(Kmeans)详解

热门文章

  1. Python unittest –单元测试示例
  2. 开课吧:现阶段人工智能应用涉及到哪些行业?
  3. 整理的C++面试,这些是最为常见的
  4. perl中的q,qq,qw,qr,qx
  5. 让apache支持ssl
  6. linux下mysql日志管理及mysql备份还原
  7. 同一主机,不同域名绑定不同网站(IIS主机头实现方法)
  8. VC与JAVA DES加密算法互操作
  9. Leetcode 129. 根到叶子结点数字之和
  10. 【Spark】快速简介