Делаем меню собственными руками - Инструкции и мануалы - Важная информация - Форум

Главная  Форум   Файлы    Чат   Загрузить файл   Поиск    RSS
English




[ Новые сообщения · Участники · Правила форума · Поиск ]
Страница 1 из 11
Форум » Важная информация » Инструкции и мануалы » Делаем меню собственными руками (Редактируем menu.ml)
Делаем меню собственными руками
HELLdozER
Дата: Четверг, 15.05.2008, 17:41Пост # 1
Пользователь


Группа: Эльфмейкер
Сообщений: 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
</element>

Часть пунктов главного меню представляют собой элементы, а остальные – подменю. Подменю, как и главное меню, содержат элементы и подменю.
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-приложение, не составит особого труда. Об этом я расскажу ниже с подробным описанием.
С добавлением новых меню (подменю) тоже нет никаких проблем. Структуру записи я приводил чуть выше. Сначала описывается элемент (как элемент меню более высокого уровня) со своим названием и иконкой (если нужно). Вместо строки

Code
<link type=...
записывается меню с названием (совпадает с элементом) и вложенными элементами. При этом 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


    [/*_*/]
  •  
    Форум » Важная информация » Инструкции и мануалы » Делаем меню собственными руками (Редактируем menu.ml)
    Страница 1 из 11
    Поиск: