【问题标题】:Text selection listener in Android(API level 7)Android 中的文本选择监听器(API 级别 7)
【发布时间】:2012-04-17 09:14:28
【问题描述】:

我需要一个监听器,每次 EditText 中的选择发生变化时都会调用它。 我四处搜索,但找不到任何对 API 级别 7 有用的东西。 我正在编写一个文本编辑器,我希望每次用户选择粗体/斜体/下划线文本时都会选中粗体/斜体/下划线按钮。

【问题讨论】:

  • 根据 TextWatcher 的描述“将 TextWatcher 添加到每当此 TextView 的文本更改时调用其方法的列表中。”我需要的是一个侦听器,该侦听器通知何时更改文本的选择不是文字。 PS:我刚刚尝试了它,并且在选择改变时,没有调用TextWatcher的侦听器。 span>
  • 您是否扩展了 EditText 来制作您的编辑器?
  • 还没有。我希望这样的听众存在。我想我应该重写 EditText 的 setSelection 方法或类似的方法。
  • 有一个 onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) 方法,您可以在这种情况下重写。将检查我是否找到有关文本更改侦听器的更多信息。

标签: android text selection


【解决方案1】:

相当老的问题,但有人可能仍然需要这个,所以这是我的解决方案:由于文本选择是通过长按文本完成的,我只是使用了以下内容:

editText.setOnLongClickListener(new View.OnLongClickListener() {

@Override
public boolean onLongClick(View view) {
        // do whatever you need to do on text selection
    }
});

这允许对文本选择进行自定义行为,并且不会阻止用户复制/粘贴。

【讨论】:

  • 如果您仍然希望 EditText 执行其 longPress 处理程序并选择文本,请务必在此处返回 false,如果您返回 true,您将得到的只是执行的 onLongClick()。
【解决方案2】:

更好的方法是扩展 EditText,然后根据您希望如何管理不断变化的文本,您可以覆盖这两种方法之一来制定您的自定义行为。

  1. 如果您希望更改选择,则可以使用onSelectionChanged() 方法并在那里实现您的代码。

  2. 如果您想在编辑器中的文本更改时实现某些功能,则可以使用 onTextChanged()

【讨论】:

    猜你喜欢
    • 2012-04-13
    • 2015-05-12
    • 1970-01-01
    • 2013-04-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多