Лучший способ реализовать сложный экран настроек? - PullRequest
4 голосов
/ 03 февраля 2011

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

  • Списки пар: для выбора фонового рисунка пользователь может выбрать от 1 до 5 различных фигур (где каждыйshape - это файл .png) и присвойте каждой фигуре цвет int.Например, пользователь может выбрать оранжевый квадрат, зеленый треугольник и красный прямоугольник.

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

Однако, мне кажется, PreferenceActivity не работаетхорошо с настройками как выше, потому что:

  • Общие предпочтения не могут хранить списки.
  • Общие предпочтения не могут хранить иерархические данные.
  • Сведение интерфейса моих предпочтений, например, до отдельныхкнопки предпочтений для настройки каждого цвета и использования зависимых предпочтений для отключения предпочтений, которые не применимы к текущему режиму, создадут беспорядочный и сложный в использовании интерфейс.

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

Мой план был:

  • Просто реализуйте пользовательское действие с пользовательским графическим интерфейсом.Это дает мне гораздо больше свободы для создания приятного интерфейса для настройки списков, и я могу интеллектуально скрывать опции, которые не применимы к текущему режиму.
  • Сохранять все мои настройки либо в файле XML, либо с помощьюсериализация объекта Java.Это означает, что я могу легко поддерживать иерархические данные и списки переменной длины, что оставляет место для дальнейших расширений.

Этот план кажется разумным? Я обеспокоен, что не делаюВ отличие от Android, но мне кажется, что общие настройки и PreferenceActivity здесь не соответствуют моим потребностям.

1 Ответ

1 голос
/ 04 февраля 2011

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

public class myprefs extends Activity{
private static final String PREFS_XML = "prefs_xml";
private static final String PREF_1 = "pref_1";

String preference;

private SharedPreferences preferences = null;
public void loadPrefs(){
    preferences = this.getSharedPreferences(PREFS_XML, Activity.MODE_PRIVATE);
    preference = preferences.getString(PREF_1, "default value");
}
}

Это довольно просто, чтобы получить свои собственные предпочтения. Для их установки вы используете

preferences.edit().putString(PREF_1, "hello!").commit();

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

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