What is preference activity in android

Полный список

— используем Preferences для работы с настройками приложения

Мы уже проходили Preferences, использовали их для хранения своих данных, знаем механизм. Теперь посмотрим, как они используются для хранения настроек приложения. Android предоставляет специальное Activity для работы с настройками – PreferenceActivity. Оно умеет читать определенные xml-файлы и создавать из них экран с настройками.

Создадим простое приложение. На первом экране будем читать и отображать настройки приложения, а на втором будем их задавать с помощью PreferenceActivity.

Надо придумать какие-нибудь настройки. Пусть это будут настройки неких уведомлений, а именно возможность включить/выключить уведомления (чекбокс) и возможность прописать адрес получателя (поле для ввода текста).

Project name: P0711_PreferencesSimple
Build Target: Android 2.3.3
Application name: PreferencesSimple
Package name: ru.startandroid.develop.p0711preferencessimple
Create Activity: MainActivity

Сначала создадим xml-файл с описанием настроек. В папке res создаем папку xml, а в ней создаем файл pref.xml:

Здесь мы указали, что наш экран настроек (PreferenceScreen) будет содержать чекбокс (CheckBoxPreference) и поле (EditTextPreference) для ввода значения. Параметры: key – ключ для сохранения/чтения, summary – текст-пояснение, title – заголовок. Далее увидим, что и где используется.

Создаем Activity для настроек. PrefActivity.java:

Вместо setContentView используется метод addPreferencesFromResource, который берет файл pref.xml и по нему создает экран настроек.

Не забудьте добавить это Activity в манифест. Тут никаких особенностей, все как обычно.

Рисуем экран main.xml:

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

В onCreate мы находим TextView и получаем объект для работы с настройками — SharedPreferences. Он нам знаком, мы с ним работали ранее в уроке про Preferences. Далее идет закоментированный код полной очистки настроек приложения. Мы его не используем, я на всякий случай указал, может кому понадобится.

В onResume мы читаем из SharedPreferences настройки и выводим их в TextView. При чтении используем те самые ключи, которые прописывали в xml-файле в атрибутах key.

В onCreateOptionsMenu просто настраиваем меню для вызова окна настроек. Мы создаем пункт меню и вешаем на него Intent — в итоге при нажатии вызовется Activity.

На всякий случай уточню, почему для вывода инфы на экран здесь использую onResume, а не onCreate. Потому что, когда мы будем возвращаться с экрана настроек в главное окно, то onCreate главного окна не сработает (т.к. окно уже создано и висит в памяти) и изменения мы не увидим. А onResume точно сработает.

Все сохраняем и запускаем приложение. Видим такой экран:

По умолчанию, если настройки еще не заданы, мы получаем false и пустую строку, как и указывали в методах getBoolean и getString в onResume.

Жмем menu и переходим к настройкам.

То, что мы указывали в pref.xml система прочитала и сама создала экран настроек. Теперь мы можем здесь указывать нужные нам значения и они сразу же будут сохраняться без всяких кнопок Save. Впрочем, это стандартное поведение Android-настроек. Думаю, каждый из вас когда-нить копался в настройках и знает это.

Читайте также:  Какие телефоны обновят android

Давайте включим наши уведомления

и пропишем адрес

Жмем кнопку назад, попадаем на главный экран

который в onResume прочел свежие настройки и отобразил их.

На следующем уроке:

— используем в настройках список
— группируем настройки по экранам и категориям

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Работа с PreferenceActivity в Android

Работа с PreferenceActivity в Android

Введение

Что есть activity? Руководство разработчика дает нам следующее описание:
«Активити представляет собой визуальный пользовательский интерфейс для одного конкретного действия, который может предпринять пользователь». По сути, активити – это экран (страничка), позволяющая выполнить пользовательское действие: просмотреть текущее состояние, отредактировать свойства чего-нибудь, прочитать сообщение. Про редактирование каких-либо свойств мы сегодня и поговорим.
Часто нам приходится заполнять какие-либо формы. Это и добавление контактов, и настройка соединения, и выставление будильника. В одном маленьком проекте нам нужно было заполнять информацию о задаче, успех которой будет отслеживать пользователь. Первоначально мы сделали это просто накидав полей для ввода на экран. Выглядело это отвратительно, поля не были выровнены относительно друг друга ни по высоте, ни по ширине. Пользоваться было трудно и неприятно.
Чуть позже обнаружилось, что есть правильный способ реализовывать такие диалоги, и это – PreferenceActivity.

PreferenceActivity

Это класс-наследник Activity. Он позволяет редактировать так называемые свойства – preferences, которые задаются в xml-файле. На скриншоте видим четыре свойства – два текстовых, дату и флаг.

Чтобы описать такие свойства, xml должен быть приблизительно следующим:

У каждого свойства описывается заголовок, заголовок диалога, в котором будет происходить редактирование и признак сохранности – persistent. Если он будет выставлен в true, андройд будет хранить значения свойств в собственном хранилище, но нам это не нужно – приложение работает с базой и хранит все свои данные там.

Чтобы начать работу над своей Activity, нужно создать класс, наследующий PreferenceActivity:

public class EditActivityScreen extends PreferenceActivity
implements DatePickerDialog.OnDateSetListener <

>

Интерфейс OnDateSetListener нам понадобился, чтобы определить действие, которое мы будем выполнять по выбору пользователем даты.
Итак, пишем в onCreate():

addPreferencesFromResource(R.xml.activity_prefs);
activityNamePref = (EditTextPreference) findPreference(«name»);
activityNamePref.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() <
public boolean onPreferenceChange(Preference p,
Object newValue) <
// Set the summary based on the new label.
p.setSummary((String) newValue);
return true;
>
>);

Здесь activityNamePref – это член класса нашей активити типа EditTextPreference.
Первой строкой говорим, какой файл будет использоваться в качестве описания свойств. Дальше нужно создать класс-обработчик события сохранения нового значения в диалог редактирования свойства.
Но это все достаточно просто и понятно. Дальше начинается веселье.
Дело в том, что кроме самих свойств, мы хотим иметь внизу 2 кнопки – сохранения и отмены. Вся дальнейшая магия происходит за тем, чтобы эти кнопки туда поместить:

// Даем возможность кнопкам получать фокус.
getListView().setItemsCanFocus(true);

// Получаем лэйаут, потому что мы хотим его поменять
FrameLayout content = (FrameLayout) getWindow().getDecorView()
.findViewById(android.R.id.content);

// Берем лист вью – это то вью, где содержатся свойства.
ListView lv = getListView();
content.removeView(lv);

// Создаем новый лэйаут – он и будет содержимым
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);

Читайте также:  Андроиды с тач айди

// Параметры лэйаута.
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
lp.weight = 1;
ll.addView(lv, lp);

// Навешиваем на него кнопки.
View v = LayoutInflater.from(this).inflate(
R.layout.edit_screen, ll);

Т.е. суть магии сводится к следующему: получить текущий список, убрать его с контента, засунуть на контент новый лэйаут, на который вернуть список и добавить к нему кнопки. Почему так нельзя сделать сразу с контентом не очень понятно.
С кнопками разобрались. Вы спросите, а как же диалог ввода даты? Ведь соответствующее свойство у нас описано как просто Preference.

Секрет в имплементации onPreferenceTreeClick:

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) <
if (preference == startDatePref) <
new DatePickerDialog(this, this, year, monthOfYear, dayOfMonth).show();
>

return super.onPreferenceTreeClick(preferenceScreen, preference);
>

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

Все, что осталось, это определить, что произойдет, когда пользователь закроет диалог кнопкой Set:

@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) <
year = i;
monthOfYear = i1;
dayOfMonth = i2;
updateDate();
>

private void updateDate() <
startDatePref.setSummary(
new StringBuilder()
// Month is 0 based so add 1
.append(year).append(«-«)
.append(monthOfYear+1).append(«-«)
.append(dayOfMonth).append(» «));
>

Заключение

Вот таким нехитрым образом можно создать свой PreferenceActivity. Все, что вам останется сделать – это написать код, сохраняющий информацию из Preference-членов класса туда, куда нужно вам. Сделать это просто, взяв getSummary() от каждого члена. Удачи в разработке!

Источник

Android Research Blog

Follow Blog via Email

Blog Stats

Recent Posts

Tag Cloud

DISCLAIMER

Creating a Preference Activity in Android

In this tutorial we will build a preference screen using the PreferenceActivity class. Our main activity will contain 2 Buttons and a TextView. One of the buttons will open the preference screen, and the other will display the values stored in SharedPreferences.

The final output should look like this:

And here’s what happens when clicking on the Username/Password fields (left screenshot), and the List Preference field (right screenshot):

At a first glance it may look a bit intimidating, but as you will see later, actually it’s quite easy to define a preference screen. Trust me, I’m an engineer! (c) 🙂

To put all this things together in a fashionable way, we will be using the PreferenceActivity class. The good thing about this class is that the definition of layout file it’s very simple. It provides custom controls specially designed for preference screens. Another good thing is that you don’t need to write code to save the values from preference screen to SharedPreferences. All this work is done automatically by the activity.

So, lets begin creating our preference screen

1. Create a new project in Eclipse:
Project: PreferenceDemoTest
Activity: PreferenceDemoActivity

2. Create a new Android XML file prefs.xml in the folder res/xml/. This file will contain the layout for our preference screen:

Notice that the root element of prefs.xml is the

The “listOptions” array defines the elements of the list, or with other words, the labels.

The “listValues” array defines the values of each element. These are the values that will be stored in the SharedPreferences. The number of list options and list values should match. The first list value is assinged to the first list option, the second value to the second option,… and so on.

4. Create a new class PrefsActivity.java that extends PreferenceActivity:

Notice that instead of the traditional setContentView(), we use here addPreferencesFromResource() method. This inflates our prefs.xml file and uses it as the Activity’s current layout.

Читайте также:  Обзор беспроводных наушников для андроид хонор

5. Add the PrefsActivity.java to the AndroidManifest file:

6. Now, to test our preference activity lets modify the main.xml layout file by adding 2 Buttons and 1 TextView. One of the buttons will open the preference screen, and the other will display the values stored in SharedPreferences.

main.xml:

7. Finally, modify the PreferenceDemoActivity to handle our logic implementation:

Here we attach 2 listeners for each button and display the values retrieved from SharedPreferences in a TextView.

By this time you should compile and run successfully the application.

Источник

Setting Preference Activity In Android Q.

In this article, we are going to learn how we can use setting preference activity in Android. When we need certain settings in our app.

What is Setting Preference Activity?

A Setting Activity is an activity in the android studio which makes it easy to integrate the functionality and user interface in the application.

Use of Setting Preference Activity in Android.

Many times we need certain settings in our app, like setting default language, theme(light or dark), customizing notifications, etc.

In this tutorial, we will be creating a simple app with settings to change Image visibility.

But, For this, we will be using Shared Preferences.

In this article, we will be creating the first setting that is making the image visible or invisible by CheckBoxPreference.

Example For Setting Preference Activity in Android.

1:- Create a new android project.

File –> New –> Activity –> EmptyActivity –> name the project(SettingPrefrence) –>finish.

2:- In res/menu create a .xml file.

Right-click on the menu –> New –> menu resource file –> name the file(menu_item.xml) –>ok.

3:- In menu_item.xml copy the below code.

4:- In MainActivity.java write the below code for creating and selection of menu items.

when we click on settings then the following methods will be called.

5:- Now in activity_main.xml write below code for text view and image view.

6:- Now for Setting activity.

Right-click on the app –> new –> activity –> setting activity –>finish.

And, you will get the above code in setting activity by default.

7:- Now, In rex/xml/root_preferences.xml copy the below code in your file for SwitchPreferenceCompat.

Attributes define:-

key = used for the id of the view.

defaultValue = true/false for making switch initially on/off. By default it is true.

summary = to provide a short description of the switch button.

title = to provide title/name of the switch button.

8:- In MainActivity file.

Now, implements your MainActivity file with SharedPreferences.OnSharedPreferenceChangeListener and copy the below code in your file.

Here, the description of the above methods uses in the MainActivity file.

Here, the Above method is used to set the switch button preference. It set true when on and false when off.

Now, The above method is used to getting the preference data on switch button status changed.
It gets true when on and false when off.

This method is used to set the visibility of the image. The image will visible when the switch button in on.

The image will invisible when the switch button is off.

Now, you can run your project and you will get the following output.

Output:-

Now, when you turn on the switch button image will be visible.

And, I hope this article will helpful for you.

Источник

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