KivyMD - la vida continúa


Saludos!

Hoy hablaremos sobre la interfaz de usuario en Android en aplicaciones escritas usando el marco de desarrollo multiplataforma de Kivy. Es posible que no lo haya sabido, pero para Kivy existe la biblioteca KivyMD, que proporciona widgets de estilo de diseño de materiales para sus programas. Desafortunadamente, nada de eso existe bajo la plataforma iOS. Además, KivyMD, aparentemente, fue abandonado por su creador, ya que el último commit en el nabo fue hace aproximadamente un año. Qué hacer y cómo vivir con él, sigue leyendo ...

Ocasionalmente, al visitar el repositorio oficial de KivyMD , lamentablemente descubrí que nada estaba cambiando y que no iba a cambiar:



En mis proyectos de Kivy, puedo implementar cualquier interfaz de usuario, lo que, de hecho, hago. Pero recientemente descubrí que estoy arrastrando una parte cada vez mayor de los módulos que he implementado de un proyecto a otro, lo cual es terriblemente inconveniente. Algunas de estas soluciones se publican como repositorios separados en GitHub. Sin embargo, todavía no es conveniente compartir, administrar y usar todo esto, porque cada vez hay más módulos de este tipo. La decisión se tomó relativamente recientemente: KivyMD, como un proyecto de código abierto, queda bajo mi ala. Ahora un tenedor de esta biblioteca está aquí .

Arregle los errores que sufrían algunos widgets. Por ejemplo, el widget MDDropDownMenu se vio privado de la función de desplazamiento y selección de un elemento. Ahora se ve así:


Además de un montón de otras correcciones, grandes y no tan grandes, se agregaron nuevos widgets y controles. Además del MDFlatButton existente , MDRaisedButton, MDIconButton MDFloatingActioButton ...


... Implementé varios controles: MDRectangleFlatButton, MDRectangleFlatIconButton, MDRoundFlatIconButton, MDRoundFlatButton, MDFillRoundFlatButton , que claramente faltaban en el kit:


También trato de simplificar el trabajo con KivyMD tanto como sea posible. El uso de los nuevos controles descritos anteriormente en su marcado se verá así:

MDRectangleFlatButton: text: "MDRectangleFlatButton" MDRectangleFlatIconButton: text: "I love Python" icon: "language-python" MDRoundFlatButton: text: "I love Python" icon: "language-python" MDRoundFlatIconButton: text: "I love Python" icon: "language-python" MDFillRoundFlatButton: text: "I love Python" 

Recientemente, se agregó una publicación a mi grupo VKontakte en el que una persona solicitó ayuda con la implementación de una tarjeta de contacto:
Saludos!

Pregunta sobre diseño.

Estoy haciendo una tarjeta de contacto y no puedo elegir el tipo de diseño para

a) no se estiró, y los elementos se organizaron uno tras otro verticalmente

b) no hubo brechas gigantes entre los elementos

Acerca de probar BoxLayout, StackLayout, por alguna razón, las brechas entre los elementos. Adjunto la pantalla del formulario y el código kv.

Se puede ver que después del primer bloque con un avatar hay una brecha, después de los bloques de texto también. ¿Cómo arreglarlo para que haya espacios iguales en todas partes, para que todos los elementos sean de tipo valign: True?
Aquí está el resultado:


Corregí el código y, al mismo tiempo, agregué un widget de tarjeta a KivyMD - MDUserAnimationCard , que implementa este comportamiento:


Todo lo que crea es contenido que se mostrará debajo de la tarjeta del usuario. La función de desplazamiento para el contenido se aplicará automáticamente si su altura excede el espacio restante en la pantalla:


Luego, simplemente agregue la clase del contenido que creó a la MDUserAnimationCard :

  def show_user_card(self): user_animation_card = MDUserAnimationCard( user_name="Lion Lion", path_to_avatar="./assets/african-lion-951778_1280.jpg", callback=main_back_callback) user_animation_card.box_content.add_widget(ContentForAnimCard()) user_animation_card.open() 

MDStackFloatingButtons, ya conocido por el artículo , migró a KivyMD:


El uso de este widget también se ha simplificado al máximo:

  def example_add_stack_floating_buttons(self): def set_my_language(instance_button): toast(instance_button.icon) screen = self.main_widget.ids.scr_mngr.get_screen('stack buttons') screen.add_widget(MDStackFloatingButtons( icon='lead-pencil', floating_data={ 'Python': 'language-python', 'Php': 'language-php', 'C++': 'language-cpp'}, callback=set_my_language)) 

Se han implementado varias tarjetas listas para usar, por ejemplo, para una lista de publicaciones, etc.


Ejemplo de uso:


 MDCardPost(text_post='Card with text', swipe=True, callback=callback)) 


 menu_items = [ {'viewclass': 'MDMenuItem', 'text': 'Example item %d' % i, 'callback': self.callback_for_menu_items} for i in range(2) ] MDCardPost( right_menu=menu_items, swipe=True, callback=callback text_post='Card with a button to open the menu MDDropDown')) 


 MDCardPost( likes_stars=True, callback=callback, swipe=True, text_post='Card with asterisks for voting.')) 


 buttons = ['facebook', 'vk', 'twitter'] text_post = \ "This is my favorite cat. He's only six months " "old. He loves milk and steals sausages :) " "And he likes to play in the garden." MDCardPost( source="./assets/kitten-1049129_1280.jpg", tile_text="Little Baby", tile_font_style="Headline", text_post=text_post, with_image=True, swipe=True, callback=callback, buttons=buttons)) 

Progreso de la descarga de contenido del servidor, un administrador de archivos simple, widget PullToUpdate:


Video completo de demostración de widgets de la biblioteca:


Volviendo al principio, diré que todo esto es bueno solo para Android, porque, por supuesto, no podemos usar Material Design en aplicaciones para la plataforma iOS. Y me gustaría mucho adaptar KivyMD para generar una interfaz de usuario que también se vea nativa en iOS. Técnicamente, no hay barreras para esta tarea. El único inconveniente es que no tengo un dispositivo iOS, así que no sé cómo se ve la interfaz de usuario, la animación y otros diseños. Por supuesto, hay guías de diseño para iOS, pero las guías son guías, y me alegré si una persona interesada en desarrollar la biblioteca KivyMD envió docenas de capturas de pantalla y animaciones del diseño de referencia de aplicaciones bajo la plataforma iOS. Suficiente, por ejemplo, de lo que ya está implementado actualmente en KivyMD, pero solo para una manzana. Para sim déjame despedirme, llamar a la tarde, espero, como siempre, no fue inútil.

Source: https://habr.com/ru/post/es422721/


All Articles