Jepack Compose声明式ui结构

前语

  1. 2020的Google/IO大会,露脸了一个全新的 Android 原生 UI 开发结构-Jetpack Compose
  2. 与苹果jetbrains什么意思的SwiftIUI相同,Jetpack Compose是一个声明式的UI结构,跟着了本年安卓和苹果两大移动平台相继推出自己的UI开发jetbrains怎样读结构Jetpack Compose 和SwiftIUI,标志着移动操作体系正式全面拥抱声明式 UI 开发形式
  3. 这时候就有同学问了,何为声明式UI?
  • 声明式UI的意思便是描绘你想要一个什么样的UI界面, 状况变化时,界面依照早年描绘的重写“烘托”即可得到状况必定正确的界面。
  • 它不像指令相同,告诉https域名程序一步一步该干什么,保护各种状况。假设想要了解的同学,能够具jetbrains-agent.jar怎样用体能够检查这篇专栏

从 SwiftUI 谈声明式 UI 与类型体系

  1. 就简略jetbrains-agent.jar怎样用说到这,下面让咱们走进Jetpamaterial design 教程ck Compose的国际,领会它的夸姣

JetPack Compose简略介绍

  • Jetpack Compose 是一个用于构建原生Android UI 的现jetbrains官网代化东西包,它基于声明式的编程模型,因而你能够简略地描绘UI的外观,而Compose则担任其他的工作-当状况产生改动时,你的UI将自动更新。material design 教程
  • 因为Compose基于Kotlin构建,因而能够与Java编程言语彻底互操作,而且能够直接拜访悉数Android和Jetpack Amaterialdesign下载PI。它与现有的UI东西包也是彻底兼swift代码查询容的,因而你能够混合原本的View和现在新的View,而且从一开端就运用Material和动画进行规划。

简略环境装备

以下是我在Android Sutdio4.android下载软件app1上进行编写dehttps域名mo,能够直接去Android Developers官网下载最新版别

  1. 创立一个新的kotlin project,以下jetbrains agent是我的build.android/yunosgradle文件
defaultConfig {
applicationId "com.example.jetpackcomposedemo"
minSdkmaterial design设计标准Version 21
targetSdkVersionmaterial design什么意思 30
versionCode 1
versijetbrains agentonName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitjetbrains-agent.jar怎样用Runner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('progumaterial design怎样读ard-android-optimize.txt'), 'proguarandroid11d-rules.pro'
}
}
compileswifterOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibilithttps域名y JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}

ps: 需求留神的是app目录下的支撑的最低版别是21或许以上,否则运用jetpack compose会报jetbrains怎样读错,详细可检查官方答复

  1. 运用Kswift代码otlin-Gradle插件

需求根目录下的build.gradle增加如下代码:

buildscript {
ext.kotlin_verhttps域名sion = "1.4.21"
repositories {
googlhttps认证e()
jcenhttps和http的差异ter()
maven { url 'httpsswiftcode代码查询://dl.bintraymaterial design期刊.com/kotliandroid11n/kotlin-eap' }
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.0"
classswift代码path "org.jetbrains.kotlin:kotHTTPSlin-gradle-plugin:$kotlin_veHTTPSrsion"
// NOTE: Do not place your appandroid下载lication dependencies here; they beswiftlylong
// in the iandroid下载ndividual modswift结算体系ule build.gradle files
}
}
allprojects {
repositories {
google()
jcjetbrains是什么软件entejetbrains什么意思r()
maven {JetBrains url 'htMaterial+Designtps:/android体系/dl.bintray.com/kotlin/kotandroid11lin-eap' }
}
}
  1. 参加Jetpack Compose的依靠
  • dev02 0.1.0先行版
    implementation 'androidx.ui:ui-tooling:0.1.0-dev02'
implementation 'androidx.ui:ui-layout:0.1.0-dev02'
implementation 'androidx.ui:ui-material:0.1.0-dev02'
  • 现在运jetbrains什么意思用1.0.0-alpha10版别
 implementation 'androidx.compose.ui:ui:1.0.0-alpha10'
// Tooling support (Previews, etc.)
implementation 'androidx.compose.ui:ui-tooling:1.0.0-alpha10'
// Foundation (Border, Background, Box, Image, Sswift什么意思croll, shapes, animations, etc.)
implementation 'androidx.compose.foundation:foundation:android手机1.0.0-alpha10'materialdesign下载
// Materiswift怎样读al Design
implementationandroid的drawable类 'androidx.compose.material:mSwiftaterial:1.0.0-alpha10'
// Material design icons
implementation 'androidx.compose.material:material-icons-core:1.0.0-alpha10'
implementation 'androidx.compose.material:material-icons-extended:1.0.0-alpha10'
// Integration wiJetBrainsth observables
implementation 'androidx.compose.runtime:runtime-livedata:1.0.0-alpmaterial design什么意思ha10'
implementation 'androidx.compose.runtime:runtime-rxjava2:1.0.0-ahttps认证lpha10'
// UI Tests
andrhttps认证oidTesmaterial design标准tImplementation 'androidx.compose.ui:ui-test-junit4:1.0.0-alpha10'
  1. 至此,Jetpack Compose的预备东西就到此了,现在咱们能够创立一个Hello world项目进行领会一下
class MainActivity : AppComphttps域名atActivity() {
override fun onMaterial+DesignCreate(savedInstanceStatswift怎样读e: Bundle?) {
super.onCreate(sswifteravedInstanceStahttps安全问题te)
//开端运用JetPack进行声明式ui编程
setContent {
MaterialTheme {
greeting("World")
}
}
}
@Composable
private fun greeting(str: String) {
Text(text = "Hello $str!")
}
}
  • 这儿界说了一个Composswift选手e函数打印Text

看看Jetpack的布局

  • 在Compose中ui布局是分层级的,元素包括在其他元android11素中。
  • 在Jetpack Compose中,https认证你能够通过从其他composable函数中调composable函数来构建UI层次结构。
  1. 笔直增加多个text
  • 相对于xml是运用LinearLayout中的orientation:vertical能够完成jetbrains激活码笔直结构,在jetpack compose中,咱们就需material design怎样读求运用到Column函数
  • 写过flutter的同学materialdesign下载看起来是不是很眼熟?是的,跟flutter里边的Column Widget姓名和功能彻底相同,甚至连他们的特征都一摸相同。
 @Composable
fun NewsStory() {
Column {
Text("A day in Shark Fin Cove")
Text("Davenport, California")
Text("December 2018")
}
}
  1. 增加一些款式(官方)
  • 以上是beta02版其他jetpacandroid/yunosk compose的写法
 @Composable
fun newsStory() {
Column(
crossAxisSize = LayoutSize.Expand,
modifier = Spacing(16.dp)
) {
Text("A day in Sharjetbrains agentk Fin Cove")
Textswift结算体系("Davenport, California")
Text("December 2018")
}
}
  • crossAxisSize: 指定Column组件(注:Compose中,悉数的组件都是composable函数,文中的组件都是指代composable函数)在水平方向的巨细,设置crossAxisSize为LayoutSize.Expand即标明Column宽度应为其父组件容许的最大宽度,相当于传统布局中的match_paraswift怎样读nt ,还有一个值为LayoutSize.Wrap,看姓名就知道,包裹内容,相当于传统布局中的wrap_candroid是什么手机牌子ontent。
  • modifier:使你能够进行其他格式更https协议改。在这种状况下,咱们将使用一个Spacing修改器,该设置将Cloumn与周围的视图产生距离。
  • https安全问题下是1.0.0版其他jetpaandroid平板电脑价格ck compose的swifter写法
@Composable
fun NewsStoandroid什么意思ry() {
Column(
modifier = Modifier.padding(16.dp)
) {
Text("A day in Shark Fin Cove")
Text(android下载"Damaterial design什么意思venport, California")
Tematerial design标准xt("December 2018")
}
}
  1. 增加一张图片
  @Compoandroid11sable
privmaterial design怎样读ate fun addIandroid是什么手机牌子mage()jetbrains clion {
val image = +imageResourcjetbrains怎样读e(R.mipmahttps域名p.header)
// 放在容器中,设置巨细
Container(expanded = true, height = 180.dp) {
//闪现图片
DrawImage(image)
}
// 增加笔直方向距离20dp
Heighmaterial design是什么tSpacer(height = 20.dp)
}
  • expanded : 指定Container的巨细,默许是false(Container的巨细是子组件的巨细,相当于wrap_content),假设将它设置为true,就指定Container的巨细为父控件所容许的最大size, 相当于match_parent。
  • height : 设置ContainerSwift容器的高度,height特征的优先级高于expanded,因而会掩盖expanded,如上面的比如,设置height为180dp,也便是容material design标准material design官网宽为父控件宽度,高为180dp

简略运用Material Design规划

  1. 增加shape的款式
 setContent {
valswift什么意思 image = +imageResource(R.miandroid体系pmap.heahttps认证der)
Column(
crossAxisSize = Layoutjetbrains中文版Size.Expand,
modifier = Spaandroid下载cing(16.dp)
) {
//android下载放在容器中,设置material design设计标准巨细
Contmaterial design怎样读ainer(expanded = true,height = 180.dp) {
Cswiftcode代码查询lip(shapejetbrains什么意思 = RoundedCornhttps和http的差异erShape(1material design标准0.dp)) {
//闪现图片
DrawImage(swift选手image)
}
}
}
  • 这儿给图片参加圆角10dp
  1. 设置下文字款式
                Text("Hello Worlswift选手d")
Text("swift代码我来领会下https域名JetPack Compose,JetPamaterial design标准ck Commaterial design风格pose的复android下载软件app用性很强,能够抽取许多公共组件",
maxLimaterial design设计标准nes = 2,
overflowmaterial design什么意思 = TextOverflow.Ellipsswift代码is,
stylswift怎样读e = +themeTextStyle { h5 }
)jetbrains官网
  • 设置了maxswift代码Lines 和overflow 之后,超出部分就切断处理了,不会影响到整个布局款式。
  1. 设置按钮
       drawerButton(
R.drawable.ic_shape_button.amaterial design是什么lso { },
labelmaterialdesign下载 = "swifterHome",
isSelected = true
) {
}
  1. 无缺demo代码如下所示
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//开端运用JetPack进行声明式ui编程
smaterial design是什么etContent {
val image = +imajetbrains激活码geResource(R.mipmap.header)
Column(
crossAxisSize = LayoutSize.ExMaterial+Designpand,
modandroid/yunosifier = Spacing(16.dpandroid手机)
) {
//放在容器中,设置巨细
Container(expanded = true, height = 180.dp) {
Clip(shape = RoundedCornerShape(10.dp)) {
//闪现图片
DrawImandroid11age(image)
}
}
//增加笔直方向距离为20dp
HeightSpacer(20.dp)
Text("Hello Worlswifterd")
Text(
"swift代码我来领会下JetPack Compose,JetPackjetbrains激活码 Compose的复用性很强,能够抽取许多公共组件",
maxLines = 2,
overflow = TextOverflow.Ellipsis
//                    style = (+themeTextSswift什么意思tyle { h2 }).withOpacity(0.1f)
)
HeightSpacer(20.dp)
drajetbrains是什么软件werButton(
R.drawable.ic_shape_button.alswifterso {android的drawable类 },
label = "Home",
isSelandroid下载ected = true
) {
}
}
}
}
@Preview
@Composable
private fun newsTory(string: String) {
Texjetbrains官网t("Hello $string")
}
/**
* 增加一张图片
*/
@Composable
privatjetbrains ideae fun addImage() {
val image =android什么意思 +imageResource(R.mipmamaterial design是什么p.header)
// 放在容器中,设置巨细
Container(expanded = true, height = 180.dp) {https安全问题
//闪现图片
DrawImage(image)material design 教程
}
/https协议/ 增加笔直方向距离20dp
HeightSpacer(https安全问题height = 20.dp)
}
@Composable
private fun drawerButton(
@DrawableRes icon: Int,
label: String,
isSelected:material design设计标准 Boolean,
action: () -> Unit
) {
val textIconColor = if (isSelected) {
+themeColor { primary }
} else {
(+themeColor { onSurfaceswiftly }).copy(alpha = 0.6f)
}
val backgroundColor = if (isSelected) {jetbrains agent
(+themeColor { primary }).copy(alpha = 0.12f)
} else {
+themeColor { surface }
}
Padding(left = 8.dp, top = 8.dp, right = 8.dp) {
Surmaterial design是什么face(
color = backgroundColor,
shape = RoundedCornerShahttps协议pe(4.dp)
) {
Button(onClick = action, sswiftcode代码查询tyle = TextButtonStyle()) {
Row(
mainAxisSize = LayoutSize.Expand,
cSwiftrossAxisAlignment = CrossAxisAlignment.Center
) {
WidthSpacer(16.dp)
Text(
text = labelmaterial design什么意思,
style = (+themeTextStyle { body2 }).copy(
color = textIconColor
)
)
}
}
}
}
}
}

总结

  • 同学我尝试领会了一下JetPack Compose,现在还存在许多问题,还不能现在将其jetbrains-agent.jar怎样用用于商业项目swifter中,但是这并不能阻止咱们学习和领会它,声明式 UI 结构近年来飞速发JetBrains展,React 为声明式 UI 奠material design是什么定了坚HTTPS实根底并。
  • Flutter 的发布将声明式 UI 的思jetbrains怎样读维成功带到移动端开发领域,Apple和Google 别离先后发布了自己的声明式UI结构SwiftUI 和 Jetpack Compose , 往后,jetbrains中文版原生UI布局,声明式或许将会是干流。
  • 详细效果可检查Android官方文档JetPack Compose教jetbrains agent
  • 欢迎各位swift选手同学大佬android平板电脑价格们一同学习谈论