Группа: Эльфмейкер
Сообщений: 65
Модель телефона: w810 Прошивка: R4EA031 Оператор: Статус на сайте: Offline
| СОЗДАЁМ МЕНЮ СОБСТВЕННЫМИ РУКАМИ Не всех устраивает меню собственного телефона. Некоторым не хватает каких-то пунктов, а другим что-то мешает. Ну а кому-то хочется удивить окружающих оригинальным внешним видом. Скорее всего, Вы уже читали на других сайтах о том, как изменить меню телефона. Я же постараюсь собрать всё в одну статью с подробностями и максимально доходчиво. В файловой системе телефонов SE по адресу tpa/preset/system/menu/ лежит файл MENU.ML. Вот он и определяет внешний вид и структуру меню. Для изменения меню будем редактировать этот menu.ml. Открывать его нужно блокнотом или редактировать специальными прогами. Для этого есть программы: MenuEditor, Menu Edit. Отличаются они названием не очень сильно, но своими функциями они отличаются очень-очень сильно. Если вы хотите радикально поменять своё меню - пользуйтесь MenuEditor. Так же MENU.ML возможно редактировать блокнотом. Для тех, кто уважает Блокнот больше остальных программ, я опишу структуру menu.ml Немного о структуре menu.ml Открываем menu.ml и видим имя телефона Code <menu id="Cyndi_Generic_Id"> Вот начинается главное меню Code <menu id="MainMenu" layout="DesktopTopMenuGFX2">> Здесь же указан вариант отображения меню layout="DesktopTopMenuGFX2". Подробнее об этом расскажу позже. В строке Code <highlight>4</highlight> указывается номер пункта, который выделится сразу после входа в меню. В menu.ml каждый элемент заключен в строки вида: Code <element id="название элемента"> … </element> Перед элементами главного меню еще ставят комментарий с указанием номера пункта и «горячей клавиши». А вот и первый элемент менюCode <!-- Desktop Element 1 using DESKTOP_HOOK_1 --> <element id="PlayNow" replace="next"> <label type="name" textid="DIL_PRE_PLAY_LINK_TXT"/> <icon pos="unselected" source="internal">PREPLAY_DESKTOP_ICN</icon> <icon pos="selected" source="internal">PREPLAY_DESKTOP_SELECTED_ICN</icon> <icon pos="shortcut" source="internal">RN_SHORTCUT_LIST_PREPLAY_ICN</icon> <link type="internal"/> </element> Для лучшего понимания структуры меню, в первой строке в комментариях записан номер элемента (Desktop Element 1) и кнопка для быстрого запуска (DESKTOP_HOOK_1). Далее идёт идентификатор пункта element id="PlayNow" (для каждого пункта он свой). А выражение replace="next" означает, что данный пункт будет заменён тем, который идёт сразу за ним. Следующей строкой задаётся имя пункта. Это имя будет высвечиваться, когда пункт выделен. Ссылка textid="DIL_PRE_PLAY_LINK_TXT" указывает на то, что в прошивке телефона есть файл DIL_PRE_PLAY_LINK_TXT, в котором и записано имя. Далее 3 строки задают иконки: Code <icon pos="unselected" – для невыделенного пункта, <icon pos="selected" – для выделенного пункта, <icon pos="shortcut" – для активити-меню. Для телефонов без активити-меню указывается только 2 иконки (т.е. будут строки с "unselected" и "selected"). В каждой из этих строк прописываются и пути к иконкам. Путь source="internal">PREPLAY_DESKTOP_ICN означает, что иконка находится в прошивке (а именно в main) и называется PREPLAY_DESKTOP_ICN. Ну а следующая строка содержит ссылку на то приложение, которое должно запуститься по нажатию на выделенный пункт. В приведенном примере, internal означает, что приложение находится в прошивке. А выбор конкретного приложения (в прошивке оно ведь не одно, а ссылки одинаковые) осуществляется по element id. Ну и заканчивается описание пункта строкой Часть пунктов главного меню представляют собой элементы, а остальные – подменю. Подменю, как и главное меню, содержат элементы и подменю.Code <!-- Desktop Element 3 --> <element id="Entertainment"> <label type="name" textid="MENU_ENTERTAINMENT_TXT"/> <icon pos="unselected" source="internal">DESKTOP_ENTERTAINMENT_ICN</icon> <icon pos="selected" source="internal">DESKTOP_ENTERTAINMENT_SELECTED_ICN</icon> <icon pos="shortcut" source="internal">RN_SHORTCUT_LIST_ENTERTAINMENT_ICN</icon> <menu id="Menu_Entertainment_Id"> <label type="title" textid="MENU_ENTERTAINMENT_TXT"/> <element id="InfoBrowserDemo"> <label type="name" textid="SEC_DEMO_SK"/> <icon pos="left" source="internal">STOPWATCH_STOPWATCH_MENU_ICN</icon> <link type="internal"/> </element> <element id="SimApplicationToolkit"> <label type="name" textid="MENU_SAT_DEFAULT_MAIN_MENU_HEADER_TXT"/> <label type="helptext" textid="MENU_SAT_DEFAULT_MAIN_MENU_HEADER_HLP"/> <icon pos="left" source="internal">MENU_SAT_ICN</icon> <link type="internal"/> </element> </menu> </element> Здесь пункт Entertainment представляет собой меню, в котором содержатся два пункта InfoBrowserDemo и SimApplicationToolkit. Обращаю внимание, что подменю вначале описывается как элемент главного меню, а затем как меню, содержащее пункты: Code <element id="название элемента меню"> … <menu id="название подменю"> … </menu> </element> Последовательность элементов в меню определяется последовательностью записи в menu.ml. Так, в приведенном выше примере, в меню Entertainment первым пунктом будет InfoBrowserDemo, а вторым – SimApplicationToolkit. Теперь посмотрим, что же можно изменить в меню. Вначале расскажу, как изменять структуру меню, затем о замене иконок и названий пунктов, а дальше о добавлении java-приложений в меню. Ну и поделюсь некоторыми интересными моментами. Изменяем структуру меню Под изменением структуры меню я понимаю изменение порядка следования пунктов, перенос элементов из одного подменю в другое (и самих подменю), а также удаление и добавление пунктов и подменю. Попробуем пункт «Новое сообщение» в меню «Сообщения» перенести на вторую позицию. У себя я его перенёс на предпоследнюю позицию (т.к. никогда не пользуюсь), но понятнее и нагляднее будет перенос именно на вторую. Итак, находим нужный нам элемент и выделяем его Вырезаем элемент и добавляем строку в том месте, куда хотим его переместить (естественно, не внутри другого элемента). Осталось только вставить наш элемент вместо пустой строки. Теперь у нас в меню «Сообщения» на первом месте стоит пункт «Входящие», а на втором – «Новое сообщение». Таким же образом элемент можно перенести в любое другое место того же подменю или в другое подменю. Аналогично переносятся и сами подменю. Чтобы его перенести, нужно выделить всю структуру Code <element id="название элемента"> … <menu id="название меню"> … </menu> </element> С удалением еще проще. Выделяем элемент или подменю и удаляем его Из меню хотелось бы вызывать не только встроенные в прошивку приложения, но и java-приложения, которые установлены в телефон. Все встроенные в прошивку приложения уже записаны в меню. А добавить в меню элемент, который будет запускать java-приложение, не составит особого труда. Об этом я расскажу ниже с подробным описанием. С добавлением новых меню (подменю) тоже нет никаких проблем. Структуру записи я приводил чуть выше. Сначала описывается элемент (как элемент меню более высокого уровня) со своим названием и иконкой (если нужно). Вместо строки записывается меню с названием (совпадает с элементом) и вложенными элементами. При этом id элемента и меню могут быть любыми (на англ. языке), но не совпадать с другими элементами (меню). Привожу общий вид нового меню (для отображения в главном меню): Code <!-- Новый элемент главного меню -->
<element id="любое значение латиницей"> <label type="name"><text>название меню</text></label> <icon pos="unselected" source="file">имя иконки</icon> <icon pos="selected" source="file">имя иконки</icon> <icon pos="shortcut" source="file">имя иконки</icon>
<!-- Новое меню -->
<menu id="любое значение латиницей"> <label type="title" ><text>название меню</text></label>
<!-- Первый элемент нового меню -->
<element id="InfoBrowserDemo"> <label type="name"><text>название 1-го элемента</text></label> <icon pos="left" source="file">имя иконки</icon> <link type="java" ... /> </element> ... </menu> </element> Примерно такой вид должно иметь новое меню. Теперь дальше. Замена иконок и названий пунктов Для замены иконок, прежде всего, нужны сами иконки (логично!). Лучше всего, использовать картинки форматов .png и .gif. Можно и .jpg, но с прозрачностью смотреться будет лучше . Теперь о размерах иконок. Для телефонов с экраном 176х240 применяют такие размеры: icon pos="unselected" 55х34 (ширина х высота) icon pos="selected" 64х42 А для телефонов с экраном 240х320 – icon pos="unselected" 73х53 icon pos="selected" 93х69 icon pos="shortcut" 24х18 Я не нашел информации о размерах иконок для других экранов. Поэтому вам самим придётся искать или подбирать. Размер можно сделать и больше, но иконки будут накладываться друг на друга. Эти размеры примерно соответствуют размерам стандартных иконок и потому хорошо смотрятся при использовании одновременно стандартных и самодельных. Называть же иконки я советую универсальными именами: icon1_unselected.png icon1_selected.png icon1_shortcut.png … icon12_unselected.png icon12_selected.png icon12_shortcut.png Э то позволит в дальнейшем заменять иконки без корректировки menu.ml. Я даю иконкам именно такие названия. В этих названиях легко ориентироваться и маленькая вероятность перепутать иконки. Желательно не использовать заглавных букв (может ничего страшного и не будет, но зачем рисковать?). Все иконки должны храниться в папке tpa/preset/system/menu/ вместе с menu.ml. Осталось откорректировать menu.ml. В нём нужно прописать новые иконки. Для этого заменяем source="internal" на source="file" и названия стандартных иконок на названия новых. Для первого пункта получим вот так: Code <icon pos="unselected" source="file">icon1_unselected.png</icon> <icon pos="selected" source="file">icon1_selected.png</icon> <icon pos="shortcut" source="file">icon1_shortcut.png</icon> Аналогичным образом нужно откорректировать каждый элемент главного меню. Для остальных пунктов (не из главного меню) принцип остаётся тем же: Code <icon pos="left" source="internal">имя иконки</icon> Ну теперь, чтоб меню совсем хорошо смотрелось, хочется еще дать свои названия новым элементам и подменю. Для этого правим строку: Code <label type="name" textid="стандартное_имя_элемента"/> вот таким образом: Code <label type="name"><text>новое_имя_элемента</text></label> Для изменения имени меню делаем аналогично: Code <label type="title"><text>новое_имя_меню</text></label> Можно давать имена и на русском языке, но при этом нужно сохранить файл в кодировке UTF-8. Теперь осталось только научиться делать в меню ссылки на java-приложения. Ссылки на Java-мидлеты Ссылка на java-мидлет является обычным элементом меню, который запускает нужное нам приложение. Возьмём такой элемент: Code <element id="PlayNow"> <label type="name" textid="DIL_PRE_PLAY_LINK_TXT"/> <icon pos="unselected" source="internal">PREPLAY_DESKTOP_ICN</icon> <icon pos="selected" source="internal">PREPLAY_DESKTOP_SELECTED_ICN</icon> <icon pos="shortcut" source="internal">RN_SHORTCUT_LIST_PREPLAY_ICN</icon> <link type="internal"/> </element> Для того, что бы пункт меню запускал установленное java-приложение, нужно исправить всего одну строку этого пункта. Вот в этой строке Code <link type="internal"/> нужно вместо internal указать конкретное приложение. Строка должна иметь вид: Code <link type="java" javasuitename="…" javasuitevendor="…" javasuitepoint="…"/> javasuitename, javasuitevendor, javasuitepoint нужно взять из самого приложения. Для этого файл .jad открываем WinRAR-ом и находим в папке META-INF файл MANIFEST.MF. В этом файле находим строки MIDlet-Name: MIDlet-Vendor: MIDlet-1: соответственно для javasuitename, javasuitevendor и javasuitepoint. А теперь подробно на примере. Сделаем ссылку на Oper'у. В MANIFEST.MF записано: Quote Manifest-Version: 1.0 MIDlet-Name: Opera Mini MIDlet-1: Opera Mini, /i.png, Browser MIDlet-Data-Size: 25600 MicroEdition-Configuration: CLDC-1.0 MIDlet-Icon: /i.png MIDlet-Info-URL: http: //mini.opera.com/ MIDlet-Install-Notify: http: //mini.opera.com/n/6636Acereus_ru MIDlet-Vendor: Opera Software ASA MIDlet-Version: 3.0 MicroEdition-Profile: MIDP-2.0 MIDlet-Description: Opera Mini В menu.ml нужно записать так: Code <link type="java" javasuitename="Opera Mini" javasuitevendor="Opera Software ASA" javasuitepoint="Browser"/> Обязательно соблюдать все пробелы и заглавные буквы. В menu.ml должно быть записано абсолютно идентично тому, как записано в MANIFEST.MF. Теперь наш элемент запускает приложение . Иконки и название заменяются по правилам, которые я уже описал. А вот element id можно использовать любой, кроме тех, которые используются в меню (не должно быть двух одинаковых). Лучше всего назначать по названию приложения. Готовый элемент будет выглядеть так: Code <element id="Opera"> <label type="name"><text>Opera</text></label> <icon pos="unselected" source="file">icon1_unselected.png</icon> <icon pos="selected" source="file">icon1_selected.png</icon> <icon pos="shortcut" source="file">icon1_shortcut.png</icon> <link type="java" javasuitename="Opera Mini" javasuitevendor="Opera Software ASA" javasuitepoint="Browser"/> </element> Теперь вы уже можете менять структуру меню (создавать, удалять, перемещать элементы и меню), ставить свои иконки, изменять названия пунктов и можете запускать java-приложения из главного меню Расскажу еще о нескольких вещах, которые нужно знать. Не помешает знать В строке вида Code <menu id="Cyndi_Generic_Id"> имя телефона (в данном случае Cyndi) не обязательно должно соответствовать модели телефона. Меню будет работать в любом случае, но для удобства и из уважения к людям, которые будут пользоваться вашим меню, лучше всё-таки вписывать правильное имя. Так будет проще понять, для какого телефона предназначено меню. В строке Code <highlight>4</highlight> задаётся номер пункта, который будет "наведён курсор" при входе в меню. Счет начинается с 0. Такая строка применяется в меню 3х4 для того, чтобы сразу попадать в центр меню. По умолчанию (когда нет такой строки) выделяется первый пункт (номер 0). Такую строку можно использовать в любом меню, но, по-моему, это целесообразно только в 3х4 и именно со значением 4. Но в каких-то случаях наверно удобно будет назначить другой пункт. Я уже упоминал о вариантах отображения меню. В стандартном меню встречаются вот такие: Code <menu id="MainMenu" layout="DesktopTopMenuGFX2">> <menu id="Menu_Entertainment_Id"> <menu id="Messaging_UnifiedSettingsTabMenuId" layout="TabMenu"> Теперь опишу те, которые я пробовал ставить. DesktopTopMenuGFX1 – перезагружает телефон. DesktopTopMenuGFX2 – меню 3х4 (как главное меню). DesktopFullScreen – полноэкранное меню. Каждый пункт отображается на весь экран. TabMenu – меню вкладками (табами). Как в "Параметры". SingleRow – меню списком. В каждом пункте только одна строка (как в "Развлечения"). В меню.мл такой вид меню используется по умолчанию (layout="SingleRow" можно не писать). TwoRow – меню списком с двумя строчками в каждом пункте (как в "Сообщения/Входящие"). TwoRowLarge – то же самое, но всё крупнее. На экране помещается 3 пункта. TwoRowHighlight – списком как SingleRow, а при выделении, появляется вторая строка (как в контактах). DesktopSmall – меню с сеткой (как главное, но каждый пункт в отдельной клеточке). Стандартные иконки не помещаются. Смотрится не очень. DesktopMedium – то же самое, но крупнее. На экране помещается только 3х3. Приходится прокручивать DesktopLarge – ещё крупнее. На экране 2х2. Соответственно, ещё больше прокручивать. В MANIFEST.MF некоторых java-приложений в строке MIDlet-Name, MIDlet-Vendor или MIDlet-1 могут быть спецсимволы (&, #, @ и пр.). В menu.ml же таких символов быть не должно. Эта проблема решается правкой самого MANIFEST.MF. Для этого нужно блокнотом открыть файл и удалить «подозрительные» символы. Советую также удалить строку с размером файла. Это позволит избежать ошибки при подписывании приложения сертификатом. Напоминаю: Иконки и menu.ml заливаются в папку \TPA\PRESET\SYSTEM\MENU любым доступным способом. Взято с сайта walkman.in.ua
[/*_*/]
|