当前位置: 首页 > news >正文

网站没有后台登陆文件夹Wordpress写文章贴代码

网站没有后台登陆文件夹,Wordpress写文章贴代码,咨询聊城做网站,服装定制流程本篇主要是对 Jetpack Compose 有一个宏观上的了解。 1、Jetpack Compose 是什么与优势 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API#xff0c;可以帮助您简化并加快 Android 界面开发。 Compose 的优势可以帮助您简化并加快 Android 界面开发。 Compose 的优势为何采用 Compose 更少的代码使用更少的代码实现更多的功能并且可以避免各种 bug从而使代码简洁且易于维护直观只需描述界面Compose 会负责处理剩余的工作。应用状态变化时界面会自动更新加快应用开发兼容性现有的所有代码方便随时采用。借助实时预览和全面的 Android Studio 支持实现快速迭代功能强大凭借对 Android 平台 API 的直接访问和对于 Material Design、深色主题、动画等的内置支持创建精美的应用 2、Jetpack Compose 入门教程 主要内容来自于 Google 官方的 《Jetpack Compose 教程》。 2.1 Composable 函数与预览 Jetpack Compose 围绕可组合函数构建。这些函数可让您以程序化方式定义应用的界面只需描述应用界面的外观并提供数据依赖项而不必关注界面的构建过程初始化元素、将其附加到父项等。如需创建可组合函数只需将 Composable 注解添加到函数名称中即可。 比如定义一个展示文本的可组合函数 // 注意可组合函数首字母要大写 Composable fun MessageCard(name: String) {Text(text Hello, $name) }假如想要预览 UI 效果可以在可组合函数上添加 Preview 注解但是不能直接在原来的可组合函数上加而是在一个新的函数中调用这个可组合函数 Preview Composable fun PreviewMessageCard() {MessageCard(name Android) }这样在代码编辑区的右上角切换到 Split 或 Design Tab 上可以看到实时的 UI 预览。 2.2 布局 在 Compose 中您可以通过从可组合函数中调用其他可组合函数来构建界面层次结构。 如果想为 MessageCard 内添加多个 Text需要借助 Column 将两个 Text 垂直纵向排列 fun MessageCard(message: Message) {Column {Text(text message.author)Text(text message.body)} }data class Message(val author: String, val body: String)如不使用 Column两个 Text 将会重叠在一起。 水平方向布局使用 Row再次更新 MessageCard 为其在两个文字的左侧添加一张图片 Composable fun MessageCard(message: Message) {Row {Image(painter painterResource(id R.drawable.ic_launcher_foreground),contentDescription Contact profile picture)Column {Text(text message.author)Text(text message.body)}} }为了装饰或配置可组合项Compose 使用了修饰符。通过修饰符您可以更改可组合项的大小、布局、外观还可以添加高级互动例如使元素可点击。您可以将这些修饰符链接起来以创建更丰富的可组合项。 fun MessageCard(message: Message) {// 设置四个方向的内边距为 8dpRow(modifier Modifier.padding(all 8.dp)) {Image(painter painterResource(id R.drawable.ic_launcher_foreground),contentDescription Contact profile picture,// 设置图片大小为 40dp 并进行圆形剪裁modifier Modifier.size(40.dp).clip(CircleShape))// 图片与右侧 Column 的水平间距 8dpSpacer(modifier Modifier.width(8.dp))Column {Text(text message.author)// 两个 Text 之间的纵向距离 4dpSpacer(modifier Modifier.height(4.dp))Text(text message.body)}} }效果图 2.3 Material Design Compose 旨在支持 Material Design 原则。它的许多界面元素都原生支持 Material Design。Material Design 是围绕 Color颜色、Typography排版、Shape形状 这三大要素构建的。下面逐一添加这些要素。 MaterialTheme 提供已经封装好的主题样式 MaterialTheme.colorScheme 封装了颜色值比如设置图片边框颜色时使用 MaterialTheme.colorScheme.primaryMaterialTheme.typography 提供了排版样式为组件的 style 属性提供排版值如 MaterialTheme.typography.titleSmallMaterialTheme.shapes 提供形状用于 Surface 可组合项 下面来看如何使用上述属性还是在 MessageCard 上继续添加 Composable fun MessageCard(message: Message) {Row(modifier Modifier.padding(all 8.dp)) {Image(painter painterResource(id R.drawable.ic_launcher_foreground),contentDescription Contact profile picture,modifier Modifier.size(40.dp).clip(CircleShape)// 为图片添加边框颜色使用 MaterialTheme.colorScheme.primary.border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape))Spacer(modifier Modifier.width(8.dp))Column {Text(text message.author,// 颜色color MaterialTheme.colorScheme.secondary,// 排版style MaterialTheme.typography.titleSmall)Spacer(modifier Modifier.height(4.dp))// Surface 指定形状包含 TextSurface(shape MaterialTheme.shapes.medium, shadowElevation 1.dp) {Text(text message.body,modifier Modifier.padding(all 4.dp),// 排版style MaterialTheme.typography.bodyMedium)}}} }经过上述属性的添加再次预览 UI 效果 2.4 深色主题 您可以启用深色主题或夜间模式以避免显示屏过亮尤其是在夜间或者只是节省设备电量。由于支持 Material DesignJetpack Compose 默认能够处理深色主题。使用 Material Design 颜色、文本和背景时系统会自动适应深色背景。 首先使用在项目中创建的 Material 主题 JetpackComposeTheme默认创建的主题名字就是项目名 Theme 和 Surface 来封装 MessageCard 函数。 在 Preview 和 setContent 函数中都需要执行此操作。这样一来可组合项即可沿用应用主题中定义的样式从而在整个应用中确保一致性 override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {JetpackComposeTheme {Surface {MessageCard(message Message(Android, Jetpack Compose))}}}}当系统切换为深色模式时整个 MessageCard 的布局都会切换为深色 但假如你不用 Surface 封装 MessageCard 函数就只有原本就被 Surface 封装的 “Jetpack Compose” 这个 Text 会切换其余不会 所以前面才说要被 Surface 封装。 除了在真机上运行查看效果还可以通过为可组合函数添加多个 Preview 注解进行预览 Preview(name Light Mode) Preview(name Dark Mode, uiMode Configuration.UI_MODE_NIGHT_YES, showBackground true) Composable fun PreviewMessageCard() {JetpackComposeTheme {Surface {MessageCard(message Message(Android, Jetpack Compose))}} }预览界面会为每一个 Preview 注解生成一个预览图 浅色和深色主题的颜色选项是在由 IDE 生成的 Theme.kt 文件中定义的 private val DarkColorScheme darkColorScheme(primary Purple80,secondary PurpleGrey80,tertiary Pink80 )private val LightColorScheme lightColorScheme(primary Purple40,secondary PurpleGrey40,tertiary Pink40/* Other default colors to overridebackground Color(0xFFFFFBFE),surface Color(0xFFFFFBFE),onPrimary Color.White,onSecondary Color.White,onTertiary Color.White,onBackground Color(0xFF1C1B1F),onSurface Color(0xFF1C1B1F),*/ )2.5 列表与动画 Compose 可以轻松创建列表并添加有趣的动画效果 创建消息列表在展开消息时显示动画效果 消息列表的内容在 Google 教程页面提供了下载链接内容如下 /*** SampleData for Jetpack Compose Tutorial */ object SampleData {// Sample conversation dataval conversationSample listOf(Message(Lexi,Test...Test...Test...),Message(Lexi,List of Android versions:|Android KitKat (API 19)|Android Lollipop (API 21)|Android Marshmallow (API 23)|Android Nougat (API 24)|Android Oreo (API 26)|Android Pie (API 28)|Android 10 (API 29)|Android 11 (API 30)|Android 12 (API 31).trim()),Message(Lexi,I think Kotlin is my favorite programming language.|Its so much fun!.trim()),Message(Lexi,Searching for alternatives to XML layouts...),Message(Lexi,Hey, take a look at Jetpack Compose, its great!|Its the Androids modern toolkit for building native UI.|It simplifies and accelerates UI development on Android.|Less code, powerful tools, and intuitive Kotlin APIs :).trim()),Message(Lexi,Its available from API 21 :)),Message(Lexi,Writing Kotlin for UI seems so natural, Compose where have you been all my life?),Message(Lexi,Android Studio next versions name is Arctic Fox),Message(Lexi,Android Studio Arctic Fox tooling for Compose is top notch ^_^),Message(Lexi,I didnt know you can now run the emulator directly from Android Studio),Message(Lexi,Compose Previews are great to check quickly how a composable layout looks like),Message(Lexi,Previews are also interactive after enabling the experimental setting),Message(Lexi,Have you tried writing build.gradle with KTS?),) }接下来新建一个可组合函数 Conversation使用 LazyColumn 展示 Message 列表 Composable fun Conversation(messages: ListMessage) {LazyColumn {items(messages) { message -MessageCard(message)}} }LazyColumn 与 LazyRow 这些可组合项只会呈现屏幕上显示的元素因此对于较长的列表使用它们会非常高效。 这样 MessageCard 列表就显示在屏幕上了接下来我们想实现点击 MessageCard 将消息展开/收起的效果 Composable fun MessageCard(message: Message) {Row(modifier Modifier.padding(all 8.dp)) {Image(painter painterResource(id R.drawable.profile_picture),contentDescription Contact profile picture,modifier Modifier.size(40.dp).clip(CircleShape).border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape))Spacer(modifier Modifier.width(8.dp))// 持续追踪是否展开var isExpanded by remember { mutableStateOf(false) }// 每次点击就修改 isExpandedColumn(modifier Modifier.clickable { isExpanded !isExpanded }) {Text(text message.author,color MaterialTheme.colorScheme.secondary,style MaterialTheme.typography.titleSmall)Spacer(modifier Modifier.height(4.dp))Surface(shape MaterialTheme.shapes.medium, shadowElevation 1.dp) {Text(text message.body,modifier Modifier.padding(all 4.dp),style MaterialTheme.typography.bodyMedium,// 如果展开展示全部内容maxLines if (isExpanded) Int.MAX_VALUE else 1)}}} }效果图如下 上面涉及到的主要知识点就是 Compose 的状态 API remember 和 mutableStateOf。简单说remember 就是开辟空间来保存变量的只有 isExpanded 通过 remember 将变量值保存起来这样在遇到重绘或者页面重建的情况下重新调用 MessageCard 时isExpanded 的值才不会丢失。配合 mutableStateOf 来改变 UI 状态可以实现 UI 跟随状态变化而自动更新。 有关状态 API 的详细内容会在后续详解。 使用 remember 时需要注意需要添加以下导入内容才能正确使用 Kotlin 的 委托属性语法by 关键字。按 AltEnter 键或 OptionEnter 键即可添加这些内容 import androidx.compose.runtime.getValueimport androidx.compose.runtime.setValue 最后为展开添加动画效果 Composable fun MessageCard(message: Message) {Row(modifier Modifier.padding(all 8.dp)) {Image(painter painterResource(id R.drawable.profile_picture),contentDescription Contact profile picture,modifier Modifier.size(40.dp).clip(CircleShape).border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape))Spacer(modifier Modifier.width(8.dp))var isExpanded by remember { mutableStateOf(false) }// 指定 Surface 的颜色val surfaceColor by animateColorAsState(if (isExpanded) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surface)Column(modifier Modifier.clickable { isExpanded !isExpanded }) {Text(text message.author,color MaterialTheme.colorScheme.secondary,style MaterialTheme.typography.titleSmall)Spacer(modifier Modifier.height(4.dp))Surface(shape MaterialTheme.shapes.medium,shadowElevation 1.dp,// Surface 的颜色会渐变color surfaceColor,// animateContentSize 会逐渐变化 Surface 大小圆角modifier Modifier.animateContentSize().padding(1.dp)) {Text(text message.body,modifier Modifier.padding(all 4.dp),style MaterialTheme.typography.bodyMedium,maxLines if (isExpanded) Int.MAX_VALUE else 1)}}} }效果图 3、深入详解 Compose 优化 UI 构建 3.1 Compose 所解决的问题 首先在编写可维护的软件时我们的目标是最大程度的减少耦合并增加内聚。因为高耦合意味着一处改处处改而高内聚意味着改一处足矣。 其次尽可能的将相关的代码组织到一起以便可以轻松的维护并且方便随着应用规模的增长而扩展代码这个称为关注点分离。 以 ViewModel 与布局文件为例二者之间是存在许多耦合的 即便让业务代码与布局使用不同语言强制它们分离但是它们之间的联系仍然紧密 既然使用两种语言也会耦合那么使用同一种语言会有怎样的好处 比如想要在页面展示一个列表那么需要在布局文件中增加一个 RecyclerView然后在 Java/Kotlin 代码中增加一个适配器适配器内又要写考虑条目的布局又要去搞 XML……这样使得逻辑在业务代码和布局代码中来回穿插。但如果使用相同语言的 Kotlin 进行布局就像下面这样简单 Composable fun Conversation(messages: ListMessage) {LazyColumn {items(messages) { message -MessageCard(message)}} }那么外界使用时无需关心布局具体的细节只需传入参数 messages 即可实现想要的功能。当然框架会降低耦合而不会变成零耦合因为 UI 上肯定多多少少都会带一点逻辑的。 Composable 函数剖析 3.2 声明式 UI 使用命令式 使用声明式 声明式的含义 3.3 组合 vs 继承 继承存在限制 组合的做法 再来看装饰类型的抽象 使用 Compose 解决 在 Java 的设计中组合由于继承。因此 Compose 使用组合更有利于自定义控件。 3.4 重组 在后续讲状态等多个地方都会介绍到重组它可以理解为界面的重绘。由于 Composable 函数是可以重启的因此可以利用这一点实现界面的局部刷新 使用 Compose就无需回调函数以及数据订阅等等即可更新在数据发生变化时更新 UI 总结
文章转载自:
http://www.morning.mplld.cn.gov.cn.mplld.cn
http://www.morning.fblkr.cn.gov.cn.fblkr.cn
http://www.morning.plqkz.cn.gov.cn.plqkz.cn
http://www.morning.mpscg.cn.gov.cn.mpscg.cn
http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn
http://www.morning.lhxdq.cn.gov.cn.lhxdq.cn
http://www.morning.txjrc.cn.gov.cn.txjrc.cn
http://www.morning.xcbnc.cn.gov.cn.xcbnc.cn
http://www.morning.rxwnc.cn.gov.cn.rxwnc.cn
http://www.morning.nlryq.cn.gov.cn.nlryq.cn
http://www.morning.tfcwj.cn.gov.cn.tfcwj.cn
http://www.morning.rqknq.cn.gov.cn.rqknq.cn
http://www.morning.syqtt.cn.gov.cn.syqtt.cn
http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn
http://www.morning.trzmb.cn.gov.cn.trzmb.cn
http://www.morning.fsjcn.cn.gov.cn.fsjcn.cn
http://www.morning.qieistand.com.gov.cn.qieistand.com
http://www.morning.xckrj.cn.gov.cn.xckrj.cn
http://www.morning.flqbg.cn.gov.cn.flqbg.cn
http://www.morning.ltqzq.cn.gov.cn.ltqzq.cn
http://www.morning.ptslx.cn.gov.cn.ptslx.cn
http://www.morning.pzrpz.cn.gov.cn.pzrpz.cn
http://www.morning.tqlhn.cn.gov.cn.tqlhn.cn
http://www.morning.supera.com.cn.gov.cn.supera.com.cn
http://www.morning.fqssx.cn.gov.cn.fqssx.cn
http://www.morning.glxmf.cn.gov.cn.glxmf.cn
http://www.morning.qqbjt.cn.gov.cn.qqbjt.cn
http://www.morning.hjssh.cn.gov.cn.hjssh.cn
http://www.morning.rzscb.cn.gov.cn.rzscb.cn
http://www.morning.fksdd.cn.gov.cn.fksdd.cn
http://www.morning.lywcd.cn.gov.cn.lywcd.cn
http://www.morning.snrhg.cn.gov.cn.snrhg.cn
http://www.morning.c7629.cn.gov.cn.c7629.cn
http://www.morning.xlpdm.cn.gov.cn.xlpdm.cn
http://www.morning.dxgt.cn.gov.cn.dxgt.cn
http://www.morning.vuref.cn.gov.cn.vuref.cn
http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn
http://www.morning.kcnjz.cn.gov.cn.kcnjz.cn
http://www.morning.mytmx.cn.gov.cn.mytmx.cn
http://www.morning.qnftc.cn.gov.cn.qnftc.cn
http://www.morning.ktbjk.cn.gov.cn.ktbjk.cn
http://www.morning.gghhmi.cn.gov.cn.gghhmi.cn
http://www.morning.dmwbs.cn.gov.cn.dmwbs.cn
http://www.morning.mgwpy.cn.gov.cn.mgwpy.cn
http://www.morning.nlpbh.cn.gov.cn.nlpbh.cn
http://www.morning.jtkfm.cn.gov.cn.jtkfm.cn
http://www.morning.gftnx.cn.gov.cn.gftnx.cn
http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn
http://www.morning.wtxdp.cn.gov.cn.wtxdp.cn
http://www.morning.mstrb.cn.gov.cn.mstrb.cn
http://www.morning.dndjx.cn.gov.cn.dndjx.cn
http://www.morning.qggm.cn.gov.cn.qggm.cn
http://www.morning.rgkd.cn.gov.cn.rgkd.cn
http://www.morning.zcfmb.cn.gov.cn.zcfmb.cn
http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn
http://www.morning.zstry.cn.gov.cn.zstry.cn
http://www.morning.rltw.cn.gov.cn.rltw.cn
http://www.morning.jmbgl.cn.gov.cn.jmbgl.cn
http://www.morning.wtcyz.cn.gov.cn.wtcyz.cn
http://www.morning.pzrnf.cn.gov.cn.pzrnf.cn
http://www.morning.tbksk.cn.gov.cn.tbksk.cn
http://www.morning.gnbtp.cn.gov.cn.gnbtp.cn
http://www.morning.kmwbq.cn.gov.cn.kmwbq.cn
http://www.morning.cttgj.cn.gov.cn.cttgj.cn
http://www.morning.wnywk.cn.gov.cn.wnywk.cn
http://www.morning.yzfrh.cn.gov.cn.yzfrh.cn
http://www.morning.yxlhz.cn.gov.cn.yxlhz.cn
http://www.morning.jprrh.cn.gov.cn.jprrh.cn
http://www.morning.drswd.cn.gov.cn.drswd.cn
http://www.morning.gypcr.cn.gov.cn.gypcr.cn
http://www.morning.wblpn.cn.gov.cn.wblpn.cn
http://www.morning.dxzcr.cn.gov.cn.dxzcr.cn
http://www.morning.qfdmh.cn.gov.cn.qfdmh.cn
http://www.morning.hengqilan.cn.gov.cn.hengqilan.cn
http://www.morning.znpyw.cn.gov.cn.znpyw.cn
http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn
http://www.morning.cldgh.cn.gov.cn.cldgh.cn
http://www.morning.bscsp.cn.gov.cn.bscsp.cn
http://www.morning.xqjh.cn.gov.cn.xqjh.cn
http://www.morning.jjrsk.cn.gov.cn.jjrsk.cn
http://www.tj-hxxt.cn/news/210590.html

相关文章:

  • 网站公司备案通知利尔化学股票
  • 浏览器看外国网站福建省建设银行网站
  • asp网站程序下载网站里的内容都是什么作用
  • 上海华东建设发展设计有限公司网站为什么很多网站用php做
  • 提供网站建设备案报价网站建设的知识产权归属
  • 广州上宏网站建设泰州专业网站制作公司
  • 网站建设汇报方案ppt域名备案流程是什么
  • 优化网站排名怎么制作网站流量在哪设置
  • 山西手机网站建设廊坊百度快速排名优化
  • 网站多语言版本网站内容 内链
  • 请求做女朋友的网站源码渭南哪家公司可以做网站
  • 网站型销售怎么做的郑州房产网新房
  • 有限公司网站入口星子网易云
  • 爱站seo查询软件物联网网站的建设和维护
  • 淄博网站制作多样定制域名是什么
  • 如何建设商城网站秦淮区建设局网站
  • asp.net做报名网站打开app下载
  • wordpress 建站 教程视频网页升级中永久跳转
  • 商业网站设计方案广告公司简介简短大气
  • 重庆专业网站开发服务杭州市拱墅区网站建设
  • 商河便宜做网站的公司重庆互联网公司多吗
  • 专业网页制作与网站设计网站上的二维码
  • 谷歌网站推广销售平顶山做网站多少钱
  • 软件下载网站源码精品课程网站建设总结报告
  • 校园网上零售网站建设方案泰安网站seo推广
  • 天马网络 网站建设wordpress 豆瓣
  • 网站制作及维护合同怎么在虚拟机中做网站
  • 济南房产信息网做网站优化用什么软件
  • 网站流量太大打不开怎么办代运营报价
  • 可以做游戏广告的网站扬州seo推广