Пользователь Borni столкнулся с проблемой, при которой при нажатии клавиши Return в компоненте TMemo на устройствах под управлением Android возникает ошибка java.lang.IndexOutOfBoundsException. В контексте обсуждения выяснилось, что проблема касается использования фреймворка FMX и затрагивает только устройства Samsung.
Обсуждение проблемы:
Borni заметил проблему на устройствах Samsung с Android 14 и 12, а также на Galaxy Tab A с Android 7.1.1.
Havrlisan подтвердил воспроизведение исключения на Samsung A52s.
Проблема не связана с клавишей Return, а с позицией каретки. Ошибка возникает, когда каретка перемещается на пустую строку с уже существующим символом.
Предложенное решение:
Alejandro.sawers обнаружил, что изменение в методе InternalUpdateSelection в файле FMX.Platform.UI.Android.pas позволяет решить проблему. Он предложил заменить вызов FTextView.setSelection(JCharSequenceToStr(FTextView.getText).length) на FTextView.setSelection(SelStart).
Marlon Nardi предложил добавить нормализацию индексов выбора перед проверкой, чтобы избежать других исключений:
Полный исправленный метод InternalUpdateSelection выглядит следующим образом:
procedure TTextServiceAndroid.InternalUpdateSelection;
var
SelStart, SelEnd: Integer;
begin
if FTextView = nil then
Exit;
CalculateSelectionBounds(SelStart, SelEnd);
SelStart := Min(SelStart, JCharSequenceToStr(FTextView.getText).length);
SelEnd := Min(SelEnd, JCharSequenceToStr(FTextView.getText).length);
if SelEnd - SelStart > 0 then
FTextView.setSelection(SelStart, SelEnd)
else
FTextView.setSelection(SelStart);
end;
Заключение:
Используя предложенные изменения, разработчики могут устранить проблему IndexOutOfBoundsException при работе с TMemo в FMX на устройствах Samsung. Важно учитывать, что изменения могут потребовать дополнительной настройки для обеспечения корректной работы в различных сценариях использования.
При написании статьи были использованы примеры кода на Object Pascal, что соответствует основной тематике сайта, связанной с Delphi и Pascal.
Пользователь сталкивается с исключением `IndexOutOfBoundsException` при работе с компонентом `TMemo` в FMX на устройствах Samsung под управлением Android, и найдено решение в изменении метода `InternalUpdateSelection`.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.