2017-01-01 9 views
1

При запуске демонстрационного приложения Exoplayer, по умолчанию элемент управления ui имеет SeekBar focusable, установленный как false. Я думаю, что это не очень хорошо для доступности, поэтому в моем пользовательском интерфейсе я изменил фокус на true.Экран поиска не работает с помощью клавиш со стрелками

Однако при использовании стрелок прогресс не изменяется. SeekBar обновляется, но возвращается в исходное положение после его обновления.

Я также создал еще один SeekBar для тестирования, и с помощью клавиш со стрелками работает нормально.

Есть ли причина, по которой разработчики Exoplayer устанавливают ее на false или есть способ ее исправить?

+0

Exoplayer является открытым исходным кодом, так что вы могли бы пойти посмотреть на код, зафиксировать его внутри и внести свой вклад обратно – Blundell

+0

Да, изменил его, но он не будет реагировать на изменения с помощью клавиш со стрелками. – AMD

+0

@AMD проверяет, изменился ли SeekBar из события касания или какого-либо другого события - будет обновлен мой ответ. – ataulm

ответ

2

Вероятно, разработчики не рассматривали SeekBar как подходящий компонент для управления видео, используя не входящие в систему входные или специальные службы, такие как TalkBack.


Вы можете определенно реализовать что-то, что сработало с клавиатурой, по крайней мере, для настольных режимов. Например. YouTube.com позволяет пользователю искать назад/вперед с помощью клавиш со стрелками влево/вправо, даже если SeekBar не фокусируется.

SeekBar может быть сфокусирован тоже с помощью клавиши табуляции, а на Android, клавиши управления курсором являются законными Предоставляемостями для перемещения между форматируемыми компонентами тоже, так что это сложнее реализовать тот же UX.


С другой стороны, у вас есть другие соображения доступности с помощью средства управления SeekBar. Ключевой частью элемента управления является возможность перетаскивания - с TalkBack вам нужно перетащить два пальца. Так как SeekBar - это небольшой контроль, все равно трудно перетащить playhead двумя пальцами, и еще сложнее, если вы не можете см. playhead.


Почему это не отреагировало, когда вы сделали FocusBar фокусируемым и обновили ход с клавиатуры? Это checks for user touch input, прежде чем рассматривать его как законный поиск (я думаю, есть несколько причин для этого, в том числе и не постоянно ищет, когда пользователь тащит или так программные обновления SeekBar не запускают дальнейшие поиски).


Порекомендуйте, что вы создаете свой собственный пользовательский интерфейс с помощью ExoPlayer для обработки только носителя. Таким образом, у вас будет явный контроль над UX и пользовательским интерфейсом для вашего плеера.

В приложении YouTube, например, отображается другой пользовательский интерфейс, если TalkBack включен (есть libraries which can aid with this), накладывая кнопки прокрутки назад/вперед на экран.


Ссылка Исходный код:

+1

Отлично, так как Exoplayer уже пропустил вперед и назад, это было бы легко. Поэтому в этом случае я узнаю, как определить, включена ли доступность. Если он включен или устройство не поддерживает сенсорный экран, я нарисую две дополнительные кнопки на экране. – AMD

+0

звучит как план - у Novoda есть библиотека, чтобы облегчить эту проверку, см. Мой обновленный ответ. Он еще не включил проверку того, использует ли пользователь устройство без касания, но '! AnyView.isInTouchMode()' достигнет этого для вас. – ataulm