Приложение Expo реагирует на события касания Android, не регистрируемые на Samsung, когда увеличение экрана установлено Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение Expo реагирует на события касания Android, не регистрируемые на Samsung, когда увеличение экрана установлено

Сообщение Anonymous »

Описание
События касания полностью не реагируют в производственных сборках на Samsung S23 Ultra под управлением Android 15, когда для параметра Специальные возможности увеличения экрана установлено значение 1x. Приложение отображается правильно, но сенсорные взаимодействия не регистрируются. Установка увеличения в 0x или 2x решает проблему.

Среда
Версия Expo SDK: 54.0.12
Платформы: Только Android (iOS не затрагивается)
Затронутые устройства:
  • ✅ Samsung S23 Ultra (Android 15 с One UI 7) – ЗАТРУДНЕНО при увеличении = 1x
  • ✅ Samsung S22 UltraНЕ ЗАТРУДНЕНО (работает при всех уровнях увеличения)
Зависимости:

Код: Выделить всё

{
"expo": "^54.0.12",
"react": "19.1.0",
"react-native": "0.81.4",
"react-native-gesture-handler": "~2.28.0",
"expo-router": "~6.0.8",
"@gorhom/bottom-sheet": "^5.2.6"
}
Конфигурация приложения:
  • Код: Выделить всё

    newArchEnabled: true
  • Использование GestureHandlerRootView со стилем = {{ flex: 1 }
  • Использование expo-router со стековой навигацией
Шаги для Воспроизведение
  • Сборка APK/AAB с помощью Expo SDK 54 в проекте с использованием expo-router и обработчика React-native-gesture
  • Установка на Samsung S23 Ultra под управлением Android 15
  • Перейдите в Настройки → Дисплей → Размер и стиль шрифта
  • Установите размер шрифта 1x (а не 0x или 2x).
  • Откройте приложение.
  • Попытайтесь взаимодействовать с любыми сенсорными элементами (кнопками, элементами ввода и т. д.)
Ожидаемое поведение: Касание события должны регистрироваться, а пользовательский интерфейс должен реагировать на взаимодействия.
Фактическое поведение: События касания полностью игнорируются. Пользовательский интерфейс отображается правильно, но неинтерактивен.

Обходной путь найден
Добавление компонента [View] высотой 1 пиксель перед основным контентом таинственным образом решает проблему:

Код: Выделить всё

 {/* This fixes touch events */}


{/* App screens */}


Это говорит о том, что проблема связана с расчетом макета или смещением цели касания при включенном увеличении.

Анализ и гипотеза
На основе наших наблюдений при тестировании качества:
  • Зависит от устройства: влияет только на Samsung S23 Ultra (Android 15), но не от S22 Ultra или других устройств.
  • Зависит от увеличения: Происходит только в том случае, если увеличение установлено точно в 1x
  • Связано с макетом: 1 пиксель Просмотр обходного решения предполагает, что Android неправильно рассчитывает области касания или применяет неправильное смещение при увеличении = 1x.
Гипотеза. Функция специальных возможностей увеличения в Android 15 при настройке 1x вводит смещение в 1 пиксель в координатах событий касания или вычислениях макета. Обходной путь View компенсирует это смещение, выравнивая цели касания с их визуальными позициями.

Дополнительный контекст
  • Эта проблема возникла после обновления с Expo SDK 52 → 54
  • У Samsung есть документированные проблемы с жестами увеличения, влияющими на чувствительность к прикосновениям в некоторых приложениях.
  • Связано с известными проблемами сенсорного управления React Native Android с вложенными представлениями с абсолютным позиционированием (facebook/react-native#27333), но я не думаю, что это так уж актуально на дату открытия этой проблемы.
  • Может быть связано с новыми специальными возможностями Android 15 или реализацией Samsung One UI 7.
Минимально воспроизводимый пример
При необходимости я могу предоставить минимальный репозиторий для воспроизведения. Для решения проблемы требуется:
  • Производственная сборка на Samsung S23 Ultra (Android 15 с One UI 7)
  • Увеличение экрана установлено на 1x
  • Приложение с использованием GestureHandlerRootView + expo-router
Вопросы
  • Известна ли это проблема с функцией доступности увеличения в Android 15?
  • Должна ли Expo по-другому обрабатывать вычисления смещения увеличения?
  • Есть ли подходящее решение, выходящее за рамки 1-пиксельного обходного пути?
  • Следует ли об этом сообщать вместо ядра React Native, команды Samsung из Expo?


Подробнее здесь: https://stackoverflow.com/questions/797 ... g-when-scr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»