2009-02-05 14 views
11

¿Hay alguna manera estándar de hacer que mis aplicaciones sean personalizables?¿Cómo hacer que mis aplicaciones sean "personalizables"?

Por "skinnable" me refiero a la capacidad de la aplicación para admitir varias máscaras.

No estoy apuntando a ninguna plataforma en particular aquí. Solo quiero saber si existen pautas generales para hacer que las aplicaciones sean personalizables.

Parece que aplicar aplicaciones web es relativamente fácil. ¿Qué pasa con las aplicaciones de escritorio?

Respuesta

8

Las pieles son solo otro nivel de abstracción (YALOA!).

Si lee en el MVC design pattern, entonces comprenderá muchos de los principios necesarios.

La capa de presentación (o piel) sólo hay que hacer algunas cosas:

  • muestran la interfaz de
  • Cuando se toman ciertas acciones (clic, introducir texto en una caja, etc.), entonces se desencadena
  • acciones
  • tiene que recibir avisos desde el modelo y el controlador cuando se van a cambiar

En un programa normal de esta abstracción se hace por tener código que conecta los cuadros de texto para los métodos y objetos con los que están relacionados y que tienen un código que cambia la visualización en función de los comandos del programa.

Si desea agregar skinning, necesita tomar esa habilidad y hacerlo de modo que se pueda hacer sin compilar nuevamente el código.

Consulte, por ejemplo, XUL y vea cómo se hace allí. Encontrará que muchos proyectos de skinning utilizan XML para describir las distintas "caras" de la máscara (reproducir música u organizar la biblioteca para un aspecto de reproductor de MP3) y, luego, dónde se encuentra cada control y qué datos y métodos se debe adjuntar en el programa.

Puede parecer difícil hasta que lo hagas, entonces te das cuenta de que es como cualquier otro nivel de abstracción que hayas tratado antes (desde un programa con gotos, para controlar estructuras, funciones, estructuras, clases y objetos, compiladores JIT, etc.).

La curva de aprendizaje inicial no es trivial, pero haga algunos proyectos y verá que no es difícil.

-Adán

5

Guardar los estilos en un archivo CSS independiente (s)

Manténgase alejado de cualquier estilo en línea

+2

Sucintamente puesto:) / – xan

1

El principio básico es el utilizado por CSS en páginas web.

En lugar de especificar el formato (color/fuente/diseño [hasta cierto punto]) de su contenido, simplemente describa qué tipo de contenido es.

Para dar un ejemplo web, de los contenidos de una página de blog que podrían marcar diferentes secciones como un:

  1. Título
  2. entrada de blog
  3. Archivo Panel

etc.

La entrada puede estar compuesta de varias subsecciones como "encabezado", "cuerpo" y "marca de tiempo".

Luego, en otro lugar tiene una hoja de estilo que especifica todas las propiedades de cada tipo de elemento, tamaño, alineación, color, fondo, fuente, etc. Al representar la página o dibujar/inicializar los componentes en su UI siempre consulte hoja de estilos actual para buscar estas propiedades.

Luego, desollar y, de hecho, editar su diseño, se vuelve MUCHO más fácil. Puede crear una hoja de estilo diferente y ajustar los valores al contenido de su calor.

Editar:

Un punto clave a recordar es la diferencia entre un estilo general (como en las clases CSS) y un estilo específico (como identificaciones en CSS). Desea poder identificar de forma única algunos elementos en su diseño, como el título, como un elemento único identificable al que puede aplicar un estilo único, mientras que otros elementos (como una entrada en un blog o un campo en una vista de base de datos) todos querrán tener el mismo estilo.

3

Realmente depende de cómo "personalizable" desea que sus aplicaciones sean. Permitir que el usuario configure colores e imágenes será mucho más fácil que dejarlos ocultar/eliminar componentes o incluso escribir sus propios componentes.

En la mayoría de los casos, probablemente pueda salirse con la suya escribiendo algún tipo de Proveedor de recursos que sirva colores e imágenes en lugar de codificarlos en su archivo fuente.Por lo tanto, la siguiente:

Color backgroundColor = Color.BLUE; 

se convertiría en algo como:

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

Entonces, todo lo que tiene que hacer es cambiar las asignaciones en su clase ResourceManager y todos los clientes serán consistentes. Si desea hacer esto en tiempo real, cambiar cualquiera de las asignaciones de ResourceManager probablemente enviará un evento a sus clientes y les notificará que algo ha cambiado. Luego, los clientes pueden volver a dibujar sus componentes si así lo desean.

0

Según la profundidad que desee cavar, puede optar por utilizar un marco de "formateo" (por ejemplo, PLAF de Java, CSS de la web) o una arquitectura de niveles múltiples completamente desacoplada.

Si desea definir una máscara conectable, debe tener en cuenta eso desde el principio. La capa de presentación sabe nada sobre la lógica de negocio pero es API y viceversa.

3

Implementación varía según la plataforma, pero aquí hay algunas consideraciones generales de plataforma cruzada:

  • Es bueno tener un diseño general establecido en la que los elementos visuales pueden ser "enchufados. " Es más difícil (pero aún posible) admitir diseños generales completamente diferentes mediante el desollado.
  • Desarrolle una convención de nomenclatura bien documentada para los activos (imágenes, fragmentos de HTML, etc.) que componen una máscara.
  • Diseñe una forma limpia de "descubrir" las máscaras existentes y agregar nuevas. Por ejemplo: Winamp usa un formato de archivo ZIP para almacenar todas las imágenes de sus máscaras. Todos los archivos de máscara residen en una carpeta conocida de la carpeta de la aplicación.
  • Tenga en cuenta los problemas de escala. No todos usan la misma resolución de pantalla.
  • ¿Va a permitir el desarrollo de la piel de terceros? Esto afectará tu diseño.
  • Arquitectónicamente, el patrón Modelo-Vista-Controlador se presta para desollar.

Estas son solo algunas de las cosas a tener en cuenta. Su implementación variará entre la web y el cliente gordo, y según los requisitos de su función. HTH.

1

Esto debería ser relativamente fácil, siga estos pasos:

  1. eliminar todas la estilismo para su aplicación web completo o sitio web
  2. utilizar CSS para cambiar la manera en que su aplicación se ve.

Para obtener más información, visite css zen garden para obtener ideas.

0

Parece que la mayoría de las personas aquí se refieren a CSS, como si fuera la única opción de diseño. Windows Media Player (y Winamp, AFAIR) usan XML así como también imágenes (si es necesario) para definir un aspecto.

El XML hace referencia a ganchos, eventos, etc. y maneja cómo se ven las cosas y cómo reaccionan. No estoy seguro de cómo manejan la parte de atrás, pero cargar una máscara determinada es tan simple como ubicar el archivo XML apropiado, cargar las imágenes y colocarlas donde necesitan ir.

XML también le brinda un mayor control sobre lo que puede hacer (es decir, crear nuevos componentes, cambiar el tamaño de los componentes, etc.).

XML combinado con CSS podría dar resultados maravillosos para un motor de desarrollo de una aplicación de escritorio o web.

1

No deberías. O al menos deberías preguntarte si realmente es la decisión correcta.

El despellejamiento rompe las pautas de diseño de la UI. "Acelera" al usuario porque su aplicación skinned funciona y se ve totalmente diferente de todas las demás aplicaciones que usa. Cosas como las teclas de método abreviado de comando no serán consistentes y perderán productividad. Será menos accesible para discapacitados porque a los lectores de pantalla les será más difícil entenderlo.

Hay un montón de razones para NO pelar. Si solo desea que su aplicación sea visualmente distinta, esa es una razón deficiente en mi opinión. Harás que tu aplicación sea más difícil de usar y menos probable que las personas vayan más allá del período de prueba.

Habiendo dicho todo eso, hay algunas clases de aplicaciones en las que básicamente se espera el despellejamiento, como los reproductores de medios y los juegos imersive de pantalla completa. Pero si su aplicación no está en una clase en la que el skinning es obligatorio, consideraría seriamente encontrar otras formas de mejorar su aplicación.

Cuestiones relacionadas