1

我希望能够将非样式属性应用于 TextField 中的文本部分。例如,字符 30-45 将被设置为在某个方向上动画。

由于此字段是可编辑的字符,如果以任何方式编辑文本,30-45 可能不再是 30-45。

谁能想到一种优雅的方式来跟踪哪些角色应用了属性?

4

1 回答 1

3

我有一个类似的项目,最终扩展了 TextField 类以满足我的需要。以下是要做什么的简短描述-恐怕我的实际代码是机密的:

  1. 覆盖和的设置texthtmlText
  2. 将这些 setter 中的任何内容解析为自定义对象数组。这些对象中的每一个都包含原始文本块和适用于它们的元数据(格式、注释等)。

    例如,

    <span class="sometext" animation="true">Info</span> 
    

    将被翻译成这样的对象:

    { text:"Info", clazz="sometext", animation:true };
    
  3. appendText然后通过使用逐块添加原始文本并setTextFormat在每个附加步骤之后应用格式(或执行其他任何必要的操作)来呈现实际的文本输出。
  4. 添加事件侦听器以对 TEXT_INPUT 和/或 KEY_DOWN/KEY_UP 事件做出反应,以捕获任何新的用户输入。(您将一遍又一遍地替换 TextField 的整个文本内容,因此不能使用super.text.)
  5. 使用selectionBeginIndexand处理用户输入selectionEndIndex(计算对象数组的原始文本中的字符数以找出受影响的块)。直接在容器对象中添加或替换新文本,然后使用步骤 3. 刷新 TextField 中的整个文本。
  6. 我还添加了一种在呈现之前减少数组的方法(即将相邻的块与相同的元数据组合)。这使数组保持精简并有助于创建不具有复杂树结构的 XML 输出(对于这种场景,我们非常喜欢一维)。
  7. 如果您在其他地方需要结果,请覆盖 gettertext并返回新格式化的信息。htmlText我曾经htmlText返回一个完全修饰的 xml 字符串并保留text用于访问原始文本内容,就像在通用 TextField 中一样。
于 2012-01-20T19:21:36.170 回答