网站首页 > 开源技术 正文
我们知道,苹果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。
(汇报完毕,感谢收看,收藏+点赞!)
- 上一篇: 码农必看:常见源代码混淆技术详解
- 下一篇: 超劲爆!iOS 18 PC 奶牛工具更新,实现绕过设置
猜你喜欢
- 2025-04-08 iOS 17.2 SDK代码确认古尔曼爆料:免开箱更新苹果iPhone系统
- 2025-04-08 苹果Xcode 16首个Beta版发布,AI代码补全最少需16GB内存
- 2025-04-08 苹果发布iOS/iPadOS 18.4及macOS 15.4 Sequoia第2个公测版
- 2025-04-08 告别千篇一律,iOS 16越狱插件K2geIsland玩转iPhone灵动岛
- 2025-04-08 macOS版ChatGPT集成IDE代码编辑功能 开发者效率革新
- 2025-04-08 开发者深挖苹果官方代码,发现A19和M5系列芯片踪迹
- 2025-04-08 使用CyberRT写第一个代码(编写第一个c程序)
- 2025-04-08 苹果App上架保姆级指南(2)—制作证书+描述文件测试/上架双版本
- 2025-04-08 苹果手机序列号查询方法-四种官方查询方法分享
- 2025-04-08 超劲爆!iOS 18 PC 奶牛工具更新,实现绕过设置
你 发表评论:
欢迎- 最近发表
-
- 6月游戏推荐(二)(6月份新出的游戏)
- 37【源码】数据可视化:基于 Echarts + Python 动态实时大屏
- Kubernetes Kube-Proxy 组件 IPVS 模式工作原理及常用故障排查
- 《茶余饭后顶级英文歌曲精选》(茶余饭后的经典句子)
- rainx和MediaTek携手推出101产品生态,为5G FWA提供创新
- KAPITAL 推出蓝染风格 Aloha Shirt 系列
- 欧美经典怀旧歌曲Free loop-管不住的音符
- Mac 下php5.3-7.0的二进制包 ── PHP-OS
- 如何把一个Python应用程序装进Docker
- 为何推荐 JsonTree.js 做 JSON 可视化?
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)