百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Flet 开发 App ,相同代码 自动适配 iOS 和 Android ,呈现不同外观UI

suiw9 2025-04-06 20:46 5 浏览 0 评论

我们知道,苹果iOS 和 安卓Android 的 UI 风格是不同的,各有特色。而 Flet 开发的App 是可以多平台运行的,如何让 Flet 开发的 App ,在苹果手机上运行时是“iOS风格”,在安卓手机上运行时是“Android风格”呢?

Flet 框架早就考虑这个问题了 —— Flet 框架允许您开发自适应应用,您可以拥有一个单一的代码库,但在不同设备平台上会呈现不同的外观。今天,我们就分享一下 Flet 的 “自适应应用”开发技术。

Material 和 Cupertino 控件。

大多数 Flet 控件基于Material 设计(安卓风格),但Flet 还有一些 iOS 风格的控件,称为 Cupertino 控件。

大多数情况下,只需要 一句 page.adaptive = True,就可以让您的应用在 iOS 和 Android 设备上看起来都很出色。

import flet as ft
def main(page):
    page.adaptive = True
    ....

Cupertino 控件通常具有一个对应的 Material 控件,该控件具有 adaptive 属性,默认情况下为 False。当使用设置了 adaptive 属性为 True 的 Material 控件时,将根据平台创建不同的控件,例如:

ft.Checkbox(adaptive=True, value=True, label="Adaptive Checkbox")

Flet 会检查 page.platform 属性的值,如果是 ft.PagePlatform.IOS 或 ft.PagePlatform.MACOS,则会创建 Cupertino 控件;在所有其他情况下,都会创建 Material 控件。

adaptive 属性可以为单个控件或包含控件(如 Row、Column 或任何具有 content 或 controls 属性的控件)设置。如果包含控件是自适应的,则所有子控件也将是自适应的,除非为子控件显式设置了 adaptive 属性为 False。

以下是自适应 Material 控件及其对应的 Cupertino 控件列表:

自定义自适应控件

虽然 Flet 提供了一些带有 adaptive 属性的控件,这些控件会自动适应平台,但在某些情况下,您可能需要更具体的自适应 UI 表现,例如,根据平台使用不同的图标、背景颜色、内边距等。

通过 Flet,您可以在 Python 中创建自己的可重用自定义控件,这些控件将继承自 Flet 控件并实现您需要的特定属性。在下面的示例中,我们创建了一个新的
AdaptiveNavigationDestination 控件,它将在 iOS 和 Android 上显示不同的图标:

class AdaptiveNavigationDestination(ft.NavigationDestination):
    def __init__(self, ios_icon, android_icon, label):
        super().__init__()
        self._ios_icon = ios_icon
        self._android_icon = android_icon
        self.label = label

    def build(self):
        # 我们可以在 build 方法中检查平台,因为此时 self.page 已知
        self.icon = (
            self._ios_icon
            if self.page.platform == ft.PagePlatform.IOS
            or self.page.platform == ft.PagePlatform.MACOS
            else self._android_icon
        )

我们将在 NavigationBar 中使用
AdaptiveNavigationDestination:

import flet as ft
from adaptive_navigation_destination import AdaptiveNavigationBarDestination

def main(page):

    page.adaptive = True

    page.navigation_bar = ft.NavigationBar(
        selected_index=2,
        destinations=[
            AdaptiveNavigationBarDestination(
                ios_icon=ft.cupertino_icons.PERSON_3_FILL,
                android_icon=ft.Icons.PERSON,
                label="Contacts",
            ),
            AdaptiveNavigationBarDestination(
                ios_icon=ft.cupertino_icons.CHAT_BUBBLE_2,
                android_icon=ft.Icons.CHAT,
                label="Chats",
            ),
            AdaptiveNavigationBarDestination(
                ios_icon=ft.cupertino_icons.SETTINGS,
                android_icon=ft.Icons.SETTINGS,
                label="Settings",
            ),
        ],
    )

    page.update()


ft.app(target=main)

现在,NavigationBar 及其中的图标在 Android 和 iOS 上将看起来不同:

此外,您可以利用可重用控件方法不仅根据 platform 属性适应应用,还可以根据 page.web 属性有不同的 UI 表现,以区分应用是否在浏览器中运行,甚至可以结合 platform 和 web 属性为您的 MacOS 或 Windows 桌面应用提供特定的 UI。

(汇报完毕,感谢收看,收藏+点赞!)

#python##flet# #编程# #Android# #ios# #UI设计#

相关推荐

C和Java效率对比试验和编译器优化影响

首先得承认这不是一个好例子,逻辑过于简单,受环境的干扰也特别大。不能作为评价一门语言综合效率的用例,仅仅是基于个人兴趣的小实验的记录。C语言版本1#include...

Java 代码执行原理(java代码是如何执行的)

专注于Java领域优质技术,欢迎关注作者|Alan来源|cnblogs.com/wangjiming/p/10455993.html对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者...

JVM底层原理之如何选用C1、C2编译器?它们有什么区别?

JVM底层原理之如何选用C1、C2编译器?它们有什么区别?关于JVM底层的C1、C2编译器,很多人不知道它的具体概念,本篇我们详细的讲解一下。...

阿里巴巴Java性能调优实战:深入JVM即时编译器JIT,优化Java编译

深入JVM即时编译器JIT,优化Java编译然而许多Java开发人员对JIT编译器的了解并不多,不深挖其工作原理,也不深究如何检测应用程序的即时编译情况,线上发生问题后很难做到从容应对。类编...

JPHP--一款基于JVM的新PHP编译器(php 编译)

JPHP是一款基于Java语言编写的PHP编译器以及新运行时库,支持多线程、unicode字符串(UTF-16)、GUI、Android开发以及嵌入式Web应用。JPHP可以将PHP源码编译成JVM字...

Java:开源Java编译器的下一个前沿——实时编译即服务

  对于Java开发人员来说,实时(JIT)编译器是提高性能的关键。然而,在容器世界中,由于CPU和内存消耗的限制,性能的提高经常被抵消。为了帮助解决这个问题,EclipseOpenJ9JVM提供...

45张图带你从入门到精通学习WireShark

你好,这里是网络技术联盟站。...

Linux(麒麟)下如果使用wireshark抓包工具

Linux(麒麟)下如果使用wireshark抓包工具一、安装wireshark1、通过命令将麒麟系统iso文件挂载到/mnt2、进入到/mnt/KYLIN3、通过yuminstall安装两个安装...

强烈推荐APP破解常用工具集合(破解软件推荐)

抓包...

wireshark长时间抓包分多个文件(wireshark 长时间抓包)

http://www.cnblogs.com/wangqiguo/p/5068602.html推荐理由一般使用wireshark不需要长时间抓包的,但是有时候遇到网络通信中非常棘手的问题,例如一个小...

wireshark抓包教程详解(wireshark抓包全集)

如果本文对你有帮助,欢迎关注、讨论、点赞、收藏、转发给朋友,让我有持续创作的动力,让我们一起相互学习共同进步。...

收藏!Wireshark最好用的抓包命令都在这了!

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友。在现在,网络流量的监控与分析变得尤为重要。无论是排查网络故障、优化性能还是确保网络安全,都需要精...

Wireshark快捷键大全,记住后抓包效率杠杠的

不管你是网络管理员、程序员还是安全工程师,Wireshark都是你的得力助手,用来排查问题、分析流量,甚至学习网络协议。...

渗透测试抓包工具-wireshark(渗透测试脚本)

wireshark功能介绍1.抓包嗅探协议分析2.安全专家必备的技能...

wireshark网络抓包详解(利用wireshark抓包工具抓取网络数据包)

一、简介...

取消回复欢迎 发表评论: