Intereting Posts
MediaPlayer setDataSource нуждается в рекомендации по лучшей практике Мое приложение течет. Растровые изображения случайных фигур, которые у меня нет в моей папке с рисунком NestedScrollView canScrollVertically возвращает false для контента определенного размера Webview загружает html из каталога ресурсов Объект AlarmManager после выключения и включения телефона Как подключить android к серверу базы данных MySql? Android – Как создать несколько экземпляров Activity? Обнаруживать, если в настоящее время прокрутка веб-страницы на Android Android-просмотр 3D-поворота на экранах с большим разрешением Альтернатива для glBlitFrameBuffer () в OpenGL ES 2.0 DataOutputSteam бросает мне «java.io.IOException: неожиданный конец потока»? Android NullPointerException в $ Proxy0.equals Строить переменные градиента, которые будут использоваться в коде, в зависимости от типа аромата и типа сборки Textview с длинным текстом выталкивает другие виды в GridLayout, несмотря на то, что ellipsize = end Android Studio не может связываться с локальным 8602 для отладчика

Найти точные координаты одного символа внутри TextView

В настоящее время я использую paintObject.measureText(textCopy.substring(0,i)) , итерации через копию текста TextView. Например, measureText("abc".substring(0,1)) даст мне относительные х-координаты 'b'. Координата y, которую я получаю от layout.getLineTop() . Это работает, но не точно для координат x для немоноширинговых шрифтов. Я могу немного откалибровать, но на каждом устройстве он работает по-разному.

Лучшее решение, о котором я могу думать, это перезаписать класс, который отвечает за рисование TextView на экране и, надеюсь, получить координаты каждого символа, нарисованного на экране.

Кто-нибудь знает, какой класс мне нужно переписать, чтобы выполнить это? Или, может быть, какое-то другое творческое решение?

Это похоже на ошибку Paint.measureText() или другого более глубокого класса. Но я НАКОНЕЦ нашел способ обойти это:

 layout.getPrimaryHorizontal(int offset) 

Это очень легко. Вы просто перебираете макет, используя длину текста, который он использует.

Он вернет x символа REGARDLESS позиции линии. Так строки, которые я все еще получаю от layout.getLineTop() . Кстати, если вы используете layout.getLineTop() , обратите внимание, что есть странное поведение, возможно, ошибка. Я отправил здесь отчет об ошибке.