Android-如何在文本视图上显示文本选择?

2024-02-10

我正在实现一个 epub 阅读应用程序,其中使用 textview 来显示 epub 文本。我想当用户长按文本视图时从文本视图中选择文本,然后对文本视图的选定文本执行多种操作,例如突出显示等。 那么,我如何向用户显示这些光标来选择用户想要的文本。

*我不想使用EditText并使其看起来像textview。可能优先选择覆盖文本视图。

*我已附上屏幕截图来解释我在寻找什么-


这是很久以前的问题了,当时我自己也遇到了这个问题。我自己为我自己的应用程序 Jade Reader 制作了一个 Selectable TextView。我已将解决方案托管到 GitHub。 (BitBucket 上的代码与应用程序相关,但它更完整、更完善。)

可选择的 TextView(在 GitHub 上) https://github.com/zhouray/SelectableTextView

Jade Reader(在 BitBucket 上) https://bitbucket.org/rayzhou/jaderead-restart/overview

使用以下代码将使您的 TextView 可选择。

package com.zyz.mobile.example;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class MainActivity extends Activity {

    private SelectableTextView mTextView;
    private int mTouchX;
    private int mTouchY;
    private final static int DEFAULT_SELECTION_LEN = 5;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // make sure the TextView's BufferType is Spannable, see the main.xml
        mTextView = (SelectableTextView) findViewById(R.id.main_text);
        mTextView.setDefaultSelectionColor(0x40FF00FF);


        mTextView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                showSelectionCursors(mTouchX, mTouchY);
                return true;
            }
        });
        mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mTextView.hideCursor();
            }
        });
        mTextView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mTouchX = (int) event.getX();
                mTouchY = (int) event.getY();
                return false;
            }
        });
    }

    private void showSelectionCursors(int x, int y) {
        int start = mTextView.getPreciseOffset(x, y);

        if (start > -1) {
            int end = start + DEFAULT_SELECTION_LEN;
            if (end >= mTextView.getText().length()) {
                end = mTextView.getText().length() - 1;
            }
            mTextView.showSelectionControls(start, end);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android-如何在文本视图上显示文本选择? 的相关文章

  • Flutter 中的 AndroidManifest 中缺少默认通知通道元数据

    我在用firebase messaging 5 0 1软件包来实现推送通知 在 IOS 中一切正常 而在 Android 中 当我的移动应用程序在后台运行时 我收到通知 但它没有导航到相应的屏幕 它只是打开默认屏幕 如何实现到该特定屏幕的导
  • Gradle 构建错误:内存不足

    当我使用 gradle 构建时 它失败并显示以下信息 OpenJDK 64 Bit Server VM warning INFO os commit memory 0x0000000788800000 89128960 0 failed e
  • 我在哪里可以获得可靠的熵来源(真正的随机性字节[])?

    目前 我正在寻找一种方法来增加随机性的质量 in my Android应用程序 纸牌游戏 之前 估计对于我的情况 52 排列 至少需要 226 位熵 226 个随机位 我打算用这个byte 作为种子SecureRandom SecureRa
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • 使用一个 apk 安装两个应用程序

    我有 2 个应用程序 1 内容提供者 2 使用此 ContentProvider 的应用程序 我需要使用单个 apk 文件安装这 2 个应用程序 我想在 Eclipse 中同时推送这两个应用程序 如果我将另一个项目添加到一个应用程序的构建路
  • Android 应用程序在启动时打开应用程序信息屏幕,而不是启动主 Activity

    我不确定这是否是一个问题 但这是我第一次遇到这个问题 我正在开发一个应用程序 当我在进行一些编码后断开应用程序与 Android Studio 和 PC 的连接时 如果我尝试在手机上打开应用程序 它会启动app info屏幕 我们看到强制停
  • 从 arraylist 和 hashmap 中删除重复项

    我有一个数组列表 其中包含付款人的姓名 另一个数组列表包含每次付款的费用 例如 nameArray 尼古拉 劳尔 洛伦佐 劳尔 劳尔 洛伦佐 尼古拉 价格数组 24 12 22 18 5 8 1 我需要将每个人的费用相加 所以数组必须变成
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • Google 地图删除标记路线上下文菜单

    我使用 Android Studio 的 Google 地图模板启动了一个新项目 并在地图上添加了一个标记 LatLng location new LatLng lat lng Marker marker mMap addMarker ne
  • 在 Android Lollipop 中从 Uri 中裁剪照片后总是返回 Null?

    我尝试在拍照或挑选照片后从 Uri 中裁剪图像 我的代码是这样的 public static void cropImage Uri uri Activity activity int action code Intent intent ne
  • Android:使 Dialog 周围的所有内容都比默认值更暗

    我有一个具有以下样式的自定义对话框 它显示了一个无边框对话框 后面的任何内容都会 稍微 变暗 我的设计师希望背后的一切都比 Android 的默认设置更暗 但不是完全黑色 有这样的设置吗 我能想到的唯一解决方法是使用全屏活动而不是对话框 只
  • 像 WhatsApp 一样发送图片

    我做了一个聊天应用程序 我想添加照片 文件共享我的应用程序中的概念与 WhatsApp 相同 我已经使用该应用程序制作了Xmpp Openfire目前我正在使用此功能进行照片共享 但它并不完全可靠 public void sendFile
  • 屏幕开/关检测

    在这里 我试图确定屏幕是否打开 但按下电源锁定 解锁按钮时它似乎不起作用 应用程序运行没有错误 但 if else 中的代码似乎没有效果 Edited现在代码可以工作了 谢谢Olgun 但媒体播放器播放不会停止 并且每次在屏幕上 离屏时都会
  • 是否可以使用 CardView 为浮动操作按钮制作阴影?

    I know CardView不是为此而设计的 但理论上如果cardCornerRadius view size 2它应该导致圆圈 我错过了什么吗 绘制真实的动画阴影并不困难 您可以尝试在 Froyo 等任何 Android 设备上实现 L
  • 由于“进程崩溃”,仪器运行失败。

    我想运行以下测试 package com xxx yyy import android content Context import androidx test InstrumentationRegistry import androidx
  • 无法使用文件提供程序从内部存储打开 PDF 以便在 Android 8 和 9 上查看

    仅适用于 Android 8 和 9 我这里有一个 PDF 文件管理器 String url file storage emulated 0 Android data com verna poc files Download mypdf p
  • Android AdMob:addView 在返回活动之前不会显示广告

    我正在尝试在游戏顶部添加横幅广告 我的活动使用带有自定义 SurfaceView 的relativelayout 我希望广告与 SurfaceView 重叠 广告会加载并可点击 但不会绘制到屏幕上 当我离开活动并返回时 会绘制广告 例如 通
  • 在 Android 手机中通过耳机插孔发送数据

    我目前正在处理一个新项目 我必须通过具有特定电压的耳机插孔发送数据 然后我可以在该电压上工作 所以这里我需要根据我的数据来编程具体电压 我是否可以在android中访问耳机的输出电压 然后创建一个应用程序来控制该电压 这是一篇讨论此问题的
  • Fragment 生命周期和在不存在的 Fragment 上调用 onCreate 的问题

    我正在 Android 中测试片段 并且片段生命周期有一些令人困惑的行为 我有一个活动 在横向和纵向模式下使用 xml 布局 我有一些代码可以访问在片段布局之一中定义的 EditText 对象 如果我以横向模式启动应用程序 一切都会正常 我
  • R.java是手动修改的!恢复到生成的版本

    我在布局中添加了一个 xml 文件 之后这个错误就来了 但问题是我还没有接触过 R java 文件 现在 在我的新活动中 我要将其内容视图设置为我新创建的 xml 文件 但是当我执行 R layout 时 新创建的 xml 不会出现在建议中

随机推荐

  • 如何让Android系统对所有apk强制使用LANDSCAPE?

    为了实现这一点 我在android系统 v4 04 中进行了三种修改 它们是 1 WindowsManagerService java 修改了getOrientationFromWindowsLocked 2 Activity java 修
  • Angular2 rxjs - switchmap 捕获错误

    我希望能够处理调用时出错的任何错误this authService refreshToken 可以在 switchmap 块内处理错误吗 或者在这种情况下我该如何处理错误 post3 endpoint string body string
  • Android 中的“-journal”SQLite 数据库是什么?

    在我的andoid应用程序的数据库目录 data data com me myApp databases 中 对于我创建的每个sqlite数据库 都有一个同名的相应数据库 名称后附加 journal 例如 myDatabase myData
  • 在 web.config 中设置多个 SMTP 设置?

    我正在构建一个应用程序 需要在发送电子邮件时动态 编程地了解并使用不同的 SMTP 设置 我习惯使用 system net mailSettings 方法 但据我了解 这种方法一次只允许一个 SMTP 连接定义 由 SmtpClient 使
  • 灵活或居中页面 HTML CSS

    我必须使用灵活或居中的页面设计 即使用户屏幕分辨率为 800 600 也能正常工作 当我缩小页面时 元素会移动并改变它们的位置 灵活页面或居中页面正常吗 如果不是应该怎样 页面的 CSS 代码 body margin left auto m
  • 以编程方式为 ViewController 创建选项卡栏

    我一直在考虑以编程方式向我的视图控制器添加一个选项卡栏 因为有一个滚动视图 如果它不在我的视图中间 我就无法将其放置在上面 我对如何添加它有点困惑 是否需要在我的ViewDidLoad方法或我的AppDelegate 如果我有 UITabB
  • 如何从包含为 jar 的不同项目模块 @Inject 对象

    我在多模块 Maven 项目中使用 Vaadin CDI 其中包含一个通用类 如接口 抽象类等 所需的模块 我的问题是 我无法 Inject带注释的类 UIScoped像往常一样 它被放置在core模块到另一个 我还在得到不满意解决异常 S
  • 所有可能的词

    我想使用 a z 创建所有可能的 5 个字母单词 请建议任何好的且快速的算法 我尝试过创建一个 它看起来像这样 byte allchar new byte a b c d e f g h i j k l m n o p q r s t u
  • 如何在 iPad 版 Safari 中使用 jQuery 识别触摸事件?是否可以?

    是否可以使用 jQuery 识别 iPad Safari 浏览器上的触摸事件 我在 Web 应用程序中使用了 mouseOver 和 mouseOut 事件 由于没有 mouseOut 和 mouseMove 等事件 iPad 的 Safa
  • Django 无法从 django.contrib.auth.views 导入登录信息

    我尝试为我的页面构建登录功能 要按如下方式编辑 urls py 它会不断打印 无法从 django contrib auth views 导入名称 login 我该如何处理这个问题 from django contrib auth view
  • C++:0.和0.0之间的区别?

    我很清楚之间的区别0 and 0 0 整数和双精度 但这之间有什么区别吗0 and 0 0 请注意 预先非常感谢 Axel 没有区别 两个文字都是双精度的 来自 C 语法 fractional constant digit sequence
  • 使用 JavaScript 动态伪元素 CSS

    是否可以动态设置伪元素的CSS 例如 jQuery 动态样式帮助容器 help css width windowWidth xOffset height windowHeight yOffset bottom windowHeight le
  • LINQ - 对特定类型的类进行分组

    这个问题类似于LINQ 将一种类型的项目分组 https stackoverflow com questions 2835192 linq group one type of item但以更通用的方式处理 我有一个包含各种派生类的列表 我可
  • 使用 Flask 为使用 create-react-app 创建的前端提供服务

    我有一个带有 API 路由的 Flask 后端 由使用 create react app 创建的 React 单页应用程序访问 当使用 create react app 开发服务器时 我的 Flask 后端可以工作 我想为构建的服务 使用n
  • 如何在正则表达式中处理 \^$.?*|+()[{ 等特殊字符?

    我想匹配一个正则表达式特殊字符 http www regular expressions info characters html 我试过 x lt a b grepl x Error invalid regular expression
  • 使用selenium解决验证码问题

    我下面的代码是不断解决不同的验证码 请纠正我的错误 因为我不知道是什么原因造成的 from selenium import webdriver from python3 anticaptcha import ImageToTextTask
  • 通过单击按钮动态地将文本框添加到表单中

    我是一名 php 程序员 我有一个用户输入表单 其中一个人应该能够通过单击按钮添加任意数量的文本框 以输入多个电子邮件 ID 例如 他单击按钮第一次添加了一个附加文本框 他第二次单击该按钮 添加了另一个文本框 等等 您可以通过以下方式创建元
  • Java正则表达式匹配带有撇号的单词

    我有一句话 不 没关系 滞后 我试图检测 无滞后 模式 我的正则表达式是no s w s 1 3 lag 这失败了 但是 如果我的句子是 no it all right lag 请注意 它的单词没有撇号 则匹配成功 谁能建议我如何忽略窗口中
  • 分割字符串并保留分隔符

    我正在编写一个 chrome 扩展 我需要拆分一个仅包含文本和 img 标签的字符串 以便数组的每个元素都是字母或 img 标签 例如 a b c
  • Android-如何在文本视图上显示文本选择?

    我正在实现一个 epub 阅读应用程序 其中使用 textview 来显示 epub 文本 我想当用户长按文本视图时从文本视图中选择文本 然后对文本视图的选定文本执行多种操作 例如突出显示等 那么 我如何向用户显示这些光标来选择用户想要的文