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

如何获取被点击的TextSpan的坐标?

在Flutter中,如果你想要获取被点击的TextSpan的坐标,你可以使用GestureDetector来包裹你的Text组件,并且使用TextPainter来计算文本的位置。以下是一个示例代码,展示了如何实现这一功能:

代码语言:txt
复制
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('TextSpan Click Position')),
        body: Center(child: TextWithPosition()),
      ),
    );
  }
}

class TextWithPosition extends StatefulWidget {
  @override
  _TextWithPositionState createState() => _TextWithPositionState();
}

class _TextWithPositionState extends State<TextWithPosition> {
  String text = "Click me!";
  Offset? tapPosition;

  void _handleTapDown(TapDownDetails details) {
    final RenderBox referenceBox = context.findRenderObject() as RenderBox;
    setState(() {
      tapPosition = referenceBox.globalToLocal(details.globalPosition);
    });
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTapDown: _handleTapDown,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text.rich(
            TextSpan(
              text: text,
              style: TextStyle(fontSize: 24),
              recognizer: TapGestureRecognizer()..onTap = () {},
            ),
          ),
          if (tapPosition != null)
            Text('Tap position: (${tapPosition!.dx}, ${tapPosition!.dy})'),
        ],
      ),
    );
  }
}

在这个例子中,我们创建了一个TextWithPosition小部件,它使用GestureDetector来监听点击事件。当用户点击文本时,_handleTapDown方法会被调用,并且使用TapDownDetails中的globalPosition来计算相对于Text组件的本地坐标。

这种方法不需要直接获取TextSpan的坐标,因为Flutter的渲染机制并不直接提供这样的功能。相反,我们通过监听整个Text组件的点击事件,并计算点击位置相对于组件的本地坐标来间接获取所需的信息。

这种方法的优点是简单且通用,适用于任何需要获取点击位置的场景。然而,它可能不会给出精确到单个字符或TextSpan内部的坐标,如果你需要更精细的位置信息,可能需要更复杂的逻辑来计算每个TextSpan的确切位置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

RecyclerView中获取点击位置的接口被废弃了?

holder.adapterPosition被划线不推荐使用了? 《第三行代码》这才刚刚出版,竟然就有API被弃用了,我决定对这个问题好好研究一下,并加急写一篇文章进行分析。...仔细一看,holder.adapterPosition这不就是我们平时在RecyclerView里面用于获取点击位置的方法么,常用写法如下: holder.itemView.setOnClickListener...如果这时,我想要监听BodyAdapter中元素的点击事件,那么调用getAdapterPosition()方法,获得的到底是BodyAdapter中元素的点击位置,还是合并之后元素的点击位置呢?...很明显,我们获取到的点击位置是元素位于BodyAdapter中的位置。...结果一目了解,获取到的点击位置是元素位于合并后Adapter中的位置。

4.5K43

如何在 React 中获取点击元素的 ID?

本文将详细介绍如何在 React 中获取点击元素的 ID,并提供示例代码帮助你理解和应用这个功能。使用事件处理函数在 React 中,我们可以使用事件处理函数来获取点击元素的信息。...示例代码下面是一个示例代码,演示了如何使用事件处理函数来获取点击元素的 ID:import React from 'react';const ClickElement = () => { const...注意事项需要注意以下几点:在示例代码中,我们将事件处理函数直接绑定到按钮的 onClick 属性上。当按钮被点击时,会触发相应的事件处理函数。...示例代码以下是一个示例代码,演示了如何使用 ref 来获取点击元素的 ID:import React, { useRef } from 'react';const ClickElement = () =...通过事件处理函数,我们可以通过事件对象获取到点击元素的 ID,而使用 ref 则可以直接引用元素并访问其属性。根据你的项目需求和个人喜好,选择适合的方法来获取点击元素的 ID。

3.5K30
  • VC如何获取对话框中控件的坐标

    VC如何获取对话框中控件的坐标 GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。...GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,它的top和left都为0,right和botton是宽和高,因为这个矩阵是在客户区坐标系下...ClientToScreen把客户区坐标系下的RECT坐标转换为屏幕坐标系下的RECT坐标. ScreenToClient把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标.     ...然后GetClientRect取得一个RECT,再用ClientToScreen转换到屏幕坐标系。显然,GetWindowRect取得的矩阵不小于GetClientRect取得的矩阵。...引自:http://blog.chinaunix.net/u/25372/showart_304363.html 所以要获得一个控件再对话框中的坐标的实现代码是: CRect lpRec; GetDlgItem

    2.5K90

    【100个 Unity实用技能】| 游戏中获取鼠标点击的坐标,并将游戏对象移动到鼠标的点击位置

    Unity 实用小技能学习 游戏中获取鼠标点击的坐标,并将游戏对象移动到鼠标的点击位置 作用:在游戏中实现鼠标点击的时候,获取到鼠标点的的这个坐标,并将某个游戏对象移动到这个坐标上。...;//获取到点击屏幕的屏幕坐标 Vector3 mousePositionInWorld;//将点击屏幕的屏幕坐标转换为世界坐标 private void LateUpdate()...Input.GetMouseButton(0)) { MouseFollow(); } } /// /// 获取鼠标点击坐标的方法.../// public Vector3 MouseFollow() { //获取游戏对象在世界坐标中的位置,并转换为屏幕坐标;...screenPosition = Camera.main.WorldToScreenPoint(targetPos.transform.position); //获取鼠标在场景中坐标

    3.7K30

    JS 被点击就会移动的球

    水一篇之前帮同学写的试题 innerHTML 实现 第一反应是很久之前写过的,通过不停 innerHTML 以及随机数来达到变换位置的做法。...const body = document.getElementsByTagName('body')[0]; //获取 function randomP(){ //随机数函数     return...Math.round(Math.random() * (500 - 1)) + 1; } function spawn(){ //生成一个点击运行 spawn() 函数的按钮,同时将随机数代入样式获得坐标....style 实现 将思路调整为点击修改小球坐标就可以。(其实这样才是正常思路,我只是想顺便提一嘴之前重复 innerHTML 的玩法很逆天) 可以用 *.style....#ball{ position: absolute; transition: all .5s; } 后记 更完美的做法还得在随机数函数这块获取窗口大小,再根据窗口大小来生成随机数。

    14520

    win10 uwp 获取窗口的坐标和宽度高度 获取可视范围获取当前窗口的坐标和宽度高度获取最前窗口的范围

    本文告诉大家几个方法在 UWP 获取窗口的坐标和宽度高度 获取可视范围 获取窗口的可视大小 Windows.UI.ViewManagement.ApplicationView.GetForCurrentView...().VisibleBounds 获取当前窗口的坐标和宽度高度 Window.Current.Bounds 获取最前窗口的范围 通过 Win32 的 Api 获取最前的窗口的范围 IntPtr hWID...E5%8F%A3%E7%9A%84%E5%9D%90%E6%A0%87%E5%92%8C%E5%AE%BD%E5%BA%A6%E9%AB%98%E5%BA%A6.html ,以避免陈旧错误知识的误导...,同时有更好的阅读体验。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    3.8K30

    我的世界如何TP坐标_我的世界设置坐标

    /tp 玩家id 将该玩家传送到x,y,z这个坐标处,需要有作弊模式权限。 单机的tp指令有: /tp 玩家id (开启了作弊模式与朋友联机时可以使用,作用是传送到该玩家身边)。.../tp 玩家id (将该玩家传送到x,y,z这个坐标处,需要有作弊模式权限)。...在命令方块中输入: /tp @a 坐标 (将全部玩家传送到该坐标,@a表示全部玩家,@p表示最近的玩家,@r表示随机玩家) /tp @e[type=生物的ID,name=你给生物取的名字] 坐标 服务器的...《我的世界》是一款3D的第一人称沙盘游戏,所呈现的世界并不是华丽的画面与特效,而是注重在游戏性上面。...玩家在游戏中做着「建设」与「破坏」两件事,但是透过像乐高一样的积木来组合与拼凑,轻而易举的就能制作出小木屋、城堡甚至城市,但是若再加上玩家的想像力,空中之城、地底都市都一样能够实现。

    3.6K30

    跟iOS UI的捉迷藏(如何获取用户点击行为的控件title)

    近期,接到一个需求,需要获取用户点击行为的操作路径,除了点击的坐标,classname等常用数据外,还需要控件的title,这样就可以更加直观的了解到用户的操作行为。...1.如何获取用户控件的点击行为 事实上,由于获取的“所见所得”点击view行为,所以,思路上应该是对uiview或者及其子类得某个事件方法hook到,这样触发点击(广义上是触摸)行为后,可以根据发送的事件确定点击的...进行判断,并获取title了 触摸事件参考文章:https://www.cnblogs.com/syxchina/archive/2012/10/14/2723541.html 2.如何获取不同控件的title...先从简单的开始 一阶获取的控件:UIButton 响应的uiview是UIButton,即用户点击的是按钮,则立马获取(即一阶获取) NSString * title = [[button titleLabel...] text]; 下面加大难度,获取UITableView的cell内容 二阶获取的控件:UITableView的cell 通过上面的方法,当用户点击了红色字体的内容后,响应的view是UITableViewCellContentView

    1.4K10

    如何在 WordPress 中获取最新被评论的文章列表

    我之前的「WordPress 文章查询教程6:如何使用排序相关的参数」中详细介绍了文章查询的排序参数,其中介绍可以通过评论数进行排序: $query = new WP_Query( array(...'orderby' => 'comment_count' ) ); 但是需求总是不停的变化,现在又有了新需求,获取最新被评论的文章列表,意思就是某篇文章刚被评论,它就排到最前面,在某些社交需求的网站可能需要用到...但是使用 SQL 来实现可能就会造成 API 不一致的问题,无法直接使用 WP_Query 进行各种操作,所以最好是通过 posts_clauses 接口实现让 WP_Query 排序参数支持 comment_date...$order}"; } return $clauses; }, 10, 2); 上面的代码简单解释一下,就是通过 posts_clauses 接口实现文章表和评论表连表,然后通过评论时间进行排序获取最新被评论的文章列表...当然你也可以不需要了解和使用上面的代码,因为 WPJAM Basic 已经整合,你只需要知道最后可以通过下面简单的方式就能够获取最新被评论的文章列表: $query = new WP_Query( array

    1.5K30

    用jQuery实现元素被点击选中的效果

    一、说明页面中存在四个div元素,实现以下效果: 当鼠标放置在div元素上面的时候,元素呈现平滑放大效果;鼠标点击任意一个元素,元素变大,周围出现阴影,表现出被选中的效果二、代码实现提前导入jQuery...script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js">1.HTML代码用jQuery实现元素被点击选中的效果...*/.box>div:hover {/* 定义变化的效果,盒子的长和宽均变为原来的1.2倍 */transform: scale(1.2, 1.2);}/* 元素被选中时的效果 */.selected...let symbol = true;$(document).ready(function () { // 为box盒子添加点击事件 $(".box>div").click...(function () { if (symbol === true) { // 当symbol的值为true时,为点击的元素添加"selected"

    45710
    领券