Как сделать мои приложения "скинами"?

Есть ли стандартный способ сделать мои приложения доступными для обложки?

Под "skinnable" я имею в виду способность приложения поддерживать несколько скинов.

Я не настроен на какую-либо конкретную платформу. Просто хочу знать, существуют ли какие-либо общие рекомендации по созданию скинов для приложений.

Похоже, что скин-веб-приложения относительно просты. Что относительно настольных приложений?

Ответ 1

Скины - это еще один уровень абстракции (YALOA!).

Если вы прочитали шаблон дизайна MVC, вы поймете многие из необходимых принципов.

Уровень презентации (или скин) должен выполнять только несколько действий:

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

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

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

Посмотрите, например, XUL и посмотрите, как это делается. Вы найдете, что многие проекты скиннинга используют XML для описания различных "лиц" на коже (он играет музыку или организует библиотеку для кожи MP3-плеера), а затем, где находится каждый элемент управления, и какие данные и методы должен быть присоединен к программе.

Это может показаться трудным, пока вы это не сделаете, тогда вы осознаете это так же, как и любой другой уровень абстракции, с которым вы раньше сталкивались (из программы с gotos, для управления структурами, функциями, структурами, классам и объектам, компиляторам JIT и т.д.).

Начальная кривая обучения не является тривиальной, но выполняйте несколько проектов, и вы найдете ее не сложно.

-Adam

Ответ 2

Сохраняйте все свои стили в отдельном файле (-ях) CSS

Держитесь подальше от любого встроенного стиля

Ответ 3

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

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

Color backgroundColor = Color.BLUE;

Стало бы что-то вроде:

Color backgroundColor = ResourceManager.getColor("form.background");

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

Ответ 4

Реализация зависит от платформы, но вот несколько общих кросс-платформенных соображений:

  • Хорошо иметь установленный общий макет, в который визуальные элементы могут быть "подключены". Сложнее (но все же возможно) поддерживать совершенно разные общие макеты с помощью скининга.
  • Разработайте хорошо документированное соглашение об именах для активов (изображения, фрагменты HTML и т.д.), которые содержат скин.
  • Создайте чистый способ "открыть" существующие скины и добавить новые. Например: Winamp использует формат ZIP файла для хранения всех изображений для своих скинов. Все файлы скинов находятся в известной папке из папки приложения.
  • Имейте в виду проблемы масштабирования. Не все используют одинаковое разрешение экрана.
  • Вы собираетесь разрешить разработку сторонних скинов? Это повлияет на ваш дизайн.
  • Архитектурно модель Model-View-Controller поддается скинированию.

Это всего лишь несколько вещей, о которых нужно знать. Ваша реализация будет варьироваться между веб-и живым клиентом и вашими требованиями к характеристикам. НТН.

Ответ 5

Основной принцип заключается в том, что CSS используется на веб-страницах.

Вместо того, чтобы указывать форматирование (цвет/шрифт/макет [в некоторой степени]) вашего контента, вы просто описываете, какой контент он имеет.

Чтобы привести веб-пример, в содержании страницы блога вы можете отметить разные разделы как:

  • Название
  • Запись в блоге
  • Область архива

и др.

Ввод может состоять из подразделов severl, таких как "заголовок", "тело" и "метка времени".

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

Тогда скинирование и редактирование вашего дизайна становится намного проще. Вы просто создаете другую таблицу стилей и подстраиваете значения к своему тепловому содержанию.

Edit:

Одним из ключевых моментов для запоминания является различие между общим стилем (например, классами в CSS) и конкретным стилем (например, ID в CSS). Вы хотите уникально идентифицировать некоторые элементы в своем макете, такие как заголовок, как единый идентифицируемый элемент, к которому можно применить уникальный стиль, тогда как другие элементы (такие как запись в блоге или поле в представление базы данных) все хотят иметь один и тот же стиль.

Ответ 6

Это различно для каждой платформы/технологии.

Для WPF взгляните на то, что Джош Смит называет структурным скинированием: http://www.codeproject.com/KB/WPF/podder2.aspx

Ответ 7

Это должно быть относительно легко, выполните следующие действия:

  • Удалите все стили для всего веб-приложения или веб-сайта.
  • Используйте css, чтобы изменить способ отображения вашего приложения.

Для получения дополнительной информации посетите css zen garden для идей.

Ответ 8

Вы не должны. Или, по крайней мере, вы должны спросить себя, действительно ли это правильное решение.

Skinning нарушает принципы разработки пользовательского интерфейса. Это "jars" пользователя, потому что ваше скин-приложение работает и выглядит совершенно иначе, чем все другие приложения, которые они используют. Такие вещи, как сочетания клавиш командной строки, не будут согласованы, и они потеряют производительность. Он будет менее ограниченным, потому что экранные читатели будут усложнять его понимание.

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

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

Ответ 9

В зависимости от того, насколько глубоко вы хотите копать, вы можете использовать фреймворк форматирования (например, Java PLAF, веб-CSS) или полностью развязанную архитектуру с несколькими уровнями.

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

Ответ 10

Похоже, что большинство людей здесь ссылаются на CSS, как на свою единственную скинирующую опцию. Windows Media Player (и Winamp, AFAIR) используют XML, а также изображения (если необходимо) для определения скина.

Ссылки на XML-ссылки, события и т.д. и обрабатывают, как все выглядит и реагирует. Я не уверен, как они справляются с обратным концом, но загрузка данного скина действительно так же просто, как поиск подходящего файла XML, загрузка изображений, а затем размещение их там, где им нужно идти.

XML также дает вам больший контроль над тем, что вы можете сделать (т.е. создавать новые компоненты, изменять размеры компонентов и т.д.).

XML в сочетании с CSS может дать замечательные результаты для механизма скинов рабочего стола или веб-приложения.