Одно из действий в контекстном меню объекта опера­ционной системы. Реализация режима контекстных действий

300     Глава 18. Контекстные меню и режим контекстных действий

преобразуем тип результата getMenuInfo() и получаем подробную информацию о выбранном элементе списка, включая его позицию в наборе данных. Позиция используется для получения искомого объектаCrime .

Запустите приложение CriminalIntent, добавьте новое преступление и удалите его долгим нажатием. (Чтобы имитировать долгое нажатие в эмуляторе, удерживайте нажатой левую кнопку мыши до появления меню.)

Реализация режима контекстных действий

Код, написанный нами для удаления преступления из контекстного меню, будет работать на любом устройстве Android. Например, на рис. 18.2 показано контекстное меню на устройстве с Jelly Bean.

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

Рис. 18.3. Контекстная панель действий появляется при долгом нажатии

Чтобы реализовать контекстную панель действий, необходимо написать специальный код, отдельный от кода контекстного меню. Кроме того, код контекстной панели

действий содержит классы и методы, недоступные в Froyo и Gingerbread, поэтому необходимо проследить за тем, чтобы в таких ситуациях этот код не вызывался.

Множественное выделение

Когда представление списка находится в режиме контекстных действий, вы можете включить режим множественного выделения элементов списка. Любое действие, выбранное на контекстной панели действий, будет применяться ко всем выделенным представлениям.

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

Листинг 18.6. Назначение режима выделения

public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {

View v = super.onCreateView(inflater, parent, savedInstanceState);

ListView listView = (ListView)v.findViewById(android.R.id.list);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {

// Контекстные меню для Froyo и Gingerbread registerForContextMenu(listView);

} else {

// Контекстная панель действий для Honeycomb и выше listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

Методы обратного вызова режима действий в представлении списка

Следующий шаг - назначение для ListView слушателя, реализующего интерфейсAbsListView.MultiChoiceModeListener . Этот интерфейс содержит следующий метод, который вызывается при выделении или отмене выделения представления.

public abstract void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked)

Интерфейс MultiChoiceModeListenerреализует другой интерфейс - ActionMode. Callback. Когда экран переходит в режим контекстных действий, создается экземпляр класса ActionMode, а методы ActionMode.Callbackвызываются в разных точках жизненого цикла ActionMode. ActionMode.Callbackсодержит четыре обязательных метода:

public abstract boolean onCreateActionMode(ActionMode mode, Menu menu)

302     Глава 18. Контекстные меню и режим контекстных действий

Вызывается при создании ActionMode . Именно здесь заполняется ресурс контекстного меню, которое будет отображаться на контекстной панели действий.

public abstract boolean onPrepareActionMode(ActionMode mode, Menu menu)

Вызывается после onCreateActionMode(…) и каждый раз, когда существующую контекстную панель действий необходимо актуализировать новыми данными.

public abstract boolean onActionItemClicked(ActionMode mode, MenuItem item)

Вызывается, когда пользователь выбирает действие. Здесь программируется обработка контекстных действий, определенных в ресурсе меню.

public abstract void onDestroyActionMode(ActionMode mode)

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

В методе CrimeListFragment.onCreateView(…) назначьте слушателя, реализующегоMultiChoiceModeListener для представления списка. В нашем случае что-то делать

нужно только в методах onCreateActionMode(…)и onActionItemClicked(ActionMode, MenuItem).

Листинг 18.7. Назначение слушателя MultiChoiceModeListener (CrimeListFragment.java)

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {

// в этой реализации

// Методы ActionMode.Callback

public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.crime_list_item_context, menu); return true;

public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false;

// Метод является обязательным, но не используется

// в этой реализации

public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) {

case R.id.menu_item_delete_crime:

CrimeAdapter adapter = (CrimeAdapter)getListAdapter(); CrimeLab crimeLab = CrimeLab.get(getActivity());

for (int i = adapter.getCount() - 1; i >= 0; i--) {

if (getListView().isItemChecked(i)) { crimeLab.deleteCrime(adapter.getItem(i));

adapter.notifyDataSetChanged(); return true;

public void onDestroyActionMode(ActionMode mode) {

// Метод является обязательным, но не используется

// в этой реализации

}); return v;

Если вы использовали функцию автозавершения Eclipse для создания этого интерфейса, обратите внимание: заглушка, сгенерированная для onCreateActionMode(…) , возвращаетfalse . Обязательно измените возвращаемое значение наtrue ; возвращениеfalse отменяет создание режима действий.

В коде метода onCreateActionMode(…) обратите внимание на то, что мы получаем экземплярMenuInflater от объектаActionMode , а не от активности. Режим действий содержит подробную информацию для настройки контекстной панели действий. Например, вызовActionMode.setTitle(…) позволяет назначить контекстной панели действий специальный заголовок. ОбъектMenuInflater активности не будет знать об этом заголовке.

Рис. 18.4. Второй и третий элемент списка выделены

Кроме имени в сообщении об объекте человек может подробно перечислить его признаки: свойства, действия, поведение, состояние.

Свойства объектов отвечает на вопросы: «Чем может отличаться один объект от другого?», «Что может измениться у объекта при выполнении действия?». Например, собаки могут отличаться друг от друга окрасом, города – численностью населения, реки – длинной; при редактировании документа его размер может уменьшиться, при нагревании воды увеличивается её температура.

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

В табл. 1.1 приведены объекты, их свойства, а также величины и значения величин, соответствующие этим свойствам.

Возможности объекта обозначаются именами действий, отвечающими на вопросы «Что он может делать?» (активное действие) или «Что с ним можно сделать?» (пассивное действие). Другими словами, именами действий обозначаются процессы, которые могут происходить с объектом. Например, далматин бегает, операционная система управляет работой компьютера, воздушный шар можно надуть, файл – переименовать, модифицировать, удалить и т.д.

Чтобы описать поведение объекта, нужно не просто назвать имена действий, а составить пошаговое описание каждого действия, свойственного этому объекту. Без этого информация об объекте будет неполной. Ведь действие с одним и тем же именем различные объекты могут совершать по-разному. Например, птицы, воздушные шары и вертолёты неодинаково летают, а действие «строить» человек по-разному выполняет с домами мостами и тоннелями.

Таблица 1.1

Говоря о состоянии объекта, человек называет или подразумевает определённое сочетание значений всех или некоторых свойств этого объекта. Например, под хорошей погодой человек может понимать определенную температуру воздуха (тепло), отсутствие сильного ветра (тихо) и осадков (солнечно). Когда с объектом выполняется действие, его состояние изменяется. Например, с воздушным шариком можно связать величины «объём» (в литрах), «высота» (в метрах над землёй) и «повреждённость» (наличие дырок). Когда воздушный шар надувают, изменяется его объём. Во время полёта шара будет увеличиваться высота, на которой он находится. А когда шарик лопнет и упадёт, изменятся значения сразу всех трёх величин.

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

і Коротко о главном

В сообщении об объекте человек может описать его признаки – свойства, действия, поведение, состояние.

Свойства объектов отвечают на вопросы: «Чем может отличаться один объект от другого?», «Что может измениться у объекта при выполнении действия?». Каждое свойство определяется величиной и тем значением, которое она принимает. Значения величин выражаются числами или словами.

Возможности объекта обозначаются именами действий, отвечающими на вопросы «Что он может делать?» (активное действие) или «Что с ним можно сделать?» (пассивное действие).

Чтобы описать поведение объекта, нужно не просто назвать имена действий, а составить пошаговое описание каждого действия, свойственного этому объекту.

Говоря о состоянии объекта, человек называет или подразумевает определённое сочетание значений всех или некоторых свойств этого объекта.

Вопросы и задания

1. Все ли свойства объекта следует приводить в каждой конкретной ситуации? Приведите примеры.

2. Какие свойства можно привести при описании множества объектов? Можно ли для множества объектов привести значения величин? Приведите примеры.

3. Каким образом можно узнать свойства интересующих вас объектов?

4. Назовите свойства операционной системы Windows «Рабочий стол».

5. Для свойств каждого из перечисленных объектов укажите величину и значение.

6. Какие действия можно совершать с объектами «файл» и «папка»?

7. Одно из действий в контекстном меню объекта операционной системы Windows всегда выделено полужирным шрифтом. Какое это действие? Почему выбрано именно оно? Каким образом можно выполнить это действие без контекстного меню?

8. Как известно действие над основными объектами операционной системы Windows можно выполнить несколькими способами:

1) с помощью команд строки меню;

2) с помощью кнопок панелей инструментов, дублирующих команды меню;

3) с помощью команд контекстного меню;

4) с помощью технологии «Drag&Drop».

Как вы считаете, для чего нужно столько способов? Почему разработчика не отдали предпочтение какому-то одному из них?

9. Назовите для каждого из приведённых действий два предмета, с которыми указанное действие человек выполняет по-разному:

а) собрать;

б) заполнить;

в) открыть;

г) связать;

д) включить;

е) сложить;

ж) измерить;

з) поймать.

10. Приведите примеры возможных активных и пассивных действий для объектов «птица», «мяч», «велосипед».

11. Приведите примеры пошаговых описаний действий человека. Как их называют?

12. Ответьте на следующие вопросы.

а) Значением какой величины определяется переход чайника в состояние «кипит»?

б) в каком состоянии находится вода, если её нельзя вылить из чайника?

в) В каком состоянии находится карандаш, если с его помощью нельзя ничего написать или нарисовать?

г) В каком состоянии находится долька яблока, если её можно согнуть, и она при этом не ломается?

Настройка свойств типов файлов

Многие автоматические операции Windows 98 основаны на том, что операционная система должна предварительно знать, какое приложение следует использовать для работы с документами того или иного типа. В частности, выше мы видели, что автоматическое открытие документа, ярлык которого находится в папке \Автозагрузка, сопровождается запуском приложения, связанного с данным типом документов. О том, какое именно приложение следует считать связанным с каждым конкретным типом файлов, операционная система судит по расширению имени файла, а сама связь выполняется путем регистрации типов файлов в операционной системе.

Для регистрации (перерегистрации) свойств типов файлов служит вкладка Типы файлов диалогового окна Свойства папки (Пуск > Настройка > Свойства папки). Необходимость в регистрации обычно возникает в тех случаях, когда пользователю надо ввести собственное расширение имени файла (так называемое пользовательское расширение имени) и назначить приложение, принятое по умолчанию для обслуживания файлов данного типа. Необходимость в перерегистрации, как правило, связана с некорректной работой некоторых приложений (после установки они могут автоматически «захватывать» себе некоторые типы файлов, не всегда спрашиваясогласия пользователя на эту операцию). Разумеется, после удаления такого приложения файлы данных типов остаются без родительского приложения, и для них надо провести регистрацию вручную - автоматически открыть их операционная система уже не может.

На вкладке Типы файлов диалогового окна Свойства папки приведен список Зарегистрированные типы файлов (рис. 6.4). Если в этом списке выделить один из типов файлов, в нижней части диалогового окна можно увидеть расширение имени, зарегистрированное для данного типа, и приложение, с ним связанное. Более подробную информацию о пути доступа к приложению можно получить, если открыть диалоговое окно Изменение свойств типа файлов щелчком на командной кнопке Изменить.

Рис. 6.4. Настройка свойств типов файлов

В данном диалоговом окне приведен список действий, которые возможны с файлами данного типа. Одно из действий списка выделено полужирным цветом - оно является основным.

Элементы управления диалогового окна Изменение свойств типа файлов (см. рис. 6.4) позволяют:

Изменить значок, связанный с данным типом файлов (Изменить значок);

Создать новое действие и назначить ему приложение (Создать);

Изменить приложение, выполняющее действие (Изменить);

Удалить действие (Удалить);

Назначить избранное действие основным (По умолчанию).

Действие, назначенное основным, выполняется при двойном щелчке на значке или ярлыке. Прочие действия, представленные в списке Действия, доступны через контекстное меню. Если в данном списке создать новое действие и назначить ему приложение или удалить одно из действий, то изменится контекстное меню, открывающееся при щелчке правой кнопкой мыши на значках или ярлыках файлов данного типа. Таким образом, диалоговое окно Изменение свойств типов файлов служит не только для настройки свойств типов файлов, но и для редактирования контекстного меню документов.

Настройка команды Отправить

Команда Отправить - мощное средство повышения производительности труда при работе в Windows 98. Эта команда имеется в контекстном меню большинства объектов, и с ней связан с ней список объектов, которые могут служить адресатами при пересылке текущего объекта. Использование команды Отправить - простейший способ копирования документа на гибкий диск, отправки его по заданному адресу электронной почты, создания его ярлыка на Рабочем столе и т. п. Пункты меню команды Отправить - настраиваемые и редактируемые. Неиспользуемые пункты можно удалить, а вместо них создать другие, более удобные.

Настройка команды Отправить выполняется путем наполнения специальной папки \SendTo ярлыками папок, устройств и каналов связи. Полный адрес этой папки - C:\Windows\SendTo. Каждый ярлык, присутствующий в данной папке, соответствует одному из пунктов меню команды Отправить.

Автоматизация очистки жесткого диска

Необходимость в автоматической очистке жесткого диска связана с особенностью Windows 98, которая заключается в том, что эта операционная система предназначена для круглосуточной работы персонального компьютера. В ночное время система может обеспечивать работу в Интернете и доставку информации от Web-узлов, на услуги которых оформлена предварительная подписка. Если при обычной работе с компьютером возникает исключительная ситуация, связанная с переполнением жесткого диска, пользователь имеет возможность приостановить текущий процесс, выполнить необходимые операции очистки и продолжить работу. Если такая исключительная ситуация происходит ночью, выполнять операции очистки система должна автоматически - для этого в нее входит агентское приложение Очистка диска {программы-агенты запускаются автоматически при возникновении связанных с ними исключительных событий).

Агент очистки запускается командой Пуск > Программы > Стандартные > Служебные > Очистка диска. После запуска программы следует указать имя диска, для которого выполняется настройка. Автоматическая работа агента задается установкой флажка Автоматически производить очистку диска при недостатке свободного места на нем на вкладке Настройка.


Р-агрузка...