Главная » Хабрахабр » KivyMD — жизнь продолжается

KivyMD — жизнь продолжается

Приветствую!
Сегодня мы поговорим о UI на Android в приложениях, написанных с использованием фреймворка для кроссплатформенной разработки Kivy. Возможно, вы не знали об этом, но для Kivy сущестсвует библиотека KivyMD, которая предоставляет для ваших программ виджеты в стиле Material Design. К сожалению, ничего подобного не существует под платформы iOS. Более того, KivyMD, судя по всему, оставлена своим создателем, так как последний коммит в репе был около года назад. Что делать и как с этим жить, читайте далее...

Изредка посещая официальный репозиторий KivyMD, я с грустью обнаружил, что в нем ничего не меняется и менятся не собирается:

Но с недавних пор обнаружил, что все большую часть реализованных мною модулей я таскаю из проекта в проект, что жутко не удобно. В своих Kivy проектах я могу реализовать любой UI, что, собственно, я и делаю. Однако все равно всем этим не удобно делиться, управлять и использовать, потому что таких модулей становится все больше. Некоторая чать этих решений выложена в виде отдельных репозиториев на GitHub. Теперь форк этой библиотеки находится здесь Решение было принято относительно недавно: KivyMD, как Open Source проект, переходит под мое крыло.

Например, виджет MDDropDownMenu был лишен функции скроллинга и выбора пункта. Я пофиксил ошибки, которыми страдали некоторые выджеты. Теперь это выглядит так:

Помимо уже существующих MDFlatButton, MDRaisedButton, MDIconButton MDFloatingActioButton… Помимо кучи других исправлений, больших и не очень, были добавлены новые виджеты и контроллы.

… я реализовал ряд контроллов: MDRectangleFlatButton, MDRectangleFlatIconButton, MDRoundFlatIconButton, MDRoundFlatButton, MDFillRoundFlatButton, которых явно не доставало в комплекте:

Использование новых, описанных выше контроллов, в вашей разметке будет выглядеть так:
Также я стараюсь максимально упростить работу с KivyMD.

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"

Недавно в моей группе ВКонтакте был добавлен пост, в котором человек просил помощи с реализацией карточки контакта:

Приветствую!
Вопрос про Layout.
Делаю карточку контакта и не могу подобрать тип Layout, чтобы

а) не растягивался, а элементы располагались один за другим по вертикали

б) не было гигантских промежутков между элементами

Скрин формы и код kv прилагаю.
Видно, что после первого блока с аватаром есть промежуток, после текстовых блоков тоже. Про пробовал BoxLayout, StackLayout — почему-то промежутки между элементами. Как исправить, чтобы везде были равные промежутки, чтобы все элементы были типа valign: True?

Вот, что получалось:

Код я поправил, а заодно добавил в KivyMD виджет карточки — MDUserAnimationCard, которая реализует вот такое поведение:

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

Далее просто добавляем класс созданного вами контента в 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 перекочевала в KivyMD:

Использование данного виджета также было упрощено до максимума:

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=, callback=set_my_language))

Реализован ряд готовых для использовани карточек, например, для списка постов и пр.:

Пример использования:

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))

Прогресс загрузки контента с сервера, простой файл менеджер, виджет PullToUpdate:

Полная видео демонстрация виджетов библиотеки:

А очень хотелось бы приспособить KivyMD для генерации UI, который выглядел бы родным и на iOS. Возвращаясь к началу, скажу, что все это хорошо только для Android, потому что, естественно, Material Design мы не можем использовать в приложениях для платформы iOS. Единственная загвоздка — я не имею устройства iOS, поэтому, как выглядит там UI, анимация и прочий дизайн, не знаю. Технически нет преград для выполнения этой задачи. Хватит, например, того, что на данный момент уже реализовано в KivyMD, но только под яблоко. Конечно, существуют гайды по дизайну для iOS, но гайды гайдами, а я был рад, если бы заинтересованый в развитии библиотеки KivyMD человек прислал несколько десятков скриншотов и анимаций эталонного дизайна приложений под платформой iOS. За сим разрешите откланятся, стучите в личку, надеюсь, как всегда, был не бесполезен.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

[Перевод] Учёные вырастили универсальные стволовые клетки при помощи CRISPR инженерии

Клетки сердечной мышцы человека, полученные из новых универсальных стволовых клеток Учёные из University of California San Francisco впервые вырастили универсальные стволовые клетки, используя технологию редактирования генов CRISPR в целях получения плюрипотентных стволовых клеток, которые могут быть трансплантированы любому пациенту, не ...

[Перевод] Шесть историй, как код переписали с нуля

Новый взгляд на извечный вопрос: следует ли переписывать приложение с нуля или это «самая худшая стратегическая ошибка, которую может сделать разработчик программного обеспечения»? Оказывается, при работе со зрелой кодовой базой есть более двух вариантов ответа. «Исходный код словно заржавел!» — Джоэл ...