Open settings menu android

Open settings menu android

Android поддерживает несколько типов меню. Первый — на телефоне есть отдельная кнопка Menu (в старых телефонах), нажатие которой вызывает меню. В новых устройствах отдельную кнопку убрали, заменив на значок меню в виде трёх точек в вертикальной ориентации. Второй тип — контекстное меню, которое появляется при нажатии и удерживания пальца на экране в нужном месте (также можно нажать и удерживать центральную кнопку на телефоне). Контекстное меню в свою очередь может иметь подменю. Сегодня мы познакомимся с первым типом меню. В данной статье будет рассматриваться работа с меню на новых устройствах под управлением Android 4.0 и выше.

В шаблоне Empty Activity нет меню, поэтому мы создадим его сами. Это поможет вам понять принцип работы и получить общее представление о проекте. Запоминать названия классов, методов и код для обработки выбора пунктов меню необязательно. В других шаблонах меню будет встроено и вы можете сразу использовать его.

Создайте новый проект на основе Empty Activity и запустите его. Никакого меню пока нет.

Создадим несколько строковых ресурсов в файле res/values/strings.xml, которые будут отвечать за пункты меню:

Теперь создайте новую папку menu в папке res (правый щелчок мыши на папке res, | New | Directory). Далее создайте в созданной папке файл menu_main.xml — имя указывает, что меню относится к основной активности MainActivity (правый щелчок мыши на папке menu | New | Menu Resource File). Если вы будете создавать приложение с несколькими экранами, то у каждой активности будет отдельное меню со своими настройками. Пока откроем файл menu_main.xml и добавим в полученный шаблон свой код:

Откроем файл MainActivity. Сейчас в нём только один метод onCreate(). Добавим новый метод onCreateOptionsMenu(). Именно данный метод отвечает за появление меню у активности. Сразу после метода onCreate() начинайте вводить первые символы метода и дальше студия сама покажет список подходящих методов.

Найдите нужный метод и заготовка будет создана автоматически.

Добавляем в заготовку метод, который берёт данные из ресурсов меню и преобразует их в пункты меню на экране.

В методе inflate() вы указываете ресурс меню (R.menu.menu_main) и объект класса Menu.

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

Как не трудно догадаться, элемент item отвечает за отдельный пункт меню. Добавим ещё три пункта по такому же принципу, меняя только идентификатор и текст для меню:

Запустите проект и попробуйте снова вызвать меню. Вы увидите три новых пункта.

Параметры id и title не нуждаются в объяснениях. Параметр orderInCategory позволяет задать свой порядок вывода пунктов меню. Предположим вы создали пять пунктов меню, но пока не определились с порядком их вывода на экране. Чтобы не перемещать постоянно целые блоки кода для пунктов меню в нужном порядке, можно воспользоваться данным параметром.

И, наконец, важный атрибут app:showAsAction определяет поведение меню в ActionBar. Значение never означает, что элемент меню не должен выводиться в заголовке, а только в всплывающем меню, т.е. находиться за тремя точками. Если вы установите значение always, то пункт Settings сразу появится в заголовке вашего приложения. Также доступны значения ifRooms, withText и collapseActionView. Попробуйте самостоятельно. Например, ifRoom выводит пункт меню, если позволяет место. Если пунктов будет много, то они будут только мешаться. Как правило, в таком варианте выводят очень короткое слово или значок для частых операций, чтобы избежать лишнего щелчка на три точки.

Читайте также:  Android чем занята внутренняя память

Обратите внимание на атрибут app:showAsAction, который относится к пространству имён xmlns:app=»http://schemas.android.com/apk/res-auto». Было время, когда такого пространства имён не существовало и в проектах использовался атрибут android:showAsAction из стандартного пространства имён. Если студия будет ругаться на ошибку, то отредактируйте код.

Пока пункты меню не выполняют полезной работы. Любое нажатие на пункт просто закрывает меню без видимых последствий. Мы ещё не написали код для обработки нажатий.

Выбор пунктов меню

Мы научились создавать меню. Но пока оно бесполезно, так как пункты меню никак не реагируют на наши нажатия. Для обработки нажатий пунктов меню служит другой метод onOptionsItemSelected(). Добавим метод по такому же принципу, как для предыдущего примера. Получим заготовку.

Параметр item отвечает за пункт меню. Вам следует получить идентификатор меню через метод getItemId() и указать для него код (в Kotlin вместо метода используется свойство itemId). Так как обычно меню состоит из нескольких пунктов, то удобно использовать конструкцию when. Для вывода информации воспользуемся текстовой меткой. Добавьте на экран активности компонент TextView. Можете использовать имеющийся TextView с надписью «Hello World!», только присвойте ему идентификатор.

Добавим код в заготовку для выбранного пункта меню:

Запустите приложение, вызовите меню и выберите любой пункт меню. В текстовом поле должно появиться сообщение.

Переключатели

Внешний вид пунктов меню можно изменить на вид с переключателями. Для этого нужно добавить элемент group с атрибутом android:checkableBehavior=»single»:

Большого смысла в этом режиме я не вижу. И рассматривать его не будем.

Режим Design

В Android Studio 2.2 добавили графический режим построения меню, которых похож на панель инструментов для добавления новых компонентов на экран. У меню панель состоит из четырёх элементов: Menu Item, Search Item, Menu, Group.

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

Итак, вы получили базовые навыки работы с меню, достаточных для большинства случаев. Если хотите узнать больше, то почитайте дополнительную информацию о меню в разделе Теория.

Пример на Java

Код на Java не сильно отличается. Создание элементов меню на XML остаётся без изменений. Осталось только написать кода в классе активности.

Выберите в студии меню Code | Override Methods. и в следующим окне начинайте вводить название метода по первым буквам. Можно вводить по первым заглавным буквам, т.е. ocom (onCreateOptionsMenu), чтобы быстро найти нужную строку. Нажимаем кнопку OK и получаем заготовку.

Добавляем в заготовку метод, который берёт данные из ресурсов меню и преобразует их в пункты меню на экране.

Добавим код в заготовку для выбранного пункта меню:

Запустите приложение, вызовите меню и выберите любой пункт меню. В текстовом поле должно появиться сообщение.

Читайте также:  Раздача трафика с андроид

Существует альтернативный способ через XML, похожий на обработку щелчков кнопки (начиная с Android 3.0). Вы можете добавить атрибут android:onClick в ресурсах меню, и вам не нужно использовать вызов метода onOptionsItemSelected(). При помощи android:onClick вы можете указать нужный метод при выборе пункта меню. Добавьте данный атрибут к пункту Settings

Теперь в коде активности напишем следующее:

Источник

How to open Android Settings programmatically with Java

Carlos Delgado

Learn how to open dinamically the settings of Android in your app easily

In case your app needs that your user make some changes in the Settings menu i.e to set a default app to open a specific type of files etc, you may like to make this task easier for your user by starting the Settings menu of Android dinamically from your app.

Show system settings

To display the Settings page programmatically, you can use the startActivityForResult method with an Intent object and a constant of the Settings, the following example should open the general settings menu of Android:

The usage of the ACTION_SETTINGS constant with startActivityForResult will show system settings. The Settings provider contains global system-level device preferences.

Access specific settings areas

The following list contains all the constants that provide access to different areas of the settings menu:

Note: not all the constants are available on every Android version. In case you need more information visit the official documentation here.

Constants of android.provider.Settings

Activity Action: Show settings for accessibility modules.

Activity Action: Show add account screen for creating a new account.

Activity Action: Show settings to allow entering/exiting airplane mode.

Activity Action: Show settings to allow configuration of APNs.

Activity Action: Show screen of details about a particular application.

Activity Action: Show settings to allow configuration of application development-related settings.

Activity Action: Show settings to allow configuration of application-related settings.

Activity Action: Show battery saver settings.

Activity Action: Show settings to allow configuration of Bluetooth.

Activity Action: Show settings for video captioning.

Activity Action: Show settings to allow configuration of cast endpoints.

Activity Action: Show settings for selection of 2G/3G.

Activity Action: Show settings to allow configuration of date and time.

Activity Action: Show general device information settings (serial number, software version, phone number, etc.).

Activity Action: Show settings to allow configuration of display.

Activity Action: Show Daydream settings.

Activity Action: Show settings to configure the hardware keyboard.

Activity Action: Show Home selection settings.

Activity Action: Show screen for controlling background data restrictions for a particular application.

Activity Action: Show screen for controlling which apps can ignore battery optimizations.

Activity Action: Show settings to configure input methods, in particular allowing the user to enable input methods.

Activity Action: Show settings to enable/disable input method subtypes.

Activity Action: Show settings for internal storage.

Activity Action: Show settings to allow configuration of locale.

Activity Action: Show settings to allow configuration of current location sources.

Activity Action: Show settings to manage all applications.

Activity Action: Show settings to manage installed applications.

Activity Action: Show Default apps settings.

Activity Action: Show screen for controlling which apps can draw on top of other apps.

Читайте также:  Работа с настройками android

Activity Action: Show screen for controlling which apps are allowed to write/modify system settings.

Activity Action: Show settings for memory card storage.

Activity Action: Show settings for selecting the network operator.

Activity Action: Show NFC Sharing settings.

Activity Action: Show NFC Tap & Pay settings

This shows UI that allows the user to configure Tap&Pay settings.

Activity Action: Show NFC settings.

Activity Action: Show Notification listener settings.

Activity Action: Show Do Not Disturb access settings.

Activity Action: Show the top level print settings.

Activity Action: Show settings to allow configuration of privacy options.

Activity Action: Show settings to allow configuration of quick launch shortcuts.

Activity Action: Ask the user to allow an app to ignore battery optimizations (that is, put them on the whitelist of apps shown by ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS ).

Activity Action: Show settings for global search.

Activity Action: Show settings to allow configuration of security and location privacy.

Activity Action: Show system settings.

Activity Action: Show the regulatory information screen for the device.

Activity Action: Show settings to allow configuration of sound and volume.

Activity Action: Show settings to allow configuration of sync settings.

Activity Action: Show settings to control access to usage information.

Activity Action: Show settings to manage the user input dictionary.

Activity Action: Modify Airplane mode settings using a voice command.

Activity Action: Modify Battery Saver mode setting using a voice command.

Activity Action: Modify do not disturb mode settings.

Activity Action: Show settings to configure input methods, in particular allowing the user to enable input methods.

Activity Action: Show settings to allow configuration of VPN.

Activity Action: Show VR listener settings.

Activity Action: Allows user to select current webview implementation.

Activity Action: Show settings to allow configuration of a static IP address for Wi-Fi.

Activity Action: Show settings to allow configuration of Wi-Fi.

Activity Action: Show settings to allow configuration of wireless controls such as Wi-Fi, Bluetooth and Mobile networks.

Activity Extra: Limit available options in launched activity based on the given account types.

Activity Extra: Enable or disable Airplane Mode.

Activity Extra: Limit available options in launched activity based on the given authority.

Activity Extra: Enable or disable Battery saver mode.

Activity Extra: Enable or disable Do Not Disturb mode.

Activity Extra: How many minutes to enable do not disturb mode for.

Activity Category: Show application settings related to usage access.

Metadata key: Reason for needing usage access.

For example, you can open directly the Language Settings of the device (to change language) executing:

With the introduction of new Android APIs, there will be more settings available areas with different constants, read the official documentation of android provider settings here.

Add the permissions if required

For some special areas of the Android Settings, you will need permissions. For example, to open the bluetooth settings you’ll need to add the following bluetooth permissions in your app manifest:

And then you’ll be able to open the bluetooth settings:

Otherwise you’ll get the following exception:

Источник

Оцените статью