关于android:Android-的UI组件Compose的介绍和基本用法

36次阅读

共计 3039 个字符,预计需要花费 8 分钟才能阅读完成。

Android 的 UI 组件 Compose 的用法

一:前言

Jetpack Compose 是用于构建原生 Android 界面的新工具包,他用更少的代码,弱小的工具和直观 Kotlin API, 能够帮忙他简化并放慢 Android 界面开发

Compose 架构的分层设计

由上至下 阐明 使用
material 提供了 Material Design 一套格调体系,蕴含主题零碎、款式化组件 Button、AlertDialog 等等
foundation 相当于面向开发者的跟基层,蕴含残缺的 UI 零碎和实用布局 LazyList、Row、Column 等等
animation 动画层,蕴含平移、突变、缩放等等,并且提供了不便开发者的动画组件 animate AsState、Transition、Animatable、AnimatedVisibility 等等
ui ui 相干的根底性能,包含自定义布局、绘制、触摸反馈等等 ComposeView、Layout、LayoutNode 等等
runtime 最底层的概念模型,包含数据结构、状态解决、数据同步等等 mutableStateOf、remember 等等
compiler 基于 Kotlin 的编译器插件 解决 @Composable 函数

二:setContent 的源码剖析

public fun ComponentActivity.setContent(
    parent: CompositionContext? = null,
    content: @Composable () -> Unit) {
//1. 通过 decorView 找到 ContentView,再获取第一个 ComposeView
    val existingComposeView = window.decorView
        .findViewById<ViewGroup>(android.R.id.content)
        .getChildAt(0) as? ComposeView
//2. 如果 ComposeView 为空则走初始化流程
    if (existingComposeView != null) with(existingComposeView) {setParentCompositionContext(parent)
        setContent(content)
    } else ComposeView(this).apply {
 // 3. 初始化 ComposeView 必定为空,则进入这边
        // Set content and parent **before** setContentView
        // to have ComposeView create the composition on attach
        setParentCompositionContext(parent)
// 4. 把入口函数对象传入 ComposeView
        setContent(content)
        // Set the view tree owners before setting the content view so that the inflation process
        // and attach listeners will see them already present
        setOwners()
// 5. 把 ComposeView 设置进 ContentView
        setContentView(this, DefaultActivityContentLayoutParams)
    }
}

三:Compose 的 Surface 的应用

@Composable
@NonRestartableComposable
fun Surface(
    modifier: Modifier = Modifier,
// 裁剪,依据 shape 属性形容的形态进行裁剪
    shape: Shape = RectangleShape,
    color: Color = MaterialTheme.colorScheme.surface,
// 内容色彩
    contentColor: Color = contentColorFor(color),
    tonalElevation: Dp = 0.dp,
    shadowElevation: Dp = 0.dp,
    border: BorderStroke? = null,
    content: @Composable () -> Unit)

Surface 从字面上来了解,是一个立体,在 Material Design 设计准则中也同样如此,咱们能够将很多的组件摆放在这个立体之上,咱们能够设置这个立体的边框,圆角,色彩等等。接下来,咱们来用 Surface 组件做出一些不同的成果。

四:Compose 的 @Preview 的应用

@Repeatable
annotation class Preview(
    val name: String = "",// 此预览的显示名称,容许在面板中辨认它
    val group: String = "",// 此 @preview 的组名称,这容许在 UI 中对他们进行分组,并仅显示其中一个或多个
    @IntRange(from = 1) val apiLevel: Int = -1,// 出现带正文的 @Composables 时应用的 API 级别
    val widthDp: Int = -1,// 将在其中渲染带正文的 @Composable 的最大 DP 宽度。应用此选项能够限度渲染视口的大小
    val heightDp: Int = -1,// 将在其中渲染正文的 @Composable 的最大高度(以 DP 为单位)。应用此选项能够限度渲染视口的大小。val locale: String = "",// 区域设置的以后用户首选项,对应于区域设置资源限定符。默认状况下,将应用默认文件夹。@FloatRange(from = 0.01) val fontScale: Float = 1f,// 用户首选字体的缩放因子,绝对于根本密度缩放。val showSystemUi: Boolean = false,// 如果为 true,将显示设施的状态栏和操作栏。@Composable 将在残缺流动的上下文中出现
    val showBackground: Boolean = false,// 如果为 true,@Composable 将应用默认背景色。val backgroundColor: Long = 0,// 背景的 32 位 ARGB 色彩 int,如果未设置,则为 0
    @UiMode val uiMode: Int = 0,// 依据 android.content.res.Configuration.uiMode 的 ui 模式位掩码
    @Device val device: String = Devices.DEFAULT// 批示要在预览中应用的设施的设施字符串。请参阅设施中的可用设施
)

栗子:

@Preview(
    widthDp = 100,
    heightDp = 100,
    fontScale = 2f,
    showBackground = true,
    backgroundColor = 0xFF00FF00,
    showSystemUi = true,
    device = Devices.NEXUS_6

)
@Composable
fun GreetingPreview() {
    MyApplicationTheme {Greeting("Android")
    }

留神
*1.showBackground 必须为 true,backgroundColor 属性才失效,并且 backgroundColor 是 ARGB Long,而不是 Color 值
2. 同一个函数能够应用多个 @Preview 注解 *
3.@Preview 注解 不反对具备非默认参数的可组合函数(就是 preview 不能润饰带参数的函数)
4.@PreviewParameter 正文 能够润饰带参数的

正文完
 0