×
Namespaces

Variants
Actions

Использование списков в S60

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Совместимость
Платформа(ы):
Symbian

Статья
Автор: Den123 (14 Jun 2009)
Последнее редактирование: hamishwillee (08 May 2013)

Contents

Введение

Списки - наиболее продвинутые и мощные компоненты S60 GUI. Подавляющее большинство программ, базирующихся на пользовательском интерфейсе S60, используют списки. Различных вариантов списков достаточно много, следующие статьи демонстрируют некоторые примеры стандартных списков и их элементов:

Разработчику необходимо выбрать правильный вариант списка, который подходит для его приложения наилучшим образом. При этом необходимо учитывать особенности конкретного приложения, конкретный контекст. В ряде случаев простые списки с однострочными элементами подойдут наилучшим образом (чаще всего это достаточно большие списки, например перечень песен в списке воспроизведения), в иных случаях списки с двухуровневыми элементами с использованием иконок будут более предпочтительными (список альбомов конкретного исполнителя в музыкальном проигрывателе).

Общие правила использования списков

Поддержка тем

В большинстве случаев списки должны поддерживать текущую тему устройства. Отказ от поддержки тем в списке (как и в приложении в целом) должен быть обусловлен очень серьезными причинами. Стандартные списки, как и прочие стандартные элементы GUI, поддерживают темы, если при инициализации App Ui был вызван следующий метод:

BaseConstructL( CaknAppUi::EAknEnableSkin );

Более подробно о поддержке тем в S60:

При использовании собственных реализаций списков поддержка тем требует особых усилий.

Вертикальная полоса прокрутки

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

   // declare listbox in class header   
CAknSingleGraphicStyleListBox* iListBox;
...
 
// Add vertical scroll bars
iListBox->CreateScrollBarFrameL( ETrue );
iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto );

Использование компонента Search

Если список содержать большое количество элементов (больше 20) - необходимо использовать компонент Search, который позволит пользователю быстро найти необходимыe данные.

Lb search.png

Ниже приведена ссылка на статью, демонстрирует использование компонента Search:

Горизонтальная прокрутка элементов списка

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

    // declare listbox in class header   
CAknSingleGraphicStyleListBox* iListBox;

 
iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );

Отображение надписи, если список пуст

Если список пустой, необходимо задать поясняющую надпись (такая надпись может объяснять, как добавить новые элементы)

Lb empty.png

Следующий статья демонстрирует, как установить текст надписи:

Использование списков для выбора элементов

Использование списков для выбора элемента (одного или нескольких) из множества - это стандартный подход в S60. Однако в случае, когда количество элементов для выбора небольшое (не более 10) и активация выбора происходит среди иных настроек в setting list — рекомендуется отказаться от использования popup lists, вместо них использовать setting page c элементами в виде checkbox для множественного выбора или в виде radiobutton если необходимо выбрать одно значение:

Lb checkboxes.png

Lb radiobuttons.png


Также следует отметить реализацию бинарного выбора в setting list – при нажатии кнопки в основном списке необходимо автоматически менять значение на противоположное, при использовании меню «Change» необходимо использовать setting page с двумя возможными вариантами в виде radiobutton.


Подробный пример, демонстрирующий возможности setting list представлен по следующей сслыке: S60 Platform: Settings Screen Example

Реализация выбора единственного элемента из списка достаточно очевидна. Возможность множественного выбора подразумевает использование двух альтернатив: markable и multiselection lists.

  • Markable list - это обычный список, в котором присутствует неочевидная возможность выбора нескольких элементов ( с помощью кнопки pen либо # )

Lb markable.png

  • Multiselection list - это список, в котором явным образом подчеркнута возможность множественного выбора, каждый элемент списка содержит checkbox с помощью которого его можно отметить.

Lb multiselect.png

Если единственная цель использования списка - это выбор множества элементов (обычно это происходит в модальном диалоге), то следует использовать multiselection list. Если множественный выбор - это лишь дополнительное действие при работе с элементами, необходимо использовать markable list.

Использование стандартного меню в markable list

Для того, чтобы повысить удобство использования markable list в S60 GUI содержится стандартное меню, позволяющая включить/выключить отметку текущего/всех элементов.

Lb markable mnu.png

Для подключения этого меню в ресурсах проекта небходимо определить:

RESOURCE MENU_PANE r_your_menu_pane
{
items =
...
{
MENU_ITEM
{
cascade = R_AVKON_MENUPANE_MARKABLE_LIST_IMPLEMENTATION;
txt = “Mark/Unmark”;
}
};
}

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

TBool CYourList::HandleMarkableListCommandL( TInt aCommand )
{
switch ( aCommand )
{
case EAknCmdMark:
case EAknCmdUnmark:
case EAknMarkAll:
case EAknUnmarkAll:
AknSelectionService::HandleMarkableListProcessCommandL(aCommand,iListBox );
return ETrue;
}
return EFalse;
}

При использовании этого меню следует учитывать текущее состояние элементов списка и скрывать неактуальные в данный момент пункты меню (например, если выделены все элементы, то пункт "Mark all" смысла не имеет). Для реализации этого подхода можно также воспользоваться специальными методами класса AknSelectionService.

Реализация собственных списков

По тем или иным причинам стандартные варианты списков могут не удовлетворять требованиям приложения. S60 GUI позволяет использовать собственные реализации классов (наследуемые от стандартных) для отображения списков.

Lb custom demo.png

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

This page was last modified on 8 May 2013, at 03:00.
131 page views in the last 30 days.