首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

正如SpannableData所展现的一样,当spannedText()返回的是一个Spannable对象时,使用Spanned.SPAN_EXCLUSIVE_EXCLUSIVE作为flag。...似乎我们不能通过setText()添加内容,只能使用getText()追加内容。不仅如此,我们必须完全禁用setText(),因为每一次调用,都会清除掉SelectionSpanWatcher。...这些都可以,唯一的缺点是,它不是我想要的优雅。我要让它就像使用普通EditText一样正常使用setText()方法。 需要思考的问题是,SelectionSpanWatcher在哪里消失了?...当TextView.isTextSelectable()返回true时,TextView的文本模式; 3)BufferType.EDITABLE EditText的文本模式,可编辑,带文本样式。...阅读上面的源码片段时,不知道有没有人注意到setText(CharSequence)传入一个CharSequence对象,TextView#getText()返回的是CharSequence对象, EditText

2.3K30

Android开发笔记(一百四十六)仿支付宝的支付密码输入框

编辑框EditText算是Android的一个基础控件了,表面上看,EditText只负责接收用户手工输入的文本;可实际上,要把这看似简单的文本输入做得方便易用,并不是一个简单的事情...当然,在界面展现上,需要以横排方格的形式加以显示。于是可以考虑,把支付密码的输入与显示操作分离开来,即密码输入操作仍由EditText处理,而密码显示操作则由自定义的方格布局接管。...对于处理密码输入的EditText来说,需要实现以下几项操作: 1、把默认的下划线背景替换为圆角背景,且支持在获得焦点时高亮显示; 2、屏蔽输入光标,可调用setCursorVisible方法设置为不可见...,决定当前显示明文还是密文;如果是密文,则显示哪个密文字符; 5、每当EditText里的文本发生变更之时,相应更新TextView队列的各项文本显示; 上述的改造内容,大部分都有可以直接调用的函数,...其次,对于支付密码输入框的焦点获得问题,因为该输入框内部集成了EditText,所以不管是给输入框注册点击事件还是触摸事件,手势焦点都会被内部的EditText所抢占,使得密码输入框反而不会响应点击和触摸事件

1.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android开发笔记(三十六)展示类控件

    setHintTextColor : 设置提示文本的颜色。 在录入用户信息时(比如输入姓名、密码等等),EditText输入回车键,常常不要换行而是让光标直接跳到下一个编辑框。...该功能有两种实现方式: 方式一:给编辑框注册一个OnKeyListener监听器(setOnKeyListener方法),当检测到回车键(keyCode == 66)时,触发光标跳转操作; 方式二:...给编辑框注册一个TextWatcher监听器(addTextChangedListener方法),当检测到文本发生变化并找到回车换行符时,触发光标跳转操作; 2、保持当前控件不换行,依旧单行显示。...et_this.setText(str); 3、光标跳到下个编辑框,并自动挪到编辑框文本末尾。...(); Selection.setSelection(edit, edit.length()); 注意控件之间切换光标要使用requestFocus方法,不能使用setFocusable方法(该方法只能切换焦点

    1.5K30

    Android富文本开发

    图片提供按钮操作 软键盘删除键可删除图片,也可以删除文字内容 文字可以修改属性,比如加粗,对齐,下划线 根据富文本作出以下分析 使用原生控件,可插入图片、文字界面不能用一个EditText来做,需要使用...LinearLayout添加不同的控件,图片部分用ImageView,界面可滑动最外层使用ScrollView。...如果设置为true则表示decode函数不会生成bitmap对象,仅是将图像相关的参数填充到option对象里,这样我们就可以在不生成bitmap而获取到图像的相关参数了。...第一次:设置为true则表示decode函数不会生成bitmap对象,仅是将图像相关的参数填充到option对象里,这样我们就可以在不生成bitmap而获取到图像的相关参数。...第二次:将inJustDecodeBounds设置为false再次调用decode函数时就能生成bitmap了。而此时的bitmap已经压缩减小很多了,所以加载到内存中并不会导致OOM。

    8.5K20

    Android自定义EditText:手把手教你做一款含一键删除&自定义样式的SuperEditText

    前言 Android开发中,EditText的使用 非常常见 本文将手把手教你做一款 附带一键删除功能 & 自定义样式丰富的 SuperEditText控件,希望你们会喜欢。 ?...需要具备的功能如下: 一键删除 丰富的自定义样式:左侧图标、删除功能图标、分割线 & 光标 样式变化。...特点 对比市面上EditText控件,该控件Super_EditText 的特点是: 3.1 功能实用 一键删除功能 在需求中非常常见,现将其封装后更加方便使用 可自定义样式程度高(比自带的强大 & 方便...),不复杂却能满足一般的EditText使用需求 可自定义样式如下:(注:该样式的设置是系统自带的 API 所不具备的) ?...具体使用 具体请看文章:Android自定义View:你需要一款简单实用的SuperEditText(一键删除&自定义样式) ---- 7.

    1.9K30

    Android自定义EditText:手把手教你做一款智能EditText(一键删除、自定义样式)

    前言 Android开发中,EditText的使用 非常常见 本文将手把手教你做一款 附带一键删除功能 & 自定义样式丰富的 SuperEditText控件,希望你们会喜欢。...需要具备的功能如下: 一键删除 丰富的自定义样式:左侧图标、删除功能图标、分割线 & 光标 样式变化。...特点 对比市面上EditText控件,该控件Super_EditText 的特点是: 3.1 功能实用 一键删除功能 在需求中非常常见,现将其封装后更加方便使用 可自定义样式程度高(比自带的强大 & 方便...),不复杂却能满足一般的EditText使用需求 可自定义样式如下:(注:该样式的设置是系统自带的 API 所不具备的) 3.2 使用简单 仅需要简单的xml属性配置 具体请看文章:Android自定义...具体使用 具体请看文章:Android自定义View:你需要一款简单实用的SuperEditText(一键删除&自定义样式) 7.

    1.3K30

    程序正在监听你的一举一动?

    相信大家在项目中多多少少都用过EditText这个控件吧,但是大家是否熟悉它的监听呢?最近阿Q在使用它的监听的过程中就碰到了几个问题,在这里整理一下,供小伙伴们参考。...()为文字显示在EditText上的操作。...大家应该注意的是如果在afterTextChanged()函数中去调用setText()方法,就会去重复调用其前两个方法,造成死循环,直到程序崩溃为止。...所以我们在最后一个方法中要慎用setText(),所以我们只可将特殊情况的处理 用setText()来表示。...在使用过程中,如果复用EditText的话,会出现输入数字错乱的问题,这时候我们需要加上监听的唯一标志,用于区分不同的监听,并且监听用完之后要记得移除监听。

    40730

    Android文件读写和使用SharedPreferences储存数据

    主要是一些Java中的文件操作,如果不熟悉的话可以去网上找一些教程。在 onDestroy 方法中调用 saveText 来储存 EditText 中的数据。...得到了SharedPreferences对象之后我们就可以利用它进行数据的储存了: (1) 调用Sharedpreferences 对象的 edit() 方法获取一个SharedPreferences.Editor...对象 (2) 使用SharedPreferences.Editor 对象的特性方法储存数据(putString()...) (3) 调用SharedPreferences.Editor 对象的apply...R.id.userNameEditText)).setText(userName); ((EditText) findViewById(R.id.passwordEditText)).setText...} } } 主要的思想还是通过两个自定义方法实现:login() 方法用于单击“登录”按钮时对用户名和密码等信息的储存,loadUserInfo() 方法用于恢复用户名和密码等操作

    2K10

    让你的EditText删除表情比微信更高效--记一次android性能分析优化实战

    前言 自己在做SpEditTool:一个支持表情,@mention,#话题#等功能的EditText控件,这个项目的时候出现了一个很奇怪的问题 EditText输入表情过多的时候,从中间开始删除表情,会出现非常卡的情况...之前文章中提到过SpanWatcher继承于NoCopySpan接口,在产生一个新的Spannable对象时NoCopySpan不会被复制,而ChangeWatcher则实现了SpanWatcher,...() 删除表情后再将SpannableStringBuilder设置给EditText 最后设置光标位置 完成这一系列操作之后demo一跑,删除果然变流畅了,当时心里那个高兴啊,竟然做个功能可以比微信实现的还好那么一点...,搜狗输入法也会出现,估计是百度输入法在出现这样的情况时就把删除按钮的触摸事件给中断了 出现上面log的原因是因为InputConnection在setText()时需要被重新创建,而第二次删除时InputConnection...()被调用,谷歌直接简单粗暴的用反射获取了ChangeWatcher的Class对象,在setSpan()的时候发现如果是ChangeWatcher就把它包装在新的WatcherWrapper中,所有的操作都通过

    1.4K30

    webview长按复制_安卓手机怎么复制图片上的文字

    大家好,又见面了,我是你们的朋友全栈君。 有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息。...这里面主要是2个特点: 1、用户只能浏览文本信息而不能编辑这些文本信息; 2、用户对着文本信息长时间点按可以弹出”复制” 选项实现复制; 网上有好多种方法可实现,也比较零散, 此处做个小结,希望有所帮助...被编辑 return false; } } 上面很关键的一个方法是getDefaultEditable(), return false;即禁止EditText被编辑,变成了不可编辑的EditText,但同时具有...原理如上, 更直白简单的方法是直接在xml中使用一个EditText,并且将属性设置为 android:editable=”false” . 2、使用OnLongClickListener 直接使用TextView...点击”复制” 就去获取TextView的内容。 当然, 这里只是获取内容,如何将内容放入粘贴管理器还需要一个ClipboardManager 对象。它负责管理复制后粘贴的这件事。

    3.6K20

    微博的文本编辑和显示(emoji表情,@某人、链接高亮点击)

    日常开发的过程中我们经常会需要实现类似微博的文本输入框,可以自定义的emoji、@某人高亮显示、快捷删除、文本显示表情、@人和链接点解等效果。...】其他APP的做法,一般文本使用[xxx]这样的方式,表情也是对应使用xx1-xxx100这样的命令,可以方便操作,这样我们就得到了一个关联了表情和文本的Map了\(o)/目前还不能吃。...()); return spannableString; } EditTextAtUtils 处理@某人的逻辑 这里需要实现的在编辑文本框中需要实现的@某人显示,类似微博Android...EditText在点击的时候我们可以获取到光标落下的位置,这时候我们通过该位置去已有@的list列表里判断每个名字所在位置,比对光标位置是不是落在了@块内,如果是就强行将光标落到@块的旁边(= =光标不能插进来...这里不用普通的span,直接使用Html.fromHtml来达到文本变色的效果,将@名字插入到spannableStringBuilder光标的位置中,再在后面补上一个\b。

    2.2K20

    EditText 集锦 - 开发中常用的用法及遇到的各种坑

    同时,本文章会持续更新,建议收藏起来。...主题中的 “colorAccent”的颜色. textCursorDrawable //设置被光标的颜色.默认为 Theme 主题中的 “colorAccent”的颜色. android:textScaleX...:editable //设置EditText是否可以编辑.当你设置为true,会提示你该EditText已经是可编辑的.设置为false时会提示使用inputType替代. android:inputType...如设置成1.5倍. ---- 输入法相关 设置默认输入法 有时候为了提高用户体验,在弹出输入法时需要设置默认的输入状态,比如单词应用弹出输入法时,输入法最好是在英文输入状态下。...,就是当你的 text 超过 30 个字符的时候,你调用 mEtText.setText ,这时候会报错。

    2.3K20

    手机卫士黑名单功能(ListView结合SQLite增删改)

    添加记录 调用Builder对象的show()方法,获取AlertDialog对象 调用View.inflate()方法,将布局文件转成View对象 调用View对象的findViewById()方法,...,数据库增加一条记录,参数:String电话号码,String拦截模式 此时ListView并不会显出出来刚添加的记录,需要退出这个Activity重写进入,我们通知适配器数据更新 调用集合List对象的...add()方法,添加一条数据,参数:0(第一个),数据 调用ListAdapter对象的notifyDataSetChanged()方法,通知数据更新 删除记录 条目布局文件中,在右侧放置一个垃圾桶的小图标...时,它所在的包是DialogInterface.OnClickListener 调用之前定义好的Dao类BlackNumberAdo对象的delete()方法,参数:String电话号码 调用集合List...对象的remove()方法,删除一条数据,参数:int索引 调用ListAdapter对象的notifyDataSetChanged()方法,通知数据更新 CallSmsSafeActivity.java

    89730

    高仿Android「填空题」控件:手撸一个炫酷的View动效!

    但是,他们都存在一些问题,比如 1.非嵌入式的输入,需要在外部提供一个可输入的EditText 2.虽然是嵌入式的输入,但是可编辑文字必须要固定长度,不能根据文字长短动态变化 总而言之,就是体验还是不够好...,我们很少自己去定义一个控件,而是直接使用EditText,以至于我们几乎认为只有EditText可以接收输入法输入。...光标结束位置的x坐标和起始位置相同,y坐标则为其实坐标加上文字高度 3)考虑多类型输入时的光标位置 当输入的文字包含汉字、英文、数字时,由于英文/数字的占位比汉字小,此时,如果按照汉字的单字来计算光标所在文字的索引...自定义控件嘛,每个人去实现的时候,都会有不一样的做法,比如上面计算光标实际位置的方法,肯定会有不同的更好的方法。所以,了解实现的思想和可借助工具方法即可,没必要太过较真。...最后还一些边边角角的小功能,比如自定义一些可配置属性:文字颜色,字体大小,可编辑字段格式,光标颜色等等;比如根据文字高度,自适应控件高度;比如输入法的弹出和隐藏...... 不再细提,具体可看源码。

    1.7K30
    领券