Android - 当删除部分 ImageSpan 时删除整个 ImageSpan?

2024-02-11

我通过插入 ImageSpan 将图像添加到我的编辑文本中。我对跨度没有透彻的了解,但似乎我的 ImageSpan 需要包装一部分文本。因此,我向 EditText 添加一些文本,并用 ImageSpan 包裹它,看起来不错。但是,当我退格 ImageSpan 时,它仅删除文本的一个字符,并且图像将保留,直到整个文本被删除。如何让它只用一个退格键删除?

SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(content.getText());

String imgId = "[some useful text]"; 

int selStart = content.getSelectionStart();

builder.replace(content.getSelectionStart(), content.getSelectionEnd(), imgId);

builder.setSpan(imageSpan, selStart, selStart+imgId.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
content.setText(builder);

一段时间后,我找到了解决方案。试试这个代码:

private TextWatcher watcher = new TextWatcher() {
    private int spanLength = -1;

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        if (start == 0) return;
        if (count > after) {
            ImageSpan[] spans = getEditableText().getSpans(start + count, start + count, ImageSpan.class);
            if (spans == null || spans.length == 0) return;
            for (int i = 0; i < spans.length; i++) {
                int end = getEditableText().getSpanEnd(spans[i]);
                if (end != start + count) continue;
                String text = spans[i].getSource();
                spanLength = text.length() - 1;
                getEditableText().removeSpan(spans[i]);
            }
        }
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (spanLength > -1) {
            int length = spanLength;
            spanLength = -1;
            getEditableText().replace(start - length, start, "");
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
    }
};

但是您应该使用原始字符串创建 ImageStan,如下所示:

ssb.setSpan(new ImageSpan(bmpDrawable, originalStr), x, x + originalStr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 当删除部分 ImageSpan 时删除整个 ImageSpan? 的相关文章

  • StrictMode 策略违规:我的应用程序中存在 android.os.strictmode.LeakedClosableViolation?

    Android 开发新手 第一次在我的应用程序上尝试 StrictMode 我注意到以下内容 并想知道这是否是我的应用程序或库中的问题 我不太清楚 谢谢你 D StrictMode StrictMode policy violation a
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • CardView 圆角获得意想不到的白色

    When using rounded corner in CardView shows a white border in rounded area which is mostly visible in dark environment F
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • 如何测量我的网站客户端的图像下载时间?

    在 Img 标签中 我们知道图像有一个 OnLoad 事件 该事件在图像完成加载时触发 但是我们能在图像开始下载时得到准确的测量结果吗 我正在尝试测量网站的页面加载时间 因此如果可能的话 了解加载图像需要多长时间将成为我分析的一部分 我想以
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • Android 模拟器插件无法初始化后端 EGL 显示

    我在 Cloudbees 上设置了 Jenkins 作业 并且可以在那里成功签出并编译我的 Android 项目 现在我想在 android 模拟器中运行一些 JUnit 测试并添加 Android 模拟器插件 我将 显示模拟器窗口 选项设
  • Android 中 Kotlin 协程的正确使用方式

    我正在尝试使用异步更新适配器内的列表 我可以看到有太多的样板 这是使用 Kotlin 协程的正确方法吗 这个可以进一步优化吗 fun loadListOfMediaInAsync async CommonPool try Long runn
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 如何使用 IF 检查 TextView 可见性

    我有一个 onCheckedChangeListener 来根据选择的单选按钮显示文本视图 我有 1 个疑问和 1 个难题 想知道是否有人可以帮助我 问题 您能否将单选组默认检查值设置为 否 单选按钮 以便一开始就不会检查任何内容 问题 如
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591

随机推荐

  • Swift 1.2 中的 @noescape 属性

    Swift 1 2 中有一个新属性 在函数中带有闭包参数 正如文档所述 这表明 参数仅被调用 或作为 noescape 调用中的参数 这意味着它不能 比调用的生命周期更长 据我了解 在此之前 我们可以使用 weak self 不要让闭包有强
  • 如何从 TFS 控制下的项目中删除空文件夹?

    假设我有一个项目 MyLib 在该项目下 我创建了一个文件夹 例如Folder1 该文件夹下没有文件 该项目已连接到 TFS 然后我想删除这个文件夹Folder1 我从上下文菜单中删除了它 并将项目签入 TFS 然后我使用 Team Exp
  • 传递给函数的原始变量名? [复制]

    这个问题在这里已经有答案了 可能的重复 PHP 获取作为参数传递的变量的名称 https stackoverflow com questions 2379166 php get name of variable passed as argu
  • 服务层是否应该接受来自控制器的 DTO 或自定义请求对象?

    正如标题所示 设计服务层时的最佳实践是什么 我确实理解服务层应该始终返回 DTO 以便域 实体 对象保留在服务层中 但是控制器向服务层的输入应该是什么 下面我提出三点我自己的建议 方法一 在此方法中 域对象 Item 保留在服务层内 cla
  • PowerMock 测试通过然后失败

    为什么我的单元测试在独立运行时通过 但在运行多个测试时失败 当我执行单个单元测试时 我的测试将成功模拟并返回预期结果 但是 当我运行所有单元测试时 我之前通过的测试将失败 一次试运行 shouldDoThisAgain 通过 多次测试运行
  • Linq:GroupBy、Sum 和 Count

    我有一系列产品 public class Product public Product public string ProductCode get set public decimal Price get set public string
  • 在Java中生成数百万个不重复的随机数

    我有一个问题 我可以使用什么算法在Java中生成一组2 21随机唯一数字 java中除了math random之外还有另一个生成随机数的库吗 提前致谢 关键问题是你所说的 数字 是什么意思 一般来说 这个问题可以通过 生成一个数字列表 将其
  • 将整个文件夹从 Windows 移动到 Android 模拟器

    是否可以将整个文件夹按原样从 Windows 移动到 Android 模拟器 我确信这个问题的答案存在于某处 但我无法找到它 我可以通过 adb 命令行或通过 ddms 一次移动一个文件 但都没有给我提供移动包含多个文件夹和文件的整个文件夹
  • 表单标签可以包含正文标签吗?

    今天我遇到一些代码 在正文标签开始之前有一个表单标签 我的意思是 表单标签包含在正文标签中 这可能吗 如果是的话 它有什么帮助呢
  • 如何使用 Unix 变量在会话 {bash} 中设置和保留值 [重复]

    这个问题在这里已经有答案了 我需要做这样的事情 设置一个带有默认值的 unix 变量 运行一个 shell 脚本来读取该变量并对其进行处理 处理后可能会也可能不会改变该变量的值 每小时运行此脚本并确保此变量现在的值是上次运行此脚本时设置的值
  • 使用 PHP 获取/读取 Javascript cookie

    我有一个理论问题 我知道你可以使用 javascript 获取 读取 PHP cookie 文档 cookie PHP 中有类似的方法吗 PHP 可以获取 读取在 JavaScript 中创建的 cookie 吗 如果是 那么你怎么能这样做
  • 为什么 ENUM 在 MySQL 中不存储多个值?

    我想用ENUM表中的特征使用MySQL 我创建了一个表tbl test having id作为主键和enum col字段为ENUM数据类型 CREATE TABLE tbl test id INT NOT NULL AUTO INCREME
  • 具有相同工作空间的 2 个 Eclipse 版本

    目前 我的系统上正在运行 Eclipse Ganymede 我想安装 Eclipse Indigo 并将其连接到同一工作区 然后删除 Eclipse Ganymede 这可以正常工作还是我应该重新创建所有项目 理论上它应该有效 在实践中 我
  • Spring Cloud Sleuth 与 OpenTracing

    有没有办法将 Spring Cloud Sleuth 与 OpenTracing 结合使用 我想将 Spring 客户端与 Jaeger 连接 Spring Sleuth 现在与 OpenTracing 兼容 您所要做的就是在类路径中使用
  • 使用 preRemove/postRemove 事件来获取哪些查询可以执行,哪些不能执行

    我在脑海中思考这个问题有一段时间了 现在我需要一些关于 preRemove postRemove 事件的建议 因为我将执行的查询基本上是DELETE但这也应该适用于 prePersist postPersist 和 preUpdate po
  • 我如何了解如何在 jQuery AJAX 应用程序中启用后退按钮?

    我查看了这里所有最热门的问题 包括引用最流行插件 如 BBQ 和 jQuery Address 的问题 然而 我缺少一些东西 我需要从我在这些项目中看到的任何事情中退一步进行指导 他们假设了一些我显然不具备的基本知识 并且我无法推断出示例中
  • 尝试在android中写入只读数据库

    当尝试更新值时 会发生这些错误 02 09 11 37 53 573 ERROR AndroidRuntime 4809 android database sqlite SQLiteException attempt to write a
  • Matplotlib - 财务量叠加

    我正在制作一个包含两个数据集的烛台图 开盘价 最高价 最低价 收盘价 和交易量 我试图将交易量叠加在图表底部 如下所示 我正在打电话卷 覆盖3 http doc astro wise org matplotlib finance html
  • 带有大量参数的Sql存储过程

    我正在使用 Sql Server 2008 我的存储过程接受近 150 个参数 性能方面有什么问题吗 当您使用 SQL Server 2008 时 您可以使用新的 Table 参数 如果参数相同 可以轻松使用表参数 这是链接到MSDN ht
  • Android - 当删除部分 ImageSpan 时删除整个 ImageSpan?

    我通过插入 ImageSpan 将图像添加到我的编辑文本中 我对跨度没有透彻的了解 但似乎我的 ImageSpan 需要包装一部分文本 因此 我向 EditText 添加一些文本 并用 ImageSpan 包裹它 看起来不错 但是 当我退格