You Are Here:

Community: Wiki

This page was last modified on 20 June 2009, at 20:37.

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

From Forum Nokia Wiki

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 данные.

Image:lb_search.png

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

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

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

// declare listbox in class header   
CAknSingleGraphicStyleListBox* iListBox;

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

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

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

Image:lb_empty.png

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

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

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

Image:lb_checkboxes.png

Image:lb_radiobuttons.png


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


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

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

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

Image:lb_markable.png

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

Image:lb_multiselect.png

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

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

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

Image: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 позволяет использовать собственные реализации классов (наследуемые от стандартных) для отображения списков.

Image:lb_custom_demo.png

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

Related Wiki Articles

No related wiki articles found

Rate This

 
Bookmark this page: DeliciousDiggFacebookGoogleYahooStumbleUponRedditDiigoTechnocratiTwitter  Share this page Share this page Print this Page Print this page Invite a friend Invite a friend
京ICP备05048969号    Email Newsletters Press Terms & Conditions Privacy Policy Sitemap Contact Us © 2009 Nokia 
RDF Facets: qdcZidentifierQSxhttpE3aE2fE2fwikiE2eforumE2enokiaE2ecomE2findeE78E2ephpE2fJavaE5fVerifiedE5fE28PortuguE25C3E25AAsE29X qdcZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qdcZtypeQUqfntypeZCommunityContentQ qdcZtypeQUqfntypeZE52esourceQ qdcZtypeQUqfntypeZWebpageQ qdcZtypeQUqfntypeZWikiContentQ qdcZtypeQUqmarsZManagedE52esourceQ qdcZtypeQUqwebZInformationE52esourceQ qdcZtypeQUqwebZPageQ qdcZtypeQUqwebZE52esourceQ qdcZtypeQUqrdfsZE52esourceQ qfnZtypeQUqfntypeZCommunityContentQ qfnZtypeQUqfntypeZE52esourceQ qfnZtypeQUqfntypeZWebpageQ qfnZtypeQUqfntypeZWikiContentQ qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX qrdfZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qrdfZtypeQUqfntypeZCommunityContentQ qrdfZtypeQUqfntypeZE52esourceQ qrdfZtypeQUqfntypeZWebpageQ qrdfZtypeQUqfntypeZWikiContentQ qrdfZtypeQUqmarsZManagedE52esourceQ qrdfZtypeQUqwebZInformationE52esourceQ qrdfZtypeQUqwebZPageQ qrdfZtypeQUqwebZE52esourceQ qrdfZtypeQUqrdfsZE52esourceQ