当前位置:网站首页>清理空的 Jetpack Compose 应用程序模板
清理空的 Jetpack Compose 应用程序模板
2022-08-10 15:37:00 【不秃头de程序猿】
对于纯 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的可以点击文末卡片免费领取。
边栏推荐
- FP6378AS5CTR SOT - 23-5 effective 1 mhz2a synchronous buck regulator
- 一个 ABAP 工具,能打印系统里某个用户对 BSP 应用的浏览历史记录
- fastposter v2.9.1 程序员必备海报生成器
- 一个 ABAP 开发的新浪微博语义情感分析工具
- 【教程】HuggingFace的Optimum组件已支持加速Graphcore和英特尔Habana芯片
- 电商秒杀项目收获(二)
- 5G NR MIB详解
- 可以在家干的兼职都有哪些呢?做自媒体怎么样?
- 智为链接,慧享生活,荣耀智慧服务,只为 “懂” 你
- Oracle数据库备份dmp文件太大,有什么办法可以在备份的时候拆分成多个dmp吗?
猜你喜欢
企业如何开展ERP数据治理工作?_光点科技
商业智能BI行业分析思维框架:铅酸蓄电池行业(二)
TCP为什么是三次握手和四次挥手?
电商秒杀项目收获(二)
NFT digital collection development issue - digital collection platform
Introduction to program debugging and its use
力扣+牛客--刷题记录
数据在内存中的存储
uniapp使用scroll-view,设置横向,内容重叠的问题解决
Cesium Quick Start 4-Polylines primitive usage explanation
随机推荐
Zotero 开源文献管理工具
FP6378AS5CTR SOT - 23-5 effective 1 mhz2a synchronous buck regulator
5G NR MIB详解
Please check the preparation guide for the 2022 Huawei Developer Competition
第贰章模块大全之《 collections模块》
匿名函数和全部内置函数详细认识(下篇)
Colocate Join :ClickHouse的一种高性能分布式join查询模型
fuse简介
Exchange Online审计和监控
Asterisk SIP media path
二叉树详解
E-commerce spike project harvest (2)
2025年推出 奥迪透露将推出大型SUV产品
数据治理项目成功的要点,企业培养数据要把握好关键环节
storage of data in memory
关于“算力”,这篇文章值得一看
A test tool for ABAP Development Tool custom service endpoint
QOS function introduction
Allwinner V853 development board transplants LVGL-based 2048 games
MySQL批量更新与批量更新多条记录的不同值实现方法