用于文本选择的浮动工具栏 Jetpack Compose

2024-02-05

如何在 Jetpack Compose 中将选定文本的菜单自定义到 TextField?我的意思是这样的:

在官方文档或互联网上没有找到任何有关如何使用 Jetpack Compose 执行此操作的信息。


您可以提供定制TextToolbar in the LocalTextToolbar。在那里,在showMenu方法,你必须startActionMode就像您在旧版 Android 中所做的那样。CustomTextToolbar:

override fun showMenu(
    rect: Rect,

    onCopyRequested: (() -> Unit)?,
    onPasteRequested: (() -> Unit)?,
    onCutRequested: (() -> Unit)?,
    onSelectAllRequested: (() -> Unit)?

// Before 1.2.0 ActionCallback has to be defined like this:
// typealias ActionCallback = () -> Unit
//
//  onCopyRequested: ActionCallback?,
//  onPasteRequested: ActionCallback?,
//  onCutRequested: ActionCallback?,
//  onSelectAllRequested: ActionCallback?
) {
    println("showMenu")
    view.startActionMode(TextActionModeCallback())
}

class TextActionModeCallback(
) : ActionMode.Callback {
    override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
        println("onActionItemClicked $mode $item")
        return true
    }

    override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
        println("onActionItemClicked $mode $menu")
        return false
    }

    override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
        println("onActionItemClicked $mode $menu")
        return true
    }

    override fun onDestroyActionMode(mode: ActionMode?) {
        println("onActionItemClicked $mode")
    }
}

作为如何实现它的参考,请查看 compose 源代码:Android文本工具栏 https://github.com/androidx/androidx/blob/3167373c96f8ab86f2d102b0e520cf185cf52b46/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidTextToolbar.android.kt#L32 and 文本操作模式回调 https://github.com/androidx/androidx/blob/3167373c96f8ab86f2d102b0e520cf185cf52b46/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/actionmodecallback/TextActionModeCallback.android.kt#L30

然后你可以像这样使用它:

CompositionLocalProvider(
    LocalTextToolbar provides CustomTextToolbar(LocalView.current)
) {
    var text by remember { mutableStateOf("") }
    TextField(value = text, onValueChange = { text = it })
}

要使此操作适用于整个应用程序,您需要在可组合树的顶部执行此操作,例如在setContent.

附注我必须定义ActionCallback,因为它是内部的 compose。我相信这是一个错误,所以我创建了这个问题 https://issuetracker.google.com/issues/197950089。它是fixed https://developer.android.com/jetpack/androidx/releases/compose-ui#1.2.0-alpha05在撰写中1.2.0-alpha05.

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

用于文本选择的浮动工具栏 Jetpack Compose 的相关文章

  • 安卓定位不准确

    我正在尝试获取当前用户的位置 我试图重构我的代码以获得更好的结果 但我只是不断得到关于准确度的荒谬位置 它在 900 600 米之间 如何才能得到更好的结果 使其精度达到50m以内 这是我的代码 package com agam mapsl
  • 播放 SoundCloud 曲目

    我可以在 Android 应用程序中播放 SoundCloud 中的曲目吗 我正在尝试这段代码 但它不起作用 String res https api soundcloud com tracks 84973999 stream client
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 如何解决 Firebase AuthUi 中无法找到显式活动?

    使用 firebase UI 时 我无法找到显式活动类 com firebase ui auth KickoffActivity protected void onCreate Bundle savedInstanceState super
  • 如何在android中设置权限WRITE_SECURE_SETTINGS? [复制]

    这个问题在这里已经有答案了 我正在尝试启用 4 0 以上的辅助功能服务设置 但它显示异常 即 引起原因 java lang SecurityException 权限拒绝 写入安全设置需要 android permission WRITE S
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • glTexImage2D: 之前出错:( 0x506 内部 0x1908 格式 0x1908 类型 0x1401

    当使用 Android Studio 运行模拟器时 我在模拟器屏幕上看不到任何内容 一切都是黑色的 我得到以下事件日志 模拟器 glTexImage2D 出错了 0x506 内部 0x1908 格式 0x1908 类型 0x1401 我已经
  • 使用 gradlew assembleRelease 从 React Native 创建发布 apk 时出现错误

    我想发布 apk 但我收到错误 文件已存在 mkdir D mobile 它在 d 驱动器中生成名为 mobile 的文件 删除文件后 再次执行 gradlew assembleRelease 创建该文件并抛出错误 任务 app bundl
  • 如何在TableLayout中创建三列

    我正在开发一个使用的屏幕TableLayout 在这里我可以轻松创建两列 但我怎样才能创建三列呢 这里有一个例子
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Android 后台服务示例,具有交互式调用方法

    我不是 Android 方面的专家 我正在寻找一个 Android 应用程序的示例 该应用程序使用一个服务 其中有真正的功能方法 或者换句话说 一个服务可以用来做什么 我们什么时候需要它 超越简单的东西服务举例 我确信您渴望获得一些工作代码
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • 使用 JobScheduler API 进行位置更新

    下面是我使用 FireBaseJobDispatcher 启动作业的演示代码 public class MainActivity extends AppCompatActivity Override protected void onCre
  • 单元测试时 Android Studio 2.0 中测试状态终止且没有任何失败消息

    Issue 我昨天在 Ubuntu 上从 1 5 升级到了 Android Studio 2 0 当我在 Android Studio 2 0 中进行单元测试时 即使所有测试都已通过 它也会显示 终止测试 状态 有时它只显示部分测试通过 我
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈

随机推荐

  • Redux Toolkit 查询未获取数据

    I am trying to fetch data with RTK Query in next js project and everything were fine until I had to fetch some more data
  • C 预处理器可以执行简单的字符串操作吗?

    This is C宏观怪异问题 是否可以编写一个宏 以字符串常量 X 作为参数 并求值为相同长度的字符串 Y 使得 Y 的每个字符都是 X 对应字符的 常量 算术表达式 这是不可能的 对吧 不 C 预处理器将字符串文字视为单个标记 因此它无
  • 如何在 Outlook 2016 中查看电子邮件的 HTML 源代码 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想在outlook 2016中查看一封电子邮件的html源代码 它似乎与以前版本的outlook有所不同 我正在运行 Outlook 2
  • 我的应用程序屏幕出现在浏览器中

    我在 Android 上打开浏览器 opera 或 firefox 并在地址栏上写下我的深层链接 当我按浏览器上的 Go 按钮时 它会按预期将我重定向到 我的应用程序 但问题是我的应用程序出现在浏览器上 如图所示 我如何打开我的应用程序并随
  • 相对于光标滚动 Vim,自定义映射

    所以我读过 help scroll cursor真的很喜欢zz 这会将光标所在的行置于窗口中间 我正在寻求帮助来制作一个类似于以下内容的映射zz但将光标所在的行放在窗口高度的 20 或 25 30 等 处 Edit 感谢 ZyX 和 Dra
  • 计算机图形学编程中的翻页是什么意思?

    翻页是什么意思 为什么我们在图形编程中需要它 页面翻转是一种简单的硬件辅助技术 可实现无闪烁图形 已经使用了数十年 它需要硬件的支持 视频子系统必须至少有两个内存区域 页 可能是可见的 其中任何时候都只有一个可见 给定的时刻 视频子系统支持
  • 检查您是否已在 Game Center/GameKit 中解锁成就

    我已经被这个问题困扰了很长一段时间 我了解如何解锁游戏中心的成就 甚至让整个消息系统正常工作 但我不知道如何检查成就是否已解锁 显然这不起作用 GKAchievement achievement GKachievement alloc in
  • 如何在 React 中为嵌套形状提供默认属性?

    React 有没有办法为特定形状的嵌套数组提供默认属性 鉴于下面的示例 可以看到我的第一次尝试 但这并没有按预期工作 static propTypes heading PT string items PT arrayOf PT shape
  • 在 Ubuntu 上安装并启动 H2 数据库

    我想在 Ubuntu 12 10 上使用 H2 数据库 并访问该网站并获取了与平台无关的安装文件 安装说明非常字面意思 要安装软件 请运行安装程序或将其解压缩到您选择的目录 我不是 Linux 新手 所以我以前使用过许多常用的安装过程 但我
  • 如何在原生 Android 应用程序中渲染 epub 文件?

    我正在尝试制作一个 Android 应用程序 它将呈现 epub 文件并在 Android 布局中显示其内容 我做了一个类似的应用程序 使用 pdfRenderer 显示 pdf 它使用位图显示 pdf 页面 如何在 android 中使用
  • ImportError:PyCapsule_Import 无法导入模块“pyexpat”

    我正在使用 Jenkins 构建一个 python Flask 解决方案以部署到 Google App Engine 作为构建过程的一部分 我运行了一些集成测试 其中之一因以下错误而失败 ERROR Failure ImportError
  • 仅在 NavigationView 中为指定图标禁用色调

    I need to disable a tint color for some icons in NavigationView because their color define category type How can I do it
  • TypeScript 中的“EventTarget”上不存在属性“value”

    使用 React 的 TypeScript 中的以下代码输出以下错误 类型 EventTarget 上不存在属性 value import React Component from react class InputForm extends
  • Cordova 模拟 android 退出代码 1

    我有通过科尔多瓦成功构建的代码 但是 当我尝试模拟它时 我收到此错误 错误 cmd 命令失败 退出代码为 1 有想法该怎么解决这个吗 这是我尝试模拟代码的输出 https i stack imgur com 7LqiN png 我有同样的问
  • JanusGraph:从 EC2 访问 Amazon Managed Cassandra

    我正在尝试设置 JanusGraph 来访问 Amazon MCS 基础设施已经具备了允许访问的能力 但我在配置步骤中遇到了困难 这是我要设置的配置janusgraph cql properties storage backend cql
  • 如何解决 Android get-app-links 返回状态 1024?

    我无法获得在 Android 13 上工作的深层链接 我已经遵循了所有教程 但无法让应用程序在进入网站后简单启动 我在 android studio 终端中使用了命令 adb shell pm get app links com where
  • 在 mvc4 中使用 ajax post 处理大量数据时,系统抛出 System.ArgumentException 异常

    我正在执行 ajax post 以在 mvc4 中发布来自 javascript 的数据 但失败并出现以下异常 string exceeds the value set on the maxJsonLength property Param
  • 何时使用index.php而不是index.html

    我对 php 比较陌生 有一件非常基本的事情一直困扰着我 据我了解 php 用于使网站动态化 我还了解到 php 是可用于制作动态网站的众多服务器端脚本语言之一 但是 我不明白的是 我什么时候需要使用index php页面 举例来说 如果我
  • 解释 C# 中的后自增 [重复]

    这个问题在这里已经有答案了 我有一些代码 static void Main string args int j 0 for int i 0 i lt 10 i j j Console WriteLine j 为什么答案是0 这是因为 增量工
  • 用于文本选择的浮动工具栏 Jetpack Compose

    如何在 Jetpack Compose 中将选定文本的菜单自定义到 TextField 我的意思是这样的 在官方文档或互联网上没有找到任何有关如何使用 Jetpack Compose 执行此操作的信息 您可以提供定制TextToolbar