清理空的 Jetpack Compose 应用程序模板

Android Jetpack Compose使用及性能优化小结 无论是官网文档还是介绍Compose的优点时,都会说到Compose是声明式的。声明式编程(英语:Declarative programming)或译为声明式编程,是对与命令式编程不同的编程范型的一种合称。它们建造计算机程序的结构和元素,表达计算的逻辑而不用描述它的控制流程。指令式编程(英语:Imperative programming);是一种描述电脑所需作出的行为的编程范型。几乎所有电脑的硬件都是指令式工作;几乎所有电脑的硬件都是能执行机器语言,而机器代码是使用指令式的风格来写的。 阅读详情

对于纯 Jetpack Compose 应用程序,从技术上讲,我们不再需要用于 Android View 系统的themes.xmland 。colors.xml

但是,我已经看到很多代码仍然具有这些themes.xml并已colors.xml定义。就个人而言,我会删除它们以避免重复或混淆。

1.删​​除themes.xml和colors.xml

删除themes.xml并colors.xml可能导致编译错误,因为它仍然从AndroidManifest.xml. 你需要修改AndroidManifest.xml

android:theme="@style/Theme.EmptyComposeApp"在两者中删除和

<application
    ...
    android:theme="@style/Theme.EmptyComposeApp">
    <activity
        ...
        android:theme="@style/Theme.EmptyComposeApp">
        ...
    </activity>
</application>

替换为android:theme="@android:style/Theme.Material.Light.NoActionBar"in which 是您的themes.xml.

<application
    ...
    android:theme="@android:style/Theme.Material.Light.NoActionBar">
    ...
</application>

创建一个没有顶部操作栏的应用程序。可以使用Scaffold可组合功能创建顶部操作栏。在这个简单的 LazyColumn 应用程序中查看这个添加顶部应用程序栏示例。

我确实尝试不添加它android:theme=“@android:style/Theme.Material.Light.NoActionBar”,但ComponentActivity()默认情况下会创建顶部操作栏,我不知道使用 Jetpack Compose 摆脱它。

2. 使用 Compose 设置状态栏颜色

好吧,该应用程序可以运行,但是状态栏中的默认紫色消失了。

如果您查看原始文件themes.xml,它会在那里设置状态栏颜色。

<resources>
    <style name="Theme.EmptyComposeApp" parent="android:Theme.Material.Light.NoActionBar">
        <item name="android:statusBarColor">@color/purple_700</item>
    </style>
</resources>

由于这已被删除,我们需要在 Jetpack Compose 中实现它。为此,我们需要使用 Accompanist 的System UI Controller。

添加com.google.accompanist:accompanist-systemuicontroller库:

dependencies {
    ...
    implementation "com.google.accompanist:accompanist-systemuicontroller:0.24.1-alpha"
    ...
}

在ui\Theme\Theme.kt中,添加这个来设置purple_700颜色,这也是primaryVariant颜色

val systemUiController = rememberSystemUiController()
systemUiController.setStatusBarColor(
    color = colors.primaryVariant
)

完整的代码如下所示:

fun EmptyComposeAppTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    content: @Composable () -> Unit
) {
    val colors = if (darkTheme) {
        DarkColorPalette
    } else {
        LightColorPalette
    }

    val systemUiController = rememberSystemUiController()
    systemUiController.setStatusBarColor(
        color = colors.primaryVariant
    )

    MaterialTheme(
        colors = colors,
        typography = Typography,
        shapes = Shapes,
        content = content
    )
}

Android Studio 的模板项目没有设置导航栏颜色。因此,我们没有在上面的示例中设置它们。但是,我们通常希望为导航栏和状态栏设置相同的颜色。在这种情况下,您可以使用systemUiController.setSystemBarsColor():

val systemUiController = rememberSystemUiController()
systemUiController.setSystemBarsColor(
    color = colors.primaryVariant
)

由于我想将此示例用作我自己的模板项目。我将更改它以systemUiController.setSystemBarsColor()在此应用示例中使用。

预览未渲染

使用系统 UI 控制器时存在预览无法正常工作的错误。在此处查看问题跟踪器。

java.lang.IllegalArgumentException: The Compose View must be hosted in an Activity with a Window!

要解决此问题,您需要通过传入useSystemUIController参数来禁用预览中的系统 UI 控制器。

在Theme.kt:

@Composable  
fun EmptyComposeAppTheme(  
  ...  
  useSystemUIController: Boolean = true,  
  ...
) {  
    ...
    if (useSystemUIController) {  
        val systemUiController = rememberSystemUiController()  
        systemUiController.setStatusBarColor(  
            color = colors.primaryVariant)  
    }  
    ...
}

在MainActivity.kt:

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    EmptyComposeAppTheme(useSystemUIController = false) {
        ...
    }
}

概括

现在我只有strings.xml在我的资源文件夹中。酷,不是吗?

我可能还会将此作为任何 Jetpack Compose 项目的起点。

最后

由于篇幅有限,这里以图片的形式给大家展示一小部分,需要Android jetpack的可以点击文末卡片免费领取。

基于Kotlin与Jetpack Compose的天气应用开发全流程解析 在现代移动应用开发中,MVVM架构模式与声明式UI框架已成为构建健壮、可维护应用的核心范式。MVVM通过清晰的关注点分离,将数据逻辑、业务规则与用户界面解耦,而Jetpack Compose作为Android官方推荐的声明式UI工具包,极大地简化了UI开发与状态管理。其技术价值在于提升了开发效率、增强了代码可测试性,并优化了应用性能。结合Kotlin协程与Flow处理异步数据流,以及Retrofit进行网络请求、Room实现本地缓存,能够构建出响应迅速、体验流畅的现代化应用。这类技术组合尤其适用于需要实时数 阅读详情

相关推荐

Jetpack Compose 入门实战:从声明式 UI 到状态管理

声明式 UI 是一种现代前端开发范式,它通过描述 UI 的最终状态来构建界面,而非一步步命令式地操作视图。其核心原理是状态驱动,当数据状态变化时,框架会自动计算 UI 差异并高效更新视图层。这种模式带来了显著的技术价值:它简化了 UI 代码,提升了开发效率,并减少了因手动管理视图状态而导致的错误。在 Android 开发领域,Jetpack Compose 正是这一理念的杰出实践,它结合了 Kotlin 的语言特性和高效的 **重组(Recomposition)** 机制,使得构建响应式界面更加直观。对于希

weixin_33785108的博客 407

写给初学者的Jetpack Compose教程,基础控件和布局

大家好,写给初学者的Jetpack Compose教程又更新了。准确来说,这才是本系列的第一篇文章。因为上篇文章只是个序篇,和大家聊一聊为什么我们要学习Compose。Compose的知识体系很庞大,因此这个系列教程可能我会写很多篇。当然我并不是什么Compose高手,目前我也是个初学者。本教程实质上就是我在自我学习Compose的同时,将这些学习记录分享给大家,希望大家可以零基础跟着我一起学习。Compose是一个用于替代Android View的全新声明式UI框架。既然是UI框架,因此我们第一篇文章就来

郭霖的专栏 5万+

Jetpack Compose入门指南:从声明式UI到Android现代开发实践

声明式UI是一种现代UI开发范式,它通过描述界面在不同状态下的表现,而非一步步指令式地操作视图对象,从根本上改变了构建用户界面的思维方式。其核心原理在于UI作为状态的函数,当应用状态变化时,系统会自动、高效地计算差异并更新界面,这极大地简化了状态与UI同步的复杂性。这种模式的技术价值在于提升开发效率、增强代码可维护性,并优化了性能,尤其适用于需要频繁更新界面、组件高度复用的移动应用场景。Jetpack Compose正是Android平台上对这一范式的革命性实现,它通过可组合函数、智能重组等机制,将声明式理

weixin_33919950的博客 442

Jetpack Compose还没入门就劝退?本篇让你没有顾虑的用上Compose

本期分享目标:让还在观望的开发者们可以没有顾虑的用上 Compose

m0_64420071的博客 1696

Jetpack Compose LazyColumn性能优化与实战指南

在Android现代UI开发中,声明式编程已成为主流趋势。Jetpack Compose通过响应式编程模型彻底改变了界面构建方式,其中LazyColumn作为处理长列表的核心组件,采用智能的懒加载策略和项重用机制,显著提升了应用性能。通过预计算项尺寸、维护组合项池和最小化差异更新等技术,LazyColumn在电商列表、社交动态等高频场景中展现出卓越表现。本文深入解析LazyColumn的底层原理,分享包括分页加载、状态管理和性能调优在内的实战技巧,帮助开发者解决列表跳动、内存泄漏等常见问题,实现60fps的

weixin_34111790的博客 366

基于Kotlin与Jetpack Compose的现代化Android管理器开发实践

在Android应用开发领域,高效的文件与应用管理是提升用户体验的关键环节。其核心原理在于通过系统API安全地访问存储空间与应用数据,同时利用现代UI框架构建直观的交互界面。这项技术的价值在于能够为开发者提供一个纯净、可学习的工程实践范例,并为用户带来无广告、高透明度的管理工具。典型的应用场景包括批量清理应用缓存、可视化分析存储空间、以及安全便捷地管理手机文件。本文聚焦于运用Kotlin协程处理异步IO,并结合Jetpack Compose这一声明式UI框架,详细阐述了如何从零构建一个功能实用、代码开源、体

weixin_34268169的博客 439

Jetpack Compose实战解析,看完就懂

Jetpack Compose 是一个用于构建原生Android UI 的现代化工具包,它基于声明式的编程模型,因此你可以简单地描述UI的外观,而Compose则负责其余的工作-当状态发生改变时,你的UI将自动更新。由于Compose基于Kotlin构建,因此可以与Java编程语言完全互操作,并且可以直接访问所有Android和Jetpack API。它与现有的UI工具包也是完全兼容的,因此你可以混合原来的View和现在新的View,并且从一开始就使用Material和动画进行设计。

m0_56146626的博客 1173

Compose 面试题

Compose 面试题。

ForgetSky的博客 967

我用AI学Android Jetpack Compose之入门篇(1)

这篇我们先来跑通第一个Android Jetpack Compose工程,现在新版本的Android Studio,新建工程选择Empty Activity默认就会开启Jetpack Compose的支持,再次声明,答案来自。

学无止境,止于至善 1581

避免Jetpack Compose新手常犯的错误

有时候,在Compose函数中忘记使用正确的参数可能导致错误的结果。例如,如果你在Compose函数中使用了不可变的变量,而忘记将其声明为参数,那么当变量的值发生变化时,UI将不会正确更新。在本文中,我将介绍一些新手容易碰到的坑,并提供相应的源代码来帮助你避免这些错误。Jetpack Compose是一个单独的工具包,需要在项目的build.gradle文件中添加相应的依赖。通过避免上述提到的常见错误,你将能够更好地开始使用Jetpack Compose,并构建出令人印象深刻的用户界面。

UoJava的博客 243

跟着团子学SAP PS:BOM和项目结构的联动-BOM Transfer CN33

关于项目中的物料组件挂接你需要了解的一点功能

Lucas1211的博客 2万+

Jetpack Compose 快速上手

一篇面向 Android 开发者的 Jetpack Compose 入门教程,覆盖工程创建、布局、Modifier、状态、列表、Material 3、ViewModel、副作用和导航。

trebleZ的博客 266

OpenClaw Windows 最详细安装指南

Windows上养龙虾:OpenClaw完整安装教程+钉钉接入,助你养只大龙虾

weixin_43405859的博客 2215

重磅首发!Jetpack Compose 完全开发手册,从入门到精通!

前 言Jetpack 架构组件 及 标准化开发模式 的确立,意味着 Android 开发已步入成熟阶段。现在的Android岗招人的时候也非常看重应试者对 Jetpack 架构组件的理解程...

Android技术之家 2076

PLc S7-200 smart如何使用Modbus 485通讯传输接收数据

西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器,从而实现PLC通过modbus方式控制其他器件。提示:以下是本篇文章正文内容,下面案例可供参考。

xjbsw0的博客 6万+

Jupyter Lab 无法启动 Kernel 问题排查与解决总结

使用 curl,telnet,或 Python websocket-client 库可以本地模拟 WebSocket 握手行为,帮助分析服务端响应状态。避免使用 http:// + ws:// 组合方式部署 Jupyter Lab,特别是在远程或跨域访问场景。建议统一采用 https:// + wss:// 方式部署,确保浏览器信任并兼容。确认 WebSocket 已升级为 wss://,内核可正常启动。但在远程访问时,浏览器出于安全策略,默认拒绝 ws:// 协议。

weixin_43866043的博客 1860

Android 高级工程师面试参考答案:架构设计、Jetpack 与 Compose

本文探讨了Android开发中架构设计、Jetpack组件和Compose的实践要点。主要内容包括:MVVM相比MVP的优势在于集中管理页面状态,降低维护成本;ViewModel应作为状态协调者而非业务仓库;LiveData、StateFlow和SharedFlow需区分状态和事件;Jetpack组件解决特定复杂度问题;依赖注入提升代码可维护性;MVI适合复杂状态管理;Compose本质是声明式状态驱动UI;重组优化的核心是状态范围控制。文章强调架构选择应基于实际复杂度,而非盲目追随新技术。

帅次的博客 1531

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 630

Jetpack Compose深度解析:如何构建高性能的现代Android UI

Jetpack Compose是Android现代UI开发的革命性框架,它通过声明式UI范式彻底改变了Android应用开发方式。相比传统的View系统,Compose提供了更简洁的代码结构、更强大的状态管理和更优秀的性能表现。本文将深入探讨Compose的核心原理、实战应用和性能优化策略,帮助开发者掌握这一关键技术。 ## 技术演进:从命令式UI到声明式UI的范式转变 Android UI开

gitblog_00731的博客 380

RHCA ---RH442-4

这题考试中是没有的,但我做ex的判分脚本里做了,主要是lab环境swap只有512M的,这样后续改了某几个参数后会造成内存不够用导致异常.这里记得是双>,如果没自信的小伙伴可以在考试开始后第一时间把/etc/fstab先备份一个或者vi进入后手动敲一下。根据题意我们需要分2个768M的分区给swap。用free看swap大小是2.0Gi即可。留意红框中的内容即可,最后w保存退出。这个时候可以重启下机器。

Q先生 644

一文速览:大模型语料构建与基础训练全流程实战指南

因为模型只有看到足够丰富、高质量的数据,才能真正学到“真本事”,展现出更强大的泛化能力,也就是能够在全新的场景和任务下,做出准确的推理和判断。我们日常做饭的时候,通常会先把买回来的菜仔细清洗干净,把坏掉的叶子、泥土、杂质等去除掉。同理,训练大模型的数据就像我们的食材,如果不干净,就会影响模型的学习效果,甚至训练出逻辑紊乱的模型。在大模型的世界里,有一句名言:“Garbage in, Garbage out”,翻译过来就是“垃圾输入,垃圾输出”,说白了,就是给模型喂的是什么数据,它学到的就是什么知识。

master_hunter的博客 1672

Jetpack Compose导航与刷新组件实战指南

Jetpack Compose作为Android现代UI开发框架,通过声明式编程范式彻底改变了界面构建方式。其核心原理在于将UI组件状态与逻辑解耦,使开发者能够更高效地实现复杂交互。在导航与刷新场景中,ModalNavigationDrawer、NavigationRail和PullToRefreshBox等组件展现出显著的技术价值:前者提供智能侧边栏布局,中者优化垂直导航效率,后者则大幅提升下拉刷新流畅度。这些组件特别适合电商APP、社交应用等需要频繁导航与数据更新的场景,通过Kotlin DSL实现代码

weixin_30268921的博客 572

【GLM5】手把手教你在openclaw中白嫖英伟达羊毛

openclaw很强,但是也很贵,每一次请求都会消耗大量的token。而英伟达平台正好可以白嫖免费的模型,于是,我们一拍即合。

Science prince的博客 3820

Android开发入门到精通:现代架构与Jetpack Compose实战指南

移动应用开发是构建现代数字生态的核心技术之一,其核心在于创建高效、响应式的用户界面与稳定的数据层交互。Jetpack Compose作为新一代声明式UI框架,通过状态驱动UI更新的原理,彻底改变了Android界面开发模式,提升了开发效率与代码可维护性。其技术价值在于将UI作为状态的函数,实现了更直观的编程范式和更优的运行性能。在实际应用场景中,结合Room数据库、ViewModel等架构组件,开发者能够构建从数据持久化到界面展示的完整现代化应用。本文以构建一个笔记应用为例,深入解析了如何整合Kotlin协

weixin_30621959的博客 378

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Jetpack Compose入门指南:Android声明式UI开发核心概念与实践

声明式UI是现代移动应用开发的核心范式,它通过描述界面在不同状态下的表现,而非一步步命令式地操作视图,从根本上简化了UI开发逻辑。其原理在于将UI视为状态的函数,当应用状态改变时,框架会自动计算差异并高效更新界面,这带来了更直观的代码组织和更少的手动同步错误。在Android生态中,Jetpack Compose是这一范式的官方实现,它深度集成Kotlin语言特性,通过可组合函数和状态驱动重组机制,显著提升了开发效率与代码可维护性。对于构建动态、响应式的现代Android应用界面,掌握Compose的声明式

weixin_34327223的博客 409

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Kotlin协程与Jetpack Compose实战:从零构建Android管理器应用

在Android开发中,应用管理和文件操作是常见的系统级任务,其背后涉及权限管理、异步编程和UI构建等核心技术。Kotlin协程通过结构化并发模型,以同步方式编写异步代码,有效解决了传统回调地狱问题,提升了代码可读性和健壮性。Jetpack Compose作为现代声明式UI框架,结合Material Design 3,能够高效构建动态且美观的界面。这些技术的工程价值在于提升开发效率、保障应用性能与稳定性。本教程聚焦于**Android管理器**开发,通过**Kotlin协程**处理应用列表查询与文件IO,并

weixin_34221773的博客 419

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 每个 Android 开发者都必须知道的 5 种设计模式
下一篇: 使用 WorkManager 实现定期通知
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值