- changed title to SGN5: Долгое нажатие на back должно приводить к появлению меню
SGN5: Долгое нажатие на back должно приводить к появлению меню
В Galaxy Note 5 и некоторых других смартах нет отдельной кнопки меню, вместо нее предлагают long press кнопки back. Текущая реализация перехватывает нажатие back в своих целях, ломая системе алгоритм анализа long press.
Патч проверен (вывод меню, работоспособность переключателя клавиатуры) на следующих конфигурациях:
- SGNote 5 | 5.1.1 | Меню вызывать долгим тапом на сенсоре "Назад".
- SGS4 | 5.0.1 | Меню вызывать сенсорной кнопкой "Опции".
- Lenovo Yoga 2/10 | 4.4.4 | Планшетная софтовая кнопка опций. Эмулятор работает, но некая дрожь по экрану, видимо есть вопросы при работе с процессором Интел.
- ONDA V919 4G | 4.4.4 | Планшетная софтовая кнопка опций.
- HTC Desire X | 4.1.1 | Меню вызывать долгим тапом на сенсоре "Программы".
- HighScreen Power 4 | 5.1 | Облом. Видимо, разработчики не озаботились. Придется таки адаптировать. Заметьте, в прошивке HighScreen Power 5 уже есть панелька для программной кнопки меню, но в этой модели (4) - нет. Впрочем, не факт, что она рабочая. Так, в SGN5 от аналогичной панели нет прока и после патча.
- Fly IQ320 | 4.1.1 | Планшетная софтовая кнопка опций.
Comments (48)
-
reporter -
reporter - edited description
-
repo owner Спасибо огромное!)
-
repo owner - changed status to resolved
Смысл в том, что обрабатывалось нажатие кнопки BACK для отображения клавиатуры/джойстика, а надо было обрабатывать отпускание, чтобы системы на некоторых девайсах по длительному зажатию отображали меню.
-
reporter Пожалуйста. ZX Rulez Forever ;-)
-
reporter Однако выявилась еще одна проблема, мешающая показу меню. Проявляется, только если программа запущена не под отладчиком (читай "всегда у пользователей Нотов"). Cистема теперь всегда пытается вывести меню, но иногда его не видно по причине выхода за пределы экрана (при замедленной анимации смены ориентации экрана его наличие за рамкой хорошо видно). Не совсем понятно, когда этот баг исправят. Но можно малой кровью перейти на рекомендованное API appcompat (у меня вроде получилось - см. патч 2, на эмуляторе древнего ведроида тоже работает).
-
reporter -
assigned issue to
- attached patch2.diff
-
assigned issue to
-
reporter - changed status to open
-
repo owner Накатил патч, собрал, запустил... И у меня вообще исчезла кнопка Menu))) И fullscreen теперь ненастоящий - сверху часы показываются.
Nexus 4 Android 5.1.1
-
reporter Моя вина. Нужно поставить в app/build.cradle targetSdkVersion 10 и в манифесте android:theme="@ style/AppFullScreenTheme" (без пробела), а в новом файле со стилями
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppFullScreenTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> </style> </resources>
-
repo owner Ага, если target sdk 10, кнопка меню появилась. А куда стили прописывать? в какой "новый файл со стилями" ? :)
-
reporter тут написано, как это делается: http://developer.android.com/intl/ru/guide/topics/ui/themes.html
-
repo owner Привет) Получилось что-то вроде такого:
Смущают пропавшие иконки на закладках при открытии файлов и увеличившийся размер приложения (с 1,7 Mb до 8 Mb).
-
repo owner Залил всё в ветку android_appcompat
-
reporter Да, appcompat полон сюрпризов и тоже требует хаков (в одном месте картинки уже возвращались хаком). Может быть, плюнуть на него и использовать в дополнение к OptionsMenu еще какой-нибудь метод вызова обычного PopupMenu c этими же пунктами?
-
repo owner А с этим AppCompat на всех твоих девайсах работает ОК? Я вот думаю, может его релизить отдельной версией в разделе downloads? Если у кого-то проблемы с обычной версией, вот качайте compat.
-
repo owner В общем, выложил в загрузки compat версию https://bitbucket.org/djdron/unrealspeccyp/downloads/unreal-speccy-portable_0.0.66.4_android_compat.apk
-
reporter AppCompat может быть и правильный путь, но какой-то ущербный. Работать - работает, но некрасивый, жирный и требует патчей под картинки. И ладно бы еще решал проблемы с девайсами типа HighScreen Power Four (где вовсе никакой кнопки меню нет).
Тем временем мне удалось локализовать дефект, связанный с пропаданием меню опций в выложенном в Google Play варианте программы. Оно пропадает немного не в тех условиях, о которых было написано выше (отключение отладчика). Самое интересное тут в том, что если поменять applicationId с "app.usp" на "app.usp1", то меню перестаёт убегать за пределы экрана. Т.е. стоковая нерутованная система 5.1.1 (или какое-то из приложений) на моем SGN5 как-то запомнила "app.usp" и пакостит ему.
Хорошо бы на другом ноте проверить (или на Edge 6+). Возможно, для нотов больше ничего сделать нельзя.
Остался еще сценарий для HighScreen Power Four и можно разрешать запрос.
-
repo owner Смотри, тут чел. пишет, что если перезагрузить девайс, меню работает, но после переключения на другие приложения и возврата обратно, опять начинает глючить.
https://bitbucket.org/djdron/unrealspeccyp/issues/12/unreal-speccy-cannot-open-menu-it-closes
-
reporter Ага, вот и S6. Видимо, надо таки второй хак на картинки там сообразить (сам справишься, там что-то надо наверное так же через рефлексию дернуть, как сделано в самом меню?). К слову, мне перезагрузка не помогает - только adb, переустановивший программу (помогает ненадолго) или смена ее идентификатора (надолго или навсегда). Все 4 костыля (reboot, adb, appcompat, app.usp1) никуда не годятся, надо нормальное решение найти (в котором и бескнопочные будут учтены).
Еще намек в копилку этого бага: если программа закрывается по команде из меню (ф-я finish), а не системой и без участия Process.killProcess, то меню выживает. Т.е. при досрочном завершении программы либо сама программа портит какие-то данные (но не свои, удаление данных и кеша не спасает), либо это делает система. В винде в точности такое поведение дают динамически применяемые заплатки совместимости (shims). Винда следит за старым приложением и если оно (ошибка разработчика этого приложения) ведет себя определенным образом (например, access violation в куче), запоминает его и даёт ему потом "менее капризную" кучу. Ошибка в самом shims (такое бывает крайне редко, у мелкомягких в программисты берут только PhD) дает весьма причудливые побочные эффекты.
-
repo owner Ого, какие ужасные вещи творятся в этих современных операционных системах)
Я вот думаю - а что, если в версии compat перейти на уровень API от Android 4 или 5 и прикрутить там новомодный тулбар с этими всеми менюшными кнопками? Ведь глюки вылазят только на последних андроидах? Чтобы не переписывать весь код, а только заменить меню.
-
reporter После этого называть версию как compat и держать ее не в маркете будет некорректно. Может быть, удастся использовать http://developer.android.com/google/play/publishing/multiple-apks.html ?
Если для 4.4+ ведроида сделать иммерсивный http://developer.android.com/intl/ru/training/system-ui/immersive.html apk, а для более старых устанавливать текущий, то имхо будет то, что надо.
-
repo owner -
reporter То ли shim продолжает пакостить, то ли еще что, но меню все равно появляется не так (первые две опции перекрыты, в них никак не попасть и текст налезает на икону):
Кроме того, непонятно, как вывести на экран все это великолепие, если нет кнопки меню (свайп сверху не работает).
-
repo owner Это на каком девайсе? Кнопки, которые вынеслись на ActionBar не нажимаются? У меня работает свайп и сверху и снизу (сбоку в ландшафте). А можешь кинуть скрин без открытого меню?
-
repo owner В общем, почитал я про этот multiple apk's и решил сделать 1 apk. См. последний коммит)) https://bitbucket.org/djdron/unrealspeccyp/commits/fff58d64e50016d985b6ef52a6ae1e6494111a20
-
repo owner Собрал версию, совместимую со всеми андроидами (2.1-6.0) https://bitbucket.org/djdron/unrealspeccyp/downloads/unreal-speccy-portable_0.0.66.6_android_test.apk
-
reporter Последний вариант ведет себя аналогично. Скрин до нажатия на меню такой же, как и обычно был full. При нажатии на меню (SGN5) выезжает сразу синяя полоса и меню выпадает, как на скрине (пункты меню работают). Уезжают тоже совместно (а в скрытые не попасть). Свайпы не работают ни на SGN5, ни на HSP4.
-
repo owner Я вот не понимаю - ладно там совместимость со 2м андроидом хромает. Но не сделать совместимость с 4.4 immersive. А как работают другие приложения immersive?
-
reporter Их (кто реагирует на меню) довольно мало. Они работают очень просто: 1. Никаких хаков по поводу иконок в меню. Меню без иконок. Отображается зачастую там же (т.е. перекрывает тулбар) 2. Если нужен сам тулбар, то есть некий способ вызова его (скажем, коротким тапом по полному экрану). Это единственный метод, который подойдет для HSP4.
-
repo owner 1) Та этот хак никак не влияет на работоспособность, просто иконки включает.
Ок, убрал кнопки из ToolBar, теперь всё будет в меню как раньше.
2) А как работают immersive приложения на HSP4 и SGN5/6, если свайпы не работают???? Сомневаюсь, что программисты пишут код, который по короткому тапу например в игре выключает полноэкранный режим и активирует тулбары.
Попробуй после запуска программы и перехода в immersive заблокировать-разблокировать экран. Там должны сверху подсказки рисоваться, типа "для выхода из полноэкранного режима используйте свайпы".
Вот запусти например эмулятор speccy. Он там тоже использует immersive. https://play.google.com/store/apps/details?id=com.fms.speccy Может там проблемы каким-то магическим образом решены?
-
repo owner Начал тут смотреть, что можно сделать с TabActivity, и наткнулся на это:
А вот дизайн новейшего приложения Google+:
-
repo owner Починил иконки на табах, там проблема со стилями была.
-
repo owner -
reporter Табы теперь в порядке, меню доступно целиком. Осталось с налезанием текста на икону в меню разобраться и беснопочному сделать сценарий вызова меню. Speccy в меню иконки тоже не рисует. А свайпы там работают, и само меню не закрывает тулбар.
-
repo owner И какие есть идеи, почему там работают свайпы и меню не закрывает тулбар? Может, опять со стилями что-то не то?
-
reporter Вероятность стилей не исключена. Или же баг по поводу высокого разрешения нота. По свайпу наверное виновато наличие собственного перехвата нажатий на экран (или же для смартфонов следует самим нужный свайп ловить - подсказки-то насчет него нет). Подсмотреть надо у "коллег".
-
repo owner Ну и кто из нас хакер? :)
-
repo owner Я тут немного стили поправил, и заметил, что например, тень от ActionBar и меню отбрасывается только если стоит Target SDK 14 и выше. Вот попробуй еще 2 версии на предмет работоспособности свайпов:
Это с Target SDK 10: https://bitbucket.org/djdron/unrealspeccyp/downloads/unreal-speccy-portable_0.0.66.6_android_test3.apk
А это с 19: https://bitbucket.org/djdron/unrealspeccyp/downloads/unreal-speccy-portable_0.0.66.6_android_test4.apk
-
reporter test3 и test4 на ноте5 ведут себя одинаково - свайп работает, кнопка меню работает, все команды достижимы. В выпадающем меню нет картинок, и не надо. HSP4 тоже ими доволен. Но как сделать, чтобы юзеры догадались про свайп, непонятно - подсказок про иммерсивный режим у обоих нет.
-
repo owner А как они (test3 и test4) ведут себя на андроидах ниже 4.4 ?
Я хочу разобраться, как влияет Target API level.
На счёт догадаться про свайп - так это же все полноэкранные immersive приложения так делают. Там даже когда первый раз в этот режим входишь, показываются подсказки.
-
reporter Подсказки только на планшетах (4.4+), на телефонах подсказок нет. На Fly IQ320 (4.1.1) test3 работает как прежний (т.е. с красивым меню по 3 точкам в софтпанели кнопок), никаких свайпов и прочей фигни не надо. А test4 не свайпится, но и трех точек нет. Голосую за test3, один только нюанс остался (в новых андроидах, не 4.1.1) - как меню сделать под тулбаром, чтобы не перекрывало тулбар.
-
repo owner А мне вот чем не нравится test3:
А вот test4:
отличие - только targetSdkVersion 10/19
-
reporter Тень - это красиво, но как тогда в 4.1.1 добираться до меню? Свайпы не работают, аппаратных кнопок нет - остается только программная кнопка снизу. По поводу перекрытия бара менюшкой - см. http://stackoverflow.com/questions/29445584/how-i-can-place-overflow-menu-below-toolbar-instead-of-overflow-menu-to-overlaps
-
repo owner Возможно, всё-таки придётся релизить multiple apks.
А чем тебе это меню, перекрывающее action bar не угодило?) это так и задумано, посмотри http://www.google.com/design/spec/layout/structure.html#structure-app-bar
-
reporter У них в примере меню не перекрывает другие кнопки, а у нас перекрывает. Если меню открыто кнопкой, то доступна лишь половина команд. Отдельно сделанный свайп снижает фатальность этого момента, но не намного.
-
repo owner Потому что там меню выпало от фильтров, а не от меню :) а вообще я так понял оно в 4.4 (Holo) было ниже, а в 5.0+ (Material) начало налазить.
-
repo owner - changed status to resolved
Ушло в маркет
- Log in to comment