Как спрятать экранные кнопки на андроид 8. Сказ о трех кнопках

Когда мне в очередной раз достался смартфон с хардварными клавишами навигации, вообще без возможности их настройки или активации экранных клавиш в стиле Nexus, я решил, что с этим надо что-то делать. Покопавшись пару часов во внутренностях Android, я отключил надоедливую подсветку, поменял клавиши «Назад» и «Обзор» местами, а потом включил экранные кнопки и обрел покой.

Интро

Сразу оговорюсь: я большой поклонник идеи экранных клавиш навигации. Всех этих домиков, стрелочек и квадратиков, нарисованных прямо в нижней части экрана. Да, они отнимают какое-то там пространство (которое, впрочем, в большинстве случаев не особо и нужно), да, возможно они портят внешний вид приложений, но, черт возьми, они динамические.

Экранные кнопки навигации поворачиваются вместе с экраном, исчезают, когда они не нужны, меняют цвет и органично встраиваются в интерфейс домашнего экрана. Если отбросить саму идею бесполезности существования сразу трех кнопок (в конце концов, яблочники обходятся одной и не чувствуют себя обездоленными) и довольно-таки удобные системы навигации вроде PIE или «пузыря навигации MIUI», то экранные кнопки - это лучшее, что было придумано до сих пор.

Так вот. Почему-то мою замечательную, прекраснейшую идею о том, что лучше наэкранных кнопок нет ничего, не разделяют ну очень многие производители смартфонов. И даже не просто не разделяют, а не разделяют совершенно чудовищным способом, заставляя пользоваться смартфоном с сенсорными кнопками (ААА!), снабженными динамической подсветкой (ААА-2!) и кнопкой «Назад» с правой стороны экрана (ААА-3: решающий удар).

Ситуация неприемлемая до крайности, а учитывая, что добрый разработчик прошивки не предусмотрел никаких настроек для активации экранных клавиш и настроек для управления сенсорными кнопками, пришлось обойтись своими силами. Было два варианта дальнейших действий:

  • привести сенсорные кнопки к нужному состоянию, а именно отключить подсветку и перенести клавишу «Назад» на левую сторону (пусть она выглядит как «квадрат», так даже интересней);
  • отключить сенсорные кнопки полностью и активировать наэкранные кнопки.

Сторонние инструменты я не люблю, поэтому решение сделать все своими руками пришло само собой.

Способ номер один. Настраиваем сенсорные кнопки

Для начала попробуем отключить подсветку кнопок. Для этого нам нужен root, эмулятор терминала и каталог /sys в корне файловой системы. Именно такая комбинация. Мы имеем дело с ядром Linux, а в системах на его основе вся важная информация о железе, а также «тумблеры», им управляющие, обычно находятся в файловой системе sysfs, подключенной к каталогу /sys .

Собственно, sysfs - это даже не файловая система, точнее, она файловая, но оперирует так называемыми синтетическими файлами. А они не хранятся на диске, это своего рода интерфейс общения с драйверами: прочитал файл - получил данные о железке, записал - изменил какую-то настройку. А для записи как раз таки нужны права root.

Итак, получаем root, запускаем эмулятор терминала (а лучше ). И пишем следующее:

# su # cd /sys

# find -name \*button\* ./leds/button-backlight

Бинго! Это каталог /sys/class/leds/button-backlight . Переходим в него и смотрим, что внутри:

# cd /sys/class/leds/button-backlight # ls brightness device max_brightness power subsystem trigger uevent

Ставлю свой Nokia 3310 на то, что файл brightness - это текущая яркость кнопок, а max_brightness - максимальная. Проверим догадку, записав в первый файл значение 100 (ну типа 100%, хотя какая там шкала - неизвестно):

# echo 100 > brightness

Отлично, кнопки горят и даже не собираются тухнуть.

Момент истины - пишем в файл max_brightness значение 0:

# echo 0 > max_brightness

Кнопки погасли, навсегда, как и лампочка в моем подъезде вчера ночью.

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

# mkdir /sdcard/boot # echo "echo 0 > /sys/class/leds/button-backlight/max_brightness" > /sdcard/boot

А его, в свою очередь, поставим в автозагрузку с помощью . Запускаем приложение, выбираем первые три галочки, c помощью опции Select folder выбираем каталог boot на карте памяти.


Ползадачи выполнено, осталось поменять местами кнопки «Назад» и «Обзор». Для этого необходимо изменить раскладку кнопок. В Android она лежит в нескольких файлах каталога /system/usr/keylayout/ . Их довольно много, но если отбросить файлы типа Vendor_2378_Product_100a.kl и qwerty.kl (они хранят раскладки полноценных Qwerty-клавиатур, которые Android поддерживает из коробки), то останется от силы пять штук.

Один из них как раз нам и нужен. Часто смартфоны используют файл ft5x06_ts.kl , специфичный для контроллера тачскрина FT5x06 (кнопки же сенсорные, правильно?), но в моем случае им оказался файл Vendor_2378_Product_100a.kl .

Если открыть этот файл, можно увидеть три искомые строки:

Key 158 BACK VIRTUAL key 139 MENU VIRTUAL key 102 HOME VIRTUAL

Остается только поменять числа 158 и 139 местами (для этого подходит любой файловый менеджер с поддержкой прав root). После перезагрузки новая раскладка начнет действовать.

Способ номер два. Экранные клавиши

Здесь все еще проще. В Android существует специальная отладочная переменная qemu.hw.mainkeys , которая позволяет контролировать видимость наэкранных клавиш навигации. Если она имеет значение 0, клавиши будут показаны на экране, 1 - обратный эффект.

Записываем переменную с нужным значением в файл /system/build.prop , и на этом все:

# su # mount -o remount,rw /system # cp /system/build.prop /system/build.prop.bak # echo qemu.hw.mainkeys=0 > /system/build.prop

Выводы

Вот на такие преступные шаги иногда приходится идти, чтобы сделать смартфон чуточку удобнее. Что касается меня, то я остановился на третьем варианте: «выключил» кнопки плюс установил LMT Launcher . Как мне кажется, это наиболее удобный способ управления.

После того, как компания Xiaomi представила новую линейку смартфонов Xiaomi с соотношением экрана 18:9, новинки стали стремительно набирать популярность. Фишкой устройств стал большой экран, где для навигации, вместо привычных сенсорных кнопок, используются экранные. Эти кнопки можно убрать, чтобы они не занимали рабочее пространство. Подробная инструкция, которая объяснит, как отключить экранные кнопки на Xiaomi Redmi 5 и Redmi 5 Plus.

Обе модели достаточно похожи между собой. Сравнение Редми 5 и Редми 5 Плюс можно посмотреть в .

Как отключить экранные кнопки на Xiaomi Redmi 5

Подробное руководство, в котором разберется даже новичок. Все манипуляции с телефоном будут проходить через раздел «Настройки».

Под фразой «отключить экранные кнопки» понимается не полное отключение этой функции, так как это затруднит использование смартфона, а имеется ввиду возможность убрать их отображение с экрана.

Когда пользователь захочет использовать экранные кнопки навигации, ему достаточно будет «сделать свайп» нижней части экрана.

Шаг 1.

Заходим в настройки смартфона. Для этой выбираем иконку с соответствующим названием на рабочем столе, или отодвигаем шторку уведомлений и нажимаем на шестеренку в правом верхнем углу.

Шаг 2.

Листаем меню вниз и в категории «Система и устройство», выбираем пункт «Расширенные настройки».

Шаг 3.

Для того, чтобы отключить экранные кнопки на Xiaomi Redmi 5, меняем положение переключателя на значение «Скрыть».

В диалоговом окне пользователя предупреждают, что при скрытии экранных кнопок некоторые приложения могут работать неправильно. Поэтому в таком случае, просто придется включить их обратно. Смело нажимаем «Скрыть».

Теперь чтобы пользоваться экранными кнопками «Назад», «Меню», «Свернуть» и не нажимать на них случайно, нужно провести пальцем снизу вверх по экрану Редми 5 или Редми 5 Плюс.

Многим пользователям удобно вместо кнопок использовать сенсорный помощник, который позволяет использовать кнопки навигации, если это необходимо.

Как включить экранные кнопки на Xiaomi?

Если нужно вернуть наэкранные кнопки на Сяоми Редми обратно, то достаточно повторить все предыдущие действия и переключить ползунок в положение «Выключить». После чего кнопки навигации снова появятся на экране смартфона.

Дорогие читатели, если купив телефон из новой линейки Redmi, такое решение по началу может показаться вам не удобным. Так как все время хочется нажать на нижнюю часть смартфона, где раньше располагались привычные сенсорные кнопки. То это всего лишь дело практики. Экранные кнопки на Xiaomi действительно более удобные чем сенсорные. Остается только к ним привыкнуть.

Примечание: Инструкция актуальна для версии прошивки MIUI 9.2. После обновления MIUI 9.5 Stable (прошивка ) нужно заходить в пункт меню «Безграничный экран» и выбирать способ навигации «Полноэкранные жесты».

Все и всегда ломается неожиданно. Уронить телефон на кафельный пол - досадная случайность, утопить его в ванне - банальность, которая встречается чаще, чем кажется поначалу. Статистика обращений в сервисные центры содержит немало жалоб на случайности из серии «оно упало и разбилось» еще чаще, чем утопления. При этом не стоит ожидать, что первое же падение унесет с собой сенсорную подложку или даже сам экран - в большинстве случаев последствия досадных случайностей выглядят не столь разрушительно. Среди прочего, это внезапная неработоспособность физических кнопок «назад, домой и меню». Если эта неприятность случилась и с вашим телефоном, а денег на ремонт пока что нет - не беспокойтесь. Есть сравнительно простое решение этой распространенной проблемы. Сейчас мы научим вас, как включить наэкранные кнопки на смартфоне, если физические больше не работают.

Чтобы все получилось, необходимо получить Root права. Доступ администратора к недрам системных файлов иногда заполучить сложно. Но с появлением приложений, получающих необходимый доступ за вас, больше не нужно читать многостраничные инструкции. Просто установите программу Kingo Root на ваш компьютер и подключите телефон. Единственное, что нужно сделать, пока проходит установка программы - в настройках телефона, разделе «безопасность» разрешить «Отладку по USB». Вот и все. Нажав большую кнопку Root в интерфейсе Kingo Root , активируем права администратора.

Шаг второй выглядит немного сложнее. Вам потребуется скачать из Google Play (или чуточку…альтернативных источников) программу Root Explorer. Установите ее на ваш смартфон. Запустите это приложение, найдите каталог System, а в нем - build.prop. Если такого файла в системном каталоге не видно, не беда. В верхнем углу программы есть троеточие - тапните по нему, чтобы открыть подменю. В настройках программы отметьте пункт «Показывать скрытые файлы». Пропажа тут же обнаружится.

В левом углу Root Explorer находится еще один нужный нам пункт - r/w. Коснитесь его один раз и подтвердите свой выбор. Это действие активирует возможность редактировать системные файлы. Теперь коснитесь build.prop и удерживайте палец на нем. Верхнее меню изменится и из выпадающего списка (во все том же троеточии) вы найдете подпункт «открыть в текстовом редакторе».

Пролистайте открытый файл до самого низа - все эти длинные списки настроек пока не нужны. В самом низу добавьте строку qemu.hw.mainkeys=0. Сохраните файл и перезагрузите телефон.

Готово, в самом низу экрана появились три наэкранные кнопки - аналогичные тем, что вы можете увидеть на экране любого планшета. А после ремонта физических кнопок виртуальные вполне получится скрыть обратно, заменив строку qemu.hw.mainkeys=0 на qemu.hw.mainkeys=1 и снова перезагрузив аппарат.

Во- первых, пожалуйста, думать долго и трудно, если вы действительно хотите отключить Home кнопку или любую другую кнопку для этого вещества (например, Back кнопки), это не то, что должно быть сделано (по крайней мере, в большинстве случаев, это Плохой дизайн). Я могу говорить только для себя, но если я скачал приложение, которое не позволяет мне делать что-то вроде нажатия кнопки ОС, следующая вещь, которую я делаю, это удалить это приложение и оставить очень плохой обзор. Я также считаю, что ваше приложение не будет отображаться в App Store.

Теперь…

Обратите внимание, что MX Player запрашивает разрешение на использование поверх других приложений:
Поскольку вы не можете переопределить кнопку « Home на устройстве Android (по крайней мере, в последних версиях ОС). MX Player рисует себя поверх вашей пусковой установки, когда вы «блокируете» приложение и нажимаете кнопку « Home .
Чтобы увидеть пример, который является более простым и понятным, вы можете увидеть приложение Facebook Messenger .

Поскольку меня попросили предоставить дополнительную информацию о MX Player Status Bar и Navigation Bar «overriding», я редактирую свой ответ, чтобы включить эти темы.

Прежде всего, MX Player использует Immersive Full-Screen Mode (DevBytes Video) на KitKat .
Android 4.4 (API уровня 19) представляет новый флаг SYSTEM_UI_FLAG_IMMERSIVE для setSystemUiVisibility (), который позволяет вашему приложению по-настоящему «полноэкранный». Этот флаг в сочетании с флажками SYSTEM_UI_FLAG_HIDE_NAVIGATION и SYSTEM_UI_FLAG_FULLSCREEN скрывает навигационные и статусные полосы и позволяет вашему приложению захватывать все события касания на экране.

Когда включен режим полноэкранного полноэкранного режима, ваша активность продолжает получать все события касания. Пользователь может отображать системные бары с внутренним салфетком вдоль области, где обычно появляются панели системы. Это очищает флаг SYSTEM_UI_FLAG_HIDE_NAVIGATION (и флаг SYSTEM_UI_FLAG_FULLSCREEN , если применяется), поэтому панели системы становятся видимыми. Это также запускает ваш View.OnSystemUiVisibilityChangeListener , если он установлен. Однако, если вы хотите, чтобы системные бары автоматически спрятались снова через несколько секунд, вы можете вместо этого использовать флаг SYSTEM_UI_FLAG_IMMERSIVE_STICKY . Обратите внимание, что «липкая» версия флага не вызывает каких-либо прослушивателей, поскольку системные бары, временно показанные в этом режиме, находятся в переходном состоянии.

Второе: скрытие строки состояния
В-третьих: скрытие панели навигации
Обратите внимание, что хотя использование полноэкранного режима только для KitKat , скрытие строки Status Bar и Navigation Bar не только для KitKat .

Мне нечего сказать о 2-м и 3-м, у вас есть идея, которую я считаю, она быстро читается в любом случае. Просто убедитесь, что вы уделяете пристальное внимание View.OnSystemUiVisibilityChangeListener .

Я добавил Gist, который объясняет, что я имел в виду, он не является полным и требует некоторой фиксации, но вы получите эту идею. https://gist.github.com/Epsiloni/8303531

Удачи вам в этом, и получайте удовольствие!

Я последовал за ответом shaobin0604, и мне наконец удалось заблокировать кнопку HOME, добавив:

AndroidManifest.xml Все, что вам нужно сделать, это скопировать HomeKeyLocker.java из библиотеки shaobin"s в ваш проект и реализовать его, как в примере с шаобином. BTW: Моя версия Android AVD – Android 4.0.3 .

Вы можете использовать Android-HomeKey-Locker для отключения HOME KEY и других системных клавиш (таких как BACK KEY и MENU KEY)

Надеюсь, это поможет вам в вашем заявлении. Благодарю.

Вы можете отключить кнопку «home and recents» Android 5.0, используя упомянутую здесь функцию закрепления экрана:

Android 5.0 представляет новый API-интерфейс, который позволяет временно запретить пользователям покидать вашу задачу или прерваться уведомлениями. Это можно использовать, например, если вы разрабатываете приложение для образования, чтобы поддерживать высокие требования к оценке ставок на Android или одноцелевое приложение или приложение для киоска. Когда ваше приложение активирует привязку экрана, пользователи не могут видеть уведомления, доступ к другим приложениям или вернуться на главный экран, пока ваше приложение не выйдет из режима.

Вы можете заблокировать устройство до киоска. Панель навигации не скрыта, но кнопки home и recents можно удалить или отключить в зависимости от того, как вы активируете режим. Я написал некоторую информацию после тестирования этой функции здесь.

Просто догадаться, но я думаю, что с помощью разрешения SYSTEM_ALERT_WINDOW (отображается как «Нарисовать поверх других приложений», см. Здесь), это может быть возможно: отобразить ваше приложение как полноэкранное окно с системным предупреждением. Таким образом, он скроет любые другие приложения, даже на рабочем столе, поэтому, если вы нажмете Home, это не будет действительно отключено, просто без видимого эффекта.

У MX Player это разрешение объявлено, и Facebook Messenger имеет его для отображения « головок чата » во всем, поэтому это может быть решение.

Обновление (добавлено из моих комментариев): Затем используйте SYSTEM_UI_FLAG_HIDE_NAVIGATION в сочетании с захватом событий касания / использованием OnSystemUiVisibilityChangeListener для переопределения поведения по умолчанию (навигационная панель появляется при касании). Кроме того, так как вы сказали, что выходный иммерсивный жест не работает, вы можете попробовать также установить SYSTEM_UI_FLAG_IMMERSIVE_STICKY (с SYSTEM_UI_FLAG_FULLSCREEN и SYSTEM_UI_FLAG_HIDE_NAVIGATION).

Раньше можно было отключить кнопку «Домой», но теперь это не так. Это связано с вредоносным программным обеспечением, которое заманивает пользователя в ловушку.

Здесь вы можете увидеть больше деталей: кнопка «Отключить домой» в Android 4.0+

Наконец, кнопка «Назад» может быть отключена, как вы можете видеть в этом другом вопросе: Отключить кнопку «Назад» в android

Я тоже искал это на некоторое время и, наконец, смог сделать это по мере необходимости, т. Е. Панель навигации недоступна, строка состояния недоступна, даже если вы долго нажимаете кнопку питания, ни меню питания, ни кнопки навигации не отображаются. Благодаря @Assaf Gamliel, его ответ привел меня на правильный путь. Я последовал этому руководству с небольшими изменениями. При указании типа я указал WindowManager.LayoutParams.TYPE_SYSTEM_ERROR вместо WindowManager.LayoutParams.TYPE_PHONE , иначе наш «оверлей» не скроет системные бары. Вы можете играть с флагами, высотой, шириной и т. Д., Чтобы она вела себя так, как вы этого хотите.

Если вы нацелились на Android 5.0 и выше. Вы можете использовать:

Activity.startLockTask()

Я не знаю, как diable кнопку дома. До тех пор, пока я узнал, что получил следующую ссылку.

Постоянная ключевого кода: главный ключ. Этот ключ обрабатывается платформой и никогда не доставляется в приложения.

Но, мы можем diable кнопку назад. Надеюсь, что следующий код поможет вам.

@Override public void onBackPressed() { //return nothing return; }

Сначала создайте метод:

Public void hideNavigationBar() { final View decorView = this.getWindow().getDecorView(); final int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { YourActivityName.this.runOnUiThread(new Runnable() { @Override public void run() { decorView.setSystemUiVisibility(uiOptions); } }); } }; timer.scheduleAtFixedRate(task, 1, 2); }

Затем вы вызываете его по onCreate() вашей активности. Вызовите его снова по onResume() . Затем вы можете добавить еще один способ в своей деятельности:

@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); hideNavigationBar(); }

Это будет так. Помните, что он заблокирует экран, пока в следующий раз пользователь не коснется экрана, в классе Timer вы можете изменить задержку, и это позволит вам изменить вещи для этого экземпляра. Затем он снова заблокирует экран.

Вы не можете отключить кнопку Home от ICS onwords, но можете отключить другие кнопки следующим образом

@Override public boolean dispatchKeyEvent(KeyEvent keyEvent){ return true; }

Post ICS, т. Е. Android 4+, переопределение HomeButton было удалено по соображениям безопасности, чтобы позволить пользователю выйти в случае, если приложение окажется вредоносной программой.

Кроме того, не очень хорошая практика не позволять пользователю перемещаться от приложения. Но, поскольку вы создаете приложение блокировки экрана, то, что вы можете сделать, это объявить действие как Launcher, так что, когда нажата кнопка HomeButton, он просто перезапустит ваше приложение и останется там сам (пользователи не заметят ничего, кроме небольшого мерцания На экране).

Честно говоря, невозможно отключить домашнюю кнопку, по крайней мере, на новых уровнях api, начиная с 4.0. Это также не рекомендуется делать. Однако вы можете заблокировать кнопку «Назад», переопределив

Public void onBackPressed() { // do not call super onBackPressed. }

Чтобы переопределить кнопку «домой», вы можете использовать таймер, например, и после каждого раза проверять, является ли главный экран вашим экраном или нет, или ваш пакет находится сверху или нет, (я уверен, что вы получите ссылки на него), И отобразите свою активность, используя флаг single_top.

Таким образом, даже если нажата кнопка «домой», вы сможете перенести свое приложение вверх.

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

Счастливое кодирование.

PS: Невозможно перехватить исходное событие, когда нажата кнопка «Домой».

Вы можете использовать методы attach, а также методы keyguard, но не для уровней api начиная с 4.0 и выше.

Использование вращения вызывает исключение. Поэтому я исправил свою активность, используя это:

HomeKeyLocker locker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_splash); locker = new HomeKeyLocker(); locker.lock(this); } @Override protected void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); locker.unlock(); } @Override public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged(config); locker.lock(this); }

Вам нужно будет использовать предложение @ Lê Quang Duy.

Извините за ответ через 2-3 года. Но вы можете скрыть активность всех кнопок системы. Просто проверьте мои ответы Как отключить кнопку виртуального дома в любой деятельности? ,