У меня есть диалог с EditText в нем. EditText уже заполняется при его создании. Когда пользователь помещает курсор на определенные части текста или рядом с ними, появляется всплывающая подсказка.
Моя проблема заключается в прослушивании изменений положения курсора. Другой пост задает тот же вопрос, и принятое решение было
Вы можете переопределить onSelectionChanged (int selStart, int selEnd), чтобы получать уведомления об изменениях выбора. Если курсор перемещается, это также вызывается (в данном случае selStart == selEnd)
onSelectionChanged (int selStart, int selEnd) - это защищенный метод класса TextView. Как переопределить это?
Решение, которое работало для меня ...
Привет Гуру, спасибо за ваш ответ, это сработало.
Вот что я сделал подробно, если кому-то еще интересно ...
Шаг первый: создайте подкласс
package com.example;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.EditText;
import android.widget.Toast;
public class EditTextCursorWatcher extends EditText {
public EditTextCursorWatcher(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
public EditTextCursorWatcher(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EditTextCursorWatcher(Context context) {
super(context);
}
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
Toast.makeText(getContext(), "selStart is " + selStart + "selEnd is " + selEnd, Toast.LENGTH_LONG).show();
}
}
Шаг второй: относится к классу в файле макета (например, main.xml (хотя мой был пользовательским макетом диалога)). Не забудьте использовать полное имя пакета (в данном случае com.example.EditTextCursorWatcher, например,
<com.example.EditTextCursorWatcher
android:id="@+id/etEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:minLines="5"
android:inputType="textMultiLine"/>