Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Як написати код для сторінки налаштування додатку Android

by
Difficulty:BeginnerLength:LongLanguages:

Ukrainian (українська мова) translation by Elen (you can also view the original English article)

Final product image
What You'll Be Creating

Команда Google, що займається матеріальним дизайном, дає чітке визначення, які налаштування що саме повинні робити в вашому додатку Android:

Налаштування додатку дозволяють користувачам вказати, як саме вони хотіли б, щоб поводився додаток.

В Google також зазначають, що користувачі повинні переходити до налаштувань або шляхом навігації, або за допомогою панелі інструментів, а сам пункт повинен називатися "Налаштування" (Settings).

Наявність опцій налаштувань в додатку надає користувачам певний контроль над функціональністю програми. Це приносить користувачам радість замість невдоволення, оскільки тепер вони можуть контролювати, як буде поводитись додаток.

Надавати доступ до налаштування додатку обов'язково потрібно. Це дасть вашим користувачам кращий ux, що приведе до вищого рівня переглядів на Google Play, а там і до більшої кількості завантажень додатка (що збільшує прибуток).

Скоріше за все, ви взаємодіяли з налаштуваннями вашого пристрою, наприклад, коли встановлювали рингтон за замовчуванням, або налаштовувати безпеку вашого додатку. Практично всі популярні додатки, які ви завантажували або будете завантажувати на Google Play включають екран налаштування, за допомогою якого ви можете контролювати, як поводитиметься програма.

Прикладом популярного додатку, який має екран налаштування є Chrome для Android від Google. В розділі його налаштувань користувачі можуть обирати пошукову систему за замовчуванням, змінювати поведінку сповіщень, контролювати конфіденційність та безпеку тощо. Ви можете бачити це самі, завантаживши додаток Chrome з Google Play (якщо у вас досі немає його на вашому пристрої). Нижче наведено скріншот з додатку Chrome, що відображає екран налаштувань.

Screenshot of Chrome app settings screen

У цій статті ви дізнаєтесь, як створити розділ налаштувань додатку з нуля, а також як читати значення, які користувач обрав в настройках додатку. В якості додаткового бонусу ви також дізнаєтесь, як користуватися функціями шаблонів Android Studio для швидкого запуску проекту з розділом налаштувань.

Зразок проекту (в Kotlin) для цієї статті можна знайти також на GitHub, якому ви можете легко слідувати.

Необхідні умови

Для того, щоб слідувати цій статті вам знадобиться:

  • Базове розуміння Android APIs (наприклад, SharedPreferences).
  • Android Studio 3.0 або вище.
  • Плагін Kotlin 1.1.51 або вище.

1. Створення проекта Android Studio.

Запустіть Android Studio і створіть новий проект (ви можете назвати його SettingsScreenDemo) з порожньою активністю, SettingsActivity. Переконайтесь, що у вас стоїть галочка у віконці Include Kotlin support.

Android Studio create project screen

2. Створення PreferenceFragment.

Для підтримки API Level 11 (Honeycomb) і вище, ми можемо скористатися PreferenceFragment. Цей клас є просто Fragment, що показує ієрархію об'єктів Preference в вигляді списків.

В коді, наведеному вище, ми створили вкладений клас SettingsFragment всередині SettingsActivity (тому що клас SetttingsFragment дуже малий). Зверніть увагу, що наш клас SettingsFragment розширює суперклас  PreferenceFragment і має метод addPrerenceFromResource всередині onCreate(). У цьому методі ми присвоюємо йому ID ресурсу R.xml.preference переваги запуску XML, коли завантажується Fragment. На кінець надаємо хостинг Fragment для активності, просто використавши FragmentTransaction, щоб додати його до UI, всередину onCreate() SettingsActivity.

3. Створення преференцій.

Створіть XML-файл і назвіть його preferences.xml. Збережіть цей файл всередині каталогу res/xml у вашому проекті додатку. Зверніть увагу на те, що ви можете назвати цей файл як забажаєте, але я нагально не рекомендую давати йому традиційну назву "preferences". Також, зазвичай, ви повинні мати тільки один такий файл в проекті додатку.

Кореневий node для нашого preferences.xml повинен бути елементом <PreferenceScreen>. Тепер всередині цього елемента у нас є наші індивідуальні Preference. Ось загальні атрибути, які мають відношення до Preference:

  • android:key: це атрибут використовується, щоб отримати значення в об'єкті SharedPreferences.
  • android:title: встановлює заголовок для Preference. Цей жирний текст.
  • android:summary: встановлює summary для Preference (не є обов'язковим). Це блідий текст під заголовком.
  • android:defaultValue: встановлює дефолтне значення для Preference.

Ми пройдемося по кожній Preference, які ми коротко визначили вище. Зверніть увагу, що ви також можете додавати або кастомузівати Preference через редактор переваг Android Studio - логічний редактор розмітки, з яким ви вже знайомі. Ви можете обирати: або додати/редагувати ваш preference XML-файл в режимі "Текст", або використати опцію перетягнути-підпустити в режимі "Дизайн".

Android Studio preference editor

Як бачите, в цьому редакторі ви можете перетягувати і відпускати будь-яку Preference в розділі палітри (ліворуч). Після чого ви повинні вибрати і модифікувати його атрибути на відповідній панелі (праворуч). Зверніть увагу, що по замовчуванню у вас є 5 атрибутів, які можна модифікувати. Щоб переглядати або модифікувати всі атрибути пов'язані з обраним Preference, переконайтесь що ви клікнули на посиланні View all attributes внизу панелі атрибутів. Це дуже схоже на роботу редакторів розмітки, яку ви знаєте.

Тепер давайте пройдемося по кожному Preference, які у нас є.

Чек-бокс

CheckBoxPreference - це просто віджет CheckBox, який включено в екран преференсів. Цей Preference повертає значення "true", якщо він відмічений галочкою, і "false" - якщо ні. Іншими словами, він повертає булеву змінну незалежно від стану віджета.

CheckBoxPreferense

Інші атрибути, які ви можете додати до CheckBoxPreference, наступні:

  • android:summaryOff: встановлює summary для Preference на екрані переваг, коли він не відмічений галочкою.
  • android:summaryOn: встановлює summary для Preference на екрані preference, коли відмічений галочкою.
  • android:disableDependentsState: стан true - коли ввімкнено, або false, коли вимкнено, що робить залежності неактивними. Може бути булеве значення, таке як "true" або "false".

Перемикання преференцій

SwitchPreference виконує схожі функції до CheckBoxPreference. Він забезпечує опцію перемикання між двома станами ("on" або "off"). Він використовує віджет Switch, який дозволяє користувачу вимкнути (рух вліво), або ввімкнути (рух вправо). Даний Preference також включає атрибути, описані вище  для CheckBoxPreference. Також він має наступні атрибути:

  • android:switchTextOff: встановлює текст, який використовувався при вимкненому стані, "off".
  • android: switchTextOn: встановлює текст, який використовувався у ввімкнутому стані, "on".
SwitchPreference

EditText

Коли на Preference натиснено, він показує користувачу діалог для введення тексту. Він використовує віджет EditText, включаючи всі атрибути цього віджету, з якими ви вже знайомі.

Зверніть увагу, що значення, збережені в SharedPreferences є рядком.

EditTextPreference

List

Такий тип Preference відображатиме список введених даних в діалозі, при натисканні. Тут ви можете визначити пари ресурсів масиву рядків в вашому файлі преференцій XML. Цей масив ресурсів рядків просто містить набір рядків. Він знаходиться в res/values/arrays.xml.

Ось наш приклад ListPreference з використанням цього ресурсу.

Ми встановили дані і їх значення за допомогою атрибутів android:entries і android:entryValues відповідно.

  • android:entries: масив human-readable для презентації списку.
  • android:entryValues: масив для пошуку значення, щоб зберегти для преференції, коли обрані одні із даних.
ListPreference dialog when clicked

Наприклад, якщо ми використовуємо кількість хвилин у кожній тривалості в якості запису значень, коли користувач вибирає проміжок часу (наприклад, 30 хвилин), відповідне ціле значення зберігатиметься в SharedPreferences (наприклад, 30).

Преференція MultiSelect List

Вона схожа на ListPreference, але замість радіо-кнопок ми маємо чек-бокси. Іншими словами, користувач може вибирати в діалоговому вікні безліч функцій. Зверніть увагу, що результат зберігається в “string set” в SharedPreferences. Його можна знайти за допомогою getStringSet().

Преференція Ringtone

Коли натиснено на RingtonePreference, відображається діалогове вікно, яке містить список доступних рінгтонів на пристрої або емуляторі.

  • android:showDefault: якщо показана опція Default ringtone (рінгтон за замовчуванням).
  • android:showSilent: якщо в списку буде показана опція Silent (тихий режим). Користувач може обрати цю опцію, якщо він не хоче, щоб програвався жоден рингтон.
RingtonePreference

Зверніть увагу, що до значення, які збігаються в SharedPreferences для цієї преференції є рядком. Цей особливий рядок є URI, який вказує на ContentProvider.

4. Створення груп налаштувань.

Якщо у вас довгий список преференцій або налаштувань, це може бути проблематичним, оскільки користувачу буде складно переглянути або зрозуміти їх. Щоб вирішити цю проблему, можна згрупувати наші преференції. Подивіться на скріншот додатку Chrome, який я показував на початку, ще раз. Зверніть увагу, що його преференції згруповані по двом категоріям: Basics (Основні) та Advanced (Розширені). В такому випадку користувач краще розуміє преференції, а їх список не здається безкінечним.

Тепер поглянемо на те, як просто виконати це завдання.

Ми просто помістимо преференції, які хочемо згрупувати в тег <PreferenceCategory> і дамо кожній групі назву за допомогою атрибуту </PreferenceCategory>.

Preferences grouped with PreferenceCategory

5. Початок наміру.

Зверніть увагу, що відкрити активність можна всього лиш клікнувши на преференції на екрані налаштувань. Це може бути дуже корисним, якщо ви хочете відкрити веб-сторінку. Ось код для цього:

Тут ми додали елемент <intent> всередині елемента <Preference>.

  • android:action: встановлює дію для наміру (це схоже на виклик setAction() на об'єкті Intent).
  • Android: targetClass: встановлює клас частини назви компоненту (те ж саме, що виклик setComponent() на об'єкті Intent).
  • Android: targetPackage: встановлює пакетну частину назви компонента.
  • android:data: встановлює дані для визначення (те ж саме, що виклик setData() на об'єкт Intent).

Наприклад, щоб відкрити веб-сторінку, ви можете скористатись наступним:

6. Прив'язка Preference Summary до обраних значень.

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

В цьому класі ми створили допоміжний метод bindPreferenceSummaryToValue(), який знаходиться всередині нашого супутнього об'єкта, щоб поновити текст preference summary обраним користувачем значенням. Ми передали йому об'єкт Preference як аргумент. findPreference() поверне Preference  за допомогою ключа Preference.

У нас є змінна sBindPreferenceSummaryToValueListener, що є екземпляром Preference.OnPreferenceChangeListener. Це просто слухач змін преференції, який допоможе нам оновити preference summary обраним користувачем значенням. Ми зробимо перевірку для особливих випадків, наприклад, коли обрана преференція є RingtonePreferenc або ListPreference. Для цих типів преференцій ми робимо певні дії, щоб отримати значення підсумкового рядка. Якщо преференції немає (як, наприклад, EditTextPreference) ми просто встановлюємо summary в якості значення рядка преференції.

Всередині bindPreferenceSummaryToValue() ми встановлюємо слухача змін преференції, викликаючи onPreferenceChangeListener (в Java це setOnPreferenceChangeListener) на об'єкт Preference.

Тепер запустіть проект ще раз і подивіться, як він працює!

Settings screen showing changed summary in response to selection

7. Отримання значень преференцій.

Щоб почати отримувати значення преференції на екрані налаштувань, ми викличемо getDefaultSharedPreference(), який знаходиться всередині класу PreferenceManager, надаючи йому об'єкт Context з преференціями, значення яких ми потребуємо. Зверніть увагу, що ми отримуємо значення від дефолтного SharedPreferences для нашого додатку.

Ми викликаємо відповідний метод для типу, з якого хочемо отримати значення з SharedPreferences. Ви передаєте йому ключ як перший аргумент, а дефолтне значення - це другий аргумент.

8. Бонус: використання шаблонів Android Studio.

Тепер, коли ви дізналися, як за допомогою APIs можна створювати в Android екран налаштувань з нуля, я покажу вам короткий шлях, завдяки якому наступного разу ви зробити все значно швидше. Ви можете зробити вибір на користь шаблону замість того, щоб писати код для екрана налаштування з нуля.

Android Studio надає шаблони коду, які слідують дизайну Android та найкращим досягненням розробників. Наявні шаблони коду (для Java і Kotlin) можуть допомогти вам швидко запустити ваш проект. Один такий шаблон можна використовувати для створення екрану налаштувань.

Щоб використовувати цю корисну опцію для нового проекту, спочатку запустіть Android Studio.

Android Studios Create Android Project dialog

Введіть ім'я додатку та натисніть Next. Ви можете залишити дефолтні значення, якими вони є для Target Android Devices.

Натисніть кнопку Next ще раз.

Android studios Add an Activity to Mobile dialog

У діалоговому вікні Add an Activity to Mobile спустіться вниз і виберіть Settings Activity. Після цього клікніть на кнопці Next.

Android Studios Configure Activity dialog

В останньому діалоговому вікні ви можете перейменувати ім'я Activity, розмітки або заголовок за власним смаком. На кінець натисніть кнопку Finish, щоб зберегти всі конфігурації.

Тепер Android Studio допомогло нам створити проект з налаштуваннями activity. Досить непогано! Я нагально рекомендую вам розібратися в згенерованому коді.

Також ви можете використовувати шаблони для вже існуючих проектів Android Studio. Просто перейдіть File > New > Activity > Settings Activity.

Navigation flow to creating a new settings activity in Android Studio

Зверніть увагу на те, що шаблони, які включені в Android Studio, є хорошими для простих макетів для базових додатків. Але якщо ви насправді хочете зробити успішний старт вашого додатку, вам слід подумати про шаблони, доступні на Envato Market.

Вони економлять масу часу для досвідчених розробників, допомагаючи їм вирішувати проблему створення додатку з нуля і зосередити свої здібності на унікальності дизайну і персоналізації додатку.

Закінчення

В цій статті ви дізналися, як створити налаштування додатку в Android з нуля. Ми також вивчали, як легко і просто використовувати шаблони Android Studio для створення налаштувань додатку.

Я нагально рекомендую вам переглянути офіційну інструкцію щодо матеріал-дизайну для налаштувань, щоб краще зрозуміти, як саме слід розроблювати дизайн та використовувати налаштування в Android. Також порівняйте офіційне керівництво по API, щоб більше дізнатися про інші APIs для створення налаштувань активності.

Щоб отримати більше знань щодо програмування для Android, перегляньте деякі інші курси та навчальні статті на Envato Tuts+!


Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.