新建Compose工程,以及简单的布局介绍

大家好,今天我们来讲一下Android Compose的基础知识。我们一起来学习一下Compose应用的创建,基本的控件和简单的布局。

Compose基础知识

1.Compose应用的创建

下载安装新版的Android Studio,我这里用的是Giraffe版本。这里可以通过Android开发者的官方网站下载最新版本即可,不一定要和我这个一致。点击Android Studio ->About android Studio即可查看当前Android Studio的版本。

现在我们来新建一个应用.点击File->New->New Project.会弹出一个对话框。左侧我们选择Phone and Tablet,这个选项是用来创建手机和平板应用。除了这个选项,我们还看到有手表应用(Wear OS),电视应用(Television)和汽车应用(Automotive).右边我们选择中间有一个三色环的Empty Activity。顺便我们来看一下其他选项,其他选项有不带Activity的,有"Basic Views Activity"和"Empty VIews Activity"。这里的View Activity是指用传统的xml方式写页面。

第一行是应用的名字。

第二行是应用的包名,在手机上用于唯一标识应用。包名我们就采用反向的域名命名方式。一般是以com.xxx开头,后面加上当前应用的名字。

第三行是代码保存的位置,可以自定义合适的存储位置。

第四行是支持的最小的sdk版本,我们也知道Android系统平台每年都会发布新版本,所以它的api也是在不断地变化中。这里可以选择默认的sdk版本。

第五行我们也可以选择默认的配置。

比如说这里的第一行应用的名字我们可以填写为ComposeProject1。

点击Finish,我们就成功创建了一个Compose应用。我们来运行一下,看一下效果:

当我们点击运行时,项目会报错:

vbnet 复制代码
3 issues were found when checking AAR metadata: 1. Dependency 'androidx.activity:activity:1.8.1' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs.

上述报错是由于依赖的activity版本和app module下build.gradle文件中的compileSdk和targetSdk版本33不兼容导致的,将app module下build.gradle文件中的compileSdk和targetSdk版本由33改成34即可成功运行。

运行结果如下图:

kotlin 复制代码
package com.example.composeproject1import android.os.Bundleimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.material3.MaterialThemeimport androidx.compose.material3.Surfaceimport androidx.compose.material3.Textimport androidx.compose.runtime.Composableimport androidx.compose.ui.Modifierimport androidx.compose.ui.tooling.preview.Previewimport com.example.composeproject1.ui.theme.ComposeProject1Themeclass MainActivity : ComponentActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContent {            ComposeProject1Theme {                // A surface container using the 'background' color from the theme                Surface(                    modifier = Modifier.fillMaxSize(),                    color = MaterialTheme.colorScheme.background                ) {                    Greeting("Android")                }            }        }    }}@Composablefun Greeting(name: String, modifier: Modifier = Modifier) {    Text(        text = "Hello $name!",        modifier = modifier    )}@Preview(showBackground = true)@Composablefun GreetingPreview() {    ComposeProject1Theme {        Greeting("Android")    }}

2.注解

我们来看一下项目自动生成的代码

@Compose注解

如果我们想要让一个函数能被识别成为Compose组件的话,我们就必须用上这个注解。Compose的组件是可以重复利用的。

@Preview注解

加上Preview注解后,就可以单独预览这一个Compose组件。

3.使用控件 Text, Surface, 微调页面。

我们来看一下它的内容。最外层的函数是SetContent。所有的Compose组件都是从这里调用的。接下来我们能看到一个ComposeProject1Theme的主题。点击进这个主题看一下,这个主题里定义了颜色,排版和内容。主题定义在文件而且定义了深色模式和浅色模式这两种不同的模式。然后是官方的Surface组件。Surface组件内部是一个名为Greeting的自定义Compose组件。

在Greeting中,我们可以看到有一个Text组件用来显示文本。改为

修改背景颜色,将Surface组件中的color属性由MaterialTheme.colorScheme.onPrimary改为

MaterialTheme.colorScheme.primary,这样我们的背景变成了主题中定义的蓝色,文字变成了白色。

这会文字有点太贴边了,我们通过修改Modifier属性,可以给它增加文字外侧的间距。

通过修改Greeting组件中的Text组件的modifier属性,可以给字体增加间距。

less 复制代码
@Composablefun Greeting(name: String, modifier: Modifier = Modifier) {    Text(        text = "Hello $name!",        modifier = Modifier.padding(24.dp)    )}

增加间距后的效果如图所示:

4.简单布局Row和Column

我们先像程序中添加两个Text,修改Greeting的代码:

less 复制代码
@Composablefun Greeting(name: String, modifier: Modifier = Modifier) {    Text(        text = "Hello Android",        modifier = Modifier.padding(24.dp)    )    Text(        text = "Hello World",        modifier = Modifier.padding(24.dp)    )}

运行后看到如下叠放的效果,文字变得难以识别。

这时我们就需要用到布局组件Row或者Column。使用Row组件后的控件横向排列。

vbnet 复制代码
Row {    Text(        text = "Hello Android",        modifier = Modifier.padding(24.dp)    )    Text(        text = "Hello World",        modifier = Modifier.padding(24.dp)    )}

显示效果如下:

将Row替换成Column,显示效果如下:

今天就为大家介绍到这里,上述内容参考Google官方的教程,代码及内容教程中都已包含。

Jetpack Compose基础知识

代码链接:github.com/android/cod....

相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone3 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui