Jetpack Compose中使用Android View
使用AndroidView创建日历

@Composable
fun AndroidViewPage() {AndroidView(factory = {CalendarView(it)},modifier = Modifier.fillMaxWidth(),update = {it.setOnDateChangeListener { view, year, month, day ->Toast.makeText(view.context, "${year}年${month + 1}月${day}日",Toast.LENGTH_LONG).show()}})
}
使用Android原生视图需要引入AndroidView组件,factory属性中加入CalendarView日历视图组件,update属性中设置日历的点击事件。
使用WebView

@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter", "SetJavaScriptEnabled")
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun WebViewPage() {val webView = rememberWebViewWithLifecycle()Scaffold(content = {AndroidView(factory = {webView}, modifier = Modifier.fillMaxSize().background(Color.Red),update = { webView ->// 设置支持JavaScriptval webSettings = webView.settingswebSettings.javaScriptEnabled = truewebView.loadUrl("https://www.baidu.com")})})
}@Composable
fun rememberWebViewWithLifecycle(): WebView {val context = LocalContext.currentval webView = remember {WebView(context)}val lifecycleObserver = rememberWebViewLifecycleObserver(webView)val lifecycle = LocalLifecycleOwner.current.lifecycleDisposableEffect(lifecycle) {lifecycle.addObserver(lifecycleObserver)onDispose {lifecycle.removeObserver(lifecycleObserver)}}return webView
}@Composable
private fun rememberWebViewLifecycleObserver(webView: WebView): LifecycleEventObserver =remember(webView) {LifecycleEventObserver { _, event ->when (event) {Lifecycle.Event.ON_RESUME -> webView.onResume()Lifecycle.Event.ON_PAUSE -> webView.onPause()Lifecycle.Event.ON_DESTROY -> webView.destroy()else -> Log.e("WebView", event.name)}}}
使用Android布局

使用Android布局用到了Viewbinding,这里需要引入ui-viewbinding库
implementation "androidx.compose.ui:ui-viewbinding:1.5.0-alpha01"
这是android_view.xml原生页面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><EditTextandroid:id="@+id/editName"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="30dp"android:hint="name" /><EditTextandroid:id="@+id/editPassword"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginHorizontal="30dp"android:hint="password"android:inputType="textPassword" /><Buttonandroid:id="@+id/btnLogin"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:textAllCaps="false"android:layout_marginTop="30dp"android:text="Login" />
</LinearLayout>
Compose中使用原生布局并操作
@Composable
fun AndroidViewBindingPage() {val context = LocalContext.currentAndroidViewBinding(factory = { inflate, parent, attachToParent ->AndroidViewBinding.inflate(inflate, parent, attachToParent)},modifier = Modifier.fillMaxSize(),update = {btnLogin.setOnClickListener {val name = editName.text.toString().trim()val password = editPassword.text.toString().trim()toLogin(context, name, password)}})
}fun toLogin(context: Context, name: String, password: String) {if (name.isEmpty() || password.isEmpty()) {Toast.makeText(context, "请输入完整信息", Toast.LENGTH_SHORT).show()return}Toast.makeText(context, "登录信息为:name:${name}, password:${password}", Toast.LENGTH_SHORT).show()
}
引用非常简单,只要通过ViewBinding组件在factory属性中添加页面的引用就行,update属性下对页面进行操作逻辑。
相关文章:
Jetpack Compose中使用Android View
使用AndroidView创建日历 Composable fun AndroidViewPage() {AndroidView(factory {CalendarView(it)},modifier Modifier.fillMaxWidth(),update {it.setOnDateChangeListener { view, year, month, day ->Toast.makeText(view.context, "${year}年${month 1}月$…...
《MySQL》事务篇
事务特性 ACID Atomicity原子性:事务中的操作要么全部完成,要么全部失败。 Consistency一致性:事务操作前后,数据满足完整性约束。 Isolation隔离性:允许并发执行事务,每个事务都有自己的数据空间&…...
高阶组件和高阶函数是什么
高阶组件和高阶函数都是在函数式编程中常见的概念。 高阶组件(Higher-Order Component, HOC)是一种函数,接受一个组件作为参数,并返回一个新的组件。它可以用来增强现有的组件,给它添加额外的功能或属性。高阶组件在R…...
初步认识API安全
一、认识API 1. 什么是API API(应用程序接口):是一种软件中介,它允许两个不相关的应用程序相互通信。它就像一座桥梁,从一个程序接收请求或消息,然后将其传递给另一个程序,翻译消息并根据 API 的程序设计执行协议。A…...
MybatisX逆向工程方法
官方文档链接:MybatisX快速开发插件 | MyBatis-Plus (baomidou.com) 使用MybatisX可以快速生成mapper文件,实体类和service及实现 效果 方法:首先下载mybatisX插件 然后创建数据库信息 然后选中表,右键,点击Mybatis…...
每日一题:LeetCode-LCR 179. 查找总价格为目标值的两个商品
每日一题系列(day 16) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🔎…...
SpringBoot 3.2.0 基于Logback定制日志框架
依赖版本 JDK 17 Spring Boot 3.2.0 工程源码:Gitee 日志门面和日志实现 日志门面(如Slf4j)就是一个标准,同JDBC一样来制定“规则”,把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接…...
微软发布安卓版Copilot,可免费使用GPT-4、DALL-E 3
12月27日,微软的Copilot助手,可在谷歌应用商店下载。目前,只有安卓版,ios还无法使用。 Copilot是一款类ChatGPT助手支持中文,可生成文本/代码/图片、分析图片、总结内容等,二者的功能几乎没太大差别。 值…...
【STM32】程序在SRAM中运行
程序在RAM中运行 1、配置内存分配。 2、修改跳转文件 FUNC void Setup(void) { SP _RDWORD(0x20000000); PC _RDWORD(0x20000004); } LOAD RAM\Obj\Project.axf INCREMENTAL Setup(); 3、修改下载ROM地址和RAM地址; 中断向量表映射 中断向量表映射到SRA…...
docker 部署mysql
docker pull mysql:5.7.25 docker run \ --name mysql \ -e MYSQL_ROOT_PASSWORD123456 \ -p 3306:3306 \ -v /soft/mysql/conf:/etc/mysql \ -v /soft/mysql/data:/var/lib/mysql \-d \mysql:5.7.25安装好之后可以用命令行进入查看 docker exec -it mysql mysql -u root -p密…...
科荣AIO ReportServlet存在目录遍历漏洞
文章目录 产品简介漏洞概述指纹识别漏洞利用修复建议 产品简介 科荣AIO是一款企业管理软件,提供企业一体化管理解决方案。它整合了ERP(如进销存、财务管理)、OA(办公自动化)、CRM(客户关系管理)…...
Ubuntu Desktop 22.04 桌面主题配置
Ubuntu Desktop 22.04 桌面主题配置 使用这么久 Ubuntu Desktop,本着不折腾的原则,简单介绍下自己的桌面主题配置。 安装 tweaks 安装 GNOME Shell 安装 GNOME theme安装 gnome-tweaks & chrome-gnome-shell sudo apt update # 安装 gnome-tweaks…...
SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API进行要素查询
作者:yx 前言 前面我们介绍了SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载,这里呢我们再来看看如何进行要素查询呢? 一、服务发布 SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载已经介绍如何发…...
H5向微信小程序发送信息(小程序web-view打开H5)
引入weixin-js-sdk npm i weixin-js-sdk 页面引入 // 引入wxjsimport wx from "weixin-js-sdk"; 点击触发方法 methods: {goweap(id){console.log(wx);// H5传递数据 (navigateBack)wx.miniProgram.navigateBack({delta: 1});wx.min…...
白话机器学习的数学-1-回归
1、设置问题 投入的广告费越多,广告的点击量就越高,进而带来访问数的增加。 2、定义模型 定义一个函数:一次函数 y ax b (a 是斜率、b 是截距) 定义函数: 3、最小二乘法 例子: 用随便确定的参…...
ubuntu22下安装minconda
bing 搜索 canda install 找到官方网站 https://docs.conda.io/projects/miniconda/en/latest/ 这里我们安装minconda。 官网有安装方法。 mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh…...
如何借助边缘网关打造智慧配电房安全方案
配电房是电力系统的重要组成部分,通常设置有各种高压配电装置和箱柜,是企业安全管理的重点。传统的人工巡检和监控总是难以避免疏漏,导致风险隐患的产生和扩大。 随着物联网、边缘计算、设备联动控制等技术的普及应用,佰马针对配电…...
k8s的二进制部署
k8s的二进制部署 k8s的二进制部署的实验: 源码包部署 k8s的master01:192.168.233.91 组件:kube-apiserver kube-controller-manager kube-scheduler etcd k8s的master02:192.168.233.92 组件:kube-api…...
Python基础语法总结
1.每条语句结束不需要分号(也可以加上), 直接换行, 注意: 如果两行代码写一行, 则必须加分号. 2.定义变量不需要指定类型(如果需要写类型, 需要在变量名后面加": 类型, 这个写法只是方便读代码). 3.变量名大小写敏感. 4.查看变量类型: type(变量名). 5.Python中的int表…...
矩阵理论基本知识
1、矩阵范数、算子范数 矩阵无穷范数是非自相容范数,矩阵1-范数、矩阵2-范数是自相容范数矩阵2-范数:Frobenius范数,是向量2-范数的自然推广。 ∥ A ∥ m 2 ∥ A ∥ F ∑ a i j ∗ a i j \|A\|_{m2}\|A\|_{F}\sqrt{\sum a_{ij}^*a_{ij}} ∥…...
YouTube 转 MP3 工具里,为什么预览要放在下载前
很多转换工具看起来解决的是“我要一个 MP3 文件”,但真正影响体验的,往往不是页面上有没有下载按钮。 用户真正想确认的是:这个链接是不是被正确识别了,转换任务是不是还在进行,最后得到的音频是不是值得保存。对 Yo…...
为Dify扩展AI图表与文档生成能力:微服务架构实战指南
1. 项目概述:为Dify打造专属的AI图表与文档生成工具箱如果你正在使用Dify构建自己的AI应用,并且希望让AI不仅能生成文字,还能直接输出流程图、思维导图、PPT甚至试卷,那么这个项目就是为你准备的。brightwang/dify-tool-service是…...
AVL许可排队严重?不想买新许可,回收闲置即刻算例
AVL许可排队严重?不买新许可,回收闲置许可就能解决,我就踩过这个坑关键词分析:AVL里藏着的宝藏AVL许可排队严重?别急着买新许可!我们先来看看这个问题到底藏哪儿。2026年我帮某制造业客户做系统优化时&…...
计算机毕业设计:Python医疗文本挖掘与可视化决策平台 Flask框架 随机森林 机器学习 疾病数据 智慧医疗 深度学习(建议收藏)✅
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...
2026最权威的十大AI辅助论文工具实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要降低AIGC也就是人工智能生成内容的检测率,关键之处在于减少机器生成的痕迹,还要增加文本的…...
航模电调XXD2212的“坑”与“宝”:从欠压报警到堵转丢步的实战避坑指南
XXD2212电调实战指南:从欠压保护到电机匹配的深度解析 1. 揭开XXD2212电调的神秘面纱 XXD2212作为航模圈内广为人知的入门级电调,以其极高的性价比吸引了大量无人机和机器人爱好者。这款电调采用新唐科技MS51FB9AE作为主控芯片,搭配六MOS管组…...
突破音频平台限制:基于Go+Qt5的喜马拉雅下载器技术解析
突破音频平台限制:基于GoQt5的喜马拉雅下载器技术解析 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字化学习与娱…...
终极智能修复:VisualCppRedist AIO一键解决Windows软件兼容性问题 [特殊字符]
终极智能修复:VisualCppRedist AIO一键解决Windows软件兼容性问题 😊 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 还在为软件打不开、…...
CANN/asc-devkit asc_select矢量选择函数
asc_select 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com…...
Wat完整使用教程:从基础语法到高级修饰符
Wat完整使用教程:从基础语法到高级修饰符 【免费下载链接】wat Deep inspection of Python objects 项目地址: https://gitcode.com/gh_mirrors/wat2/wat Wat是一款强大的Python对象深度检查工具,能帮助开发者快速获取任何Python对象的详细信息&a…...
