我有一个带有EditText的对话框。 创建EditText时已经填充了它。 当用户将光标放在文本的某些部分上或附近时,将弹出Toast。
我的问题是侦听光标位置的变化。 另一则帖子问了同样的问题,被接受的解决方案是
You can override onSelectionChanged (int selStart, int selEnd) to get notified about selection changes. If the cursor is moved, this is called as well (in this case selStart == selEnd)
onSelectionChanged(int selStart,int selEnd)是TextView类的受保护方法。 如何覆盖它?
我已经在我的项目中成功完成了此操作,但是刚刚发现在某些移动电话上调用了onSelectionChanged(),而在另一些移动电话上则没有调用它。 两者> Android 4.0 ....
对于此应用程序,最好使面包长度短
只需继承或扩展类EditText并将以下代码添加到新创建的类中即可:
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
// Do ur task here.
}
不要忘记将构造函数添加到子类中。 :)
谢谢上师,做得很好。如果有人感兴趣,我会在原始问题上附加我所做的详细信息。
当我将其放入代码时,我得到一个android.view.InflateException: Binary XML file。知道我做错了什么吗?
如果您不能使用子类(例如,侦听SearchView中的光标更改位置,这是一个复杂的布局,其中嵌入了EditText),这将无法正常工作。
@TedHopp请查看以下答案:stackoverflow.com/a/36389070/170842
对于任何有@KamranAhmed问题的人:您是否实现了三个必需的构造函数?您的xml元素是否指向您项目中的正确包?
实际上,您可以监听选择更改,而无需将EditText子类化。它有点复杂,但仍可管理。为此,您需要在文本中添加SpanWatcher并处理选择范围的更改。
final SpanWatcher watcher = new SpanWatcher() {
@Override
public void onSpanAdded(final Spannable text, final Object what,
final int start, final int end) {
// Nothing here.
}
@Override
public void onSpanRemoved(final Spannable text, final Object what,
final int start, final int end) {