Switch Switch 是一个切换开关控件,用于在开和关之间切换状态。 属性 android:textOn: 设置开状态时的文本。 android:textOff: 设置关状态时的文本。...ListView ListView 是一个用于显示滚动列表的控件,每个列表项可以是一个自定义的视图。 使用步骤 定义布局: 创建一个包含 ListView 的布局。...创建适配器: 使用适配器将数据绑定到 ListView。 设置适配器: 将适配器设置到 ListView 上。...使用步骤 定义布局: 创建一个包含 RecyclerView 的布局。 创建适配器: 实现 RecyclerView.Adapter,定义数据和视图的绑定逻辑。...通过合理地使用这些控件,可以开发出功能强大且用户体验良好的应用程序。希望这篇博客能够帮助你更好地理解和使用Android的控件,如果有任何问题或想法,欢迎在评论区讨论!
我开源一个基于Kotlin和Databinding特性的RecyclerView库: BRV, 具备无与伦比的简洁和MVVM特性; 布局 布局文件 ...android:text="@{userName}" 两个布局通过include的bind:变量名>值来传递....而且两者必须有同一个变量 DataBinding不支持merge标签传递变量 自动布局属性 DataBinding对于自定义属性支持非常好, 只要View中包含setter方法就可以直接在布局中使用该属性...但是如果是视图设置数据则会走其他函数(get), 如果该函数返回的类型和Model中的类型不匹配则会报异常, 除非你将那个函数改为类型匹配的....在数据和视图的数据不统一时可以使用该注解@InverseMethod解决数据转换的问题 例如数据模型存储用户的id但是视图不显示id而是显示用户名(数据和视图的类型不一致), 我们就需要在两者之间转换.
0.前言 协程以前一直是Kotlin作为实验性的一个库,前些日子发现1.3版本的kotlin relese了协程,所以就找时间研究了一下,本来早就想写这篇文章了,但是因为离职换工作的原因,迟迟未能动笔,...1.2协程和线程的关系 协程和线程,都能用来实现异步调用,但是这两者之间是有本质区别的 (1)协程是编译器级别的,线程是系统级别的。协程的切换是由程序来控制的,线程的切换是由操作系统来控制的。...(2)协程是协作式的,线程是抢占式的。协程是由程序来控制什么时候进行切换的,而线程是有操作系统来决定线程之间的切换的。 (3)一个线程可以包含多个协程。...2.简单用法 这里我打算模仿一个网络请求,点击button发送网络请求,显示一个progressbar打转,返回结果后一个textview显示结果并隐藏progressbar 先看一下布局文件 ...4.最后 这年头用Kotlin来开发android应用确实越来越爽快了,一些新的特性也逐渐加入到Kotlin中,值得更加学习,当然还有Flutter,以后会陆续写几个关于Flutter的文章,毕竟release
; b):在相对的布局中在线性的orientation方向和权重在相对的布局中并不适用; c):组件默认左对齐、顶部对齐 * 设置组件在指定组件的右边 android:layout_toRightOf...visible表示控件是可见的,这个值是默认值,不指定 android:visibility时,控件都是可见的。...一般用invisiable让它占位,不占位可能布局会发现问题,可能跑到上边去 Android的Margin和Padding跟Html的是一样的。...SimpleAdapter //集合中每个元素都包含ListView条目需要的所有数据,该案例中每个条目需要一个字符串和一个整型,所以使用一个map来封装这两种数据 List<Map<String...;default:break;} 在按钮的点击事件中,通过 getVisibility()方法来判断 ProgressBar是否可见,如果可见就将 ProgressBar隐藏掉,如果不可见就将 ProgressBar
没错,这就是Kotlin语言的Android项目,和Java还是有区别的,建议了解了Kotlin的语法再看文章会比较好,当然你也可以对照我写的Android 蓝牙开发(扫描设备、绑定、解绑)Java版来看...上面不涉及到代码,所以Java和Kotlin中的资源文件配置是差不多的。 ② 布局和样式 图片资源 ? ? ? ? ? ?...而Kotlin的语法可以让你把构造方法的参数作为类参数使用,这样解释不知道是不是对的,这里传了一个布局id和数据源。...val 表示不可变量,而通过Kotlin的类型推导机制,tvName此时代表的就是一个通过R.id.tv_name实例化之后的TextView。...避免重复添加和添加null的设备进入列表,而点击item,根据绑定状态而定,绑定过蓝牙的点击就是取消绑定,这里调用了一个方法。
Kotlin 真的是一门美丽的开发语言,她拥有的一些很棒的特性使 Android 开发变成的有趣和令人兴奋。...我们可以这样使用刚才创建的委托: class Example { //使用 by 关键字 var param: String by TrimDelegate() } 上面的代码和下面的代码效果相同...View 委托 假设我们有一个自定义View,它包含三个文本字段——一个标题,一个子标题,还有描述——布局如下: <LinearLayout xmlns:android="http://schemas.android.com...Kotlin Android Extension的视图绑定来获取布局中的控件。...总结 我们看来一些在 Android 开发中使用 Kotlin 委托属性的例子。当然了,你也可以用别的方式来使用它。 这篇文章的目标是展示委托属性是多么强大,以及我们可以用它做什么。
onPause():暂停状态,页面被失去焦点,暂停所有进行中的动作,如:DOM解析、CSS和JavaScript执行等。...webSettings.setMinimumFontSize(8); -> 设置文本字体的最小值(1~72)webSettings.setDefaultFontSize(16); -> 设置文本字体默认的大小...android:name="android.permission.INTERNET" />1 布局文件:activity_main.xml 布局规则,ProgressBar会覆盖在WebView之上,默认是隐藏不显示。...addJavascriptInterface传入的name一起使用的。
二、开发环境介绍 本示例使用Android Studio作为开发环境,采用XML、Java和Kotlin实现布局和逻辑实现有两种方案。 三、技术实现 第一种方案 在XML布局文件中定义进度条。...使用ProgressBar控件,设置其样式、尺寸和位置,适应车机应用的界面。...通常是一个包含背景层和进度层的layer-list。 <?xml version="1.0" encoding="utf-8"?...(40); Kotlin代码 val mChargeProgressBar: ProgressBar = getMainView().findViewById(R.id.charge_progress_bar...通过本文的介绍,希望帮助开发者在车机应用中实现更美观和实用的进度条。 谢谢大家的阅读 )
⑦ 数据渲染 ⑧ 开始和停止扫描 四、连接和数据交互 ① 绑定视图 ② 初始化连接 ③ Ble回调 ④ 帮助类 ⑤ UI回调 五、源码 前言 写这篇文章是因为有读者想看看Kotlin中怎么操作低功耗蓝牙...,再加上我也想写一些关于Kotlin的内容,对于低功耗蓝牙的Java版的,我写了两篇,一个是扫描、连接,另一篇就是数据交互,而这篇Kotlin文章我会减少讲解的环节,更多的注重业务逻辑和UI以及Kotlin...由ViewBinding根据布局生成的 //视图绑定 private lateinit var binding: ActivityMainBinding 然后在onCreate中进行绑定 override...当然最主要的是多使用Kotlin,作为弱类型语言,代码的阅读需要有一定的Kotlin基础才可以,高阶的写法可读性很差,但是效率很高代码也很简洁。...BaseQuickAdapter的使用,之前我是没有通过ViewBinding去进行布局绑定的,都是通过R.layout.item布局文件进行的,那么换成了ViewBinding要怎么操作呢?
⑦ 数据渲染 ⑧ 开始和停止扫描 四、连接和数据交互 ① 绑定视图 ② 初始化连接 ③ Ble回调 ④ 帮助类 ⑤ UI回调 五、源码 前言 写这篇文章是因为有读者想看看Kotlin中怎么操作低功耗蓝牙...,再加上我也想写一些关于Kotlin的内容,对于低功耗蓝牙的Java版的,我写了两篇,一个是扫描、连接,另一篇就是数据交互,而这篇Kotlin文章我会减少讲解的环节,更多的注重业务逻辑和UI以及Kotlin...当然最主要的是多使用Kotlin,作为弱类型语言,代码的阅读需要有一定的Kotlin基础才可以,高阶的写法可读性很差,但是效率很高代码也很简洁。...BaseQuickAdapter的使用,之前我是没有通过ViewBinding去进行布局绑定的,都是通过R.layout.item布局文件进行的,那么换成了ViewBinding要怎么操作呢?...,只要传入数据和布局文件的id就可以了,但是现在布局id变成了ViewBinding,因此就需要对这个BaseViewHolder进行一个覆写,这个方式我也是参考了网上博客的内容, 新建一个adapter
[在这里插入图片描述] 没错,这就是Kotlin语言的Android项目,和Java还是有区别的,建议了解了Kotlin的语法再看文章会比较好,当然你也可以对照我写的Android 蓝牙开发(扫描设备、...然后是styles.xml文件 [在这里插入图片描述] 上面不涉及到代码,所以Java和Kotlin中的资源文件配置是差不多的。...在上面的代码中DeviceAdapter继承了BaseQuickAdapter,这一点和Java的相似,如下图所示 [在这里插入图片描述] 而Kotlin的语法可以让你把构造方法的参数作为类参数使用,这样解释不知道是不是对的...val 表示不可变量,而通过Kotlin的类型推导机制,tvName此时代表的就是一个通过R.id.tv_name实例化之后的TextView。...避免重复添加和添加null的设备进入列表,而点击item,根据绑定状态而定,绑定过蓝牙的点击就是取消绑定,这里调用了一个方法。
ViewBinding 是 Android Gradle Plugin 3.6 中新增的特性,用于更加轻量地实现视图绑定(即视图与变量的绑定),可以理解为轻量版本的 DataBinding。...ViewBinding 是 Android Gradle Plugin 3.6 中新增的特性,用于更加轻量地实现视图绑定(即视图与变量的绑定),可以理解为轻量版本的 DataBinding。...和 ButterKnife 需要在代码中声明很多变量,其他几种方案代码简洁度较好; 2、编译检查: 编译期间主要有两个方面的检查:类型检查 + 只能访问当前布局中的 id。...1.3 ViewBinding 的实现原理 AGP 插件会为每个 XML 布局文件创建一个绑定类文件 xxxBinding ,绑定类中会持有布局文件中所有带 android:id 属性的 View 引用...总结 ViewBinding 是一个轻量级的视图绑定方案,Android Gradle 插件会为每个 XML 布局文件创建一个绑定类。
最重要的是,这些内容对于绝大部分开发者来说都是黑盒,使用kotlin-android-extensions插件的人可能并不知道这些隐藏的“坑”,这个问题在稍后介绍RecyclerView Adapter...当然,如果有些布局文件你不希望为它生成对应的Binding类,可以在该布局文件的根元素位置加入如下声明: <LinearLayout xmlns:tools="http://schemas.android.com...讲完了kotlin-android-extensions插件的“坑”,接下来我们还是看一下如何在Adapter中使用ViewBinding,别忘了我们的目标始终是不写findViewById。...merge和include最大的区别在于,使用merge标签引入的布局在某些情况下可以减少一层布局的嵌套,而更少的布局嵌套通常就意味着更高的效率。...="Done" /> 可以看到,这里最外层的布局使用了merge标签,这就表示当有任何一个地方去include这个布局时,会将merge标签内包含的内容直接填充到include的位置
Kotlin语言并且使用了协程和Flow,所以也需要添加协程的库如下: implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:...Paging的加载状态 Paging3 为我们提供了获取Paging加载状态的方法,其中包含添加监听事件的方式以及在adapter中直接显示的方式,首先我们来看监听事件的方式 使用监听事件方式获取加载状态...viewHolder LoadStateViewHolder绑定布局是底部显示的布局,一个正在加载的显示以及一个重试按钮,xml布局如下所以: 正在加载提示和重新请求的布局默认都是隐藏...除此之外,Paging3中还有一个比较重要的RemoteMediator,用来更好的加载网络数据库和本地数据库,我们后续有机会再为大家单独分享吧~ 2020年11月21日更新 paging3的设计理念是不建议对列表数据直接修改
有些是因为功能不完整或有Bug,有些是因为使用起来太复杂,十全十美的还真没找到。因此我也是放弃了在网上找现成代码的想法,自己花功夫编写了一种非常简单的下拉刷新实现方案,现在拿出来和大家分享一下。...这里我们将采取的方案是使用组合View的方式,先自定义一个布局继承自LinearLayout,然后在这个布局中加入下拉头和ListView这两个子元素,并让这两个子元素纵向排列。...> 在这个布局中,我们包含了一个下拉指示箭头,一个下拉状态文字提示,和一个上次更新的时间。...*/ private ProgressBar progressBar; /** * 指示下拉和释放的箭头 */ private ImageView arrow; /** *...在Activity的布局文件中加入自定义的RefreshableView,并让ListView包含在其中。 2.
资源下载 下面是《Android Studio开发实战 从零基础到App上线》一书用到的工具和代码资源: 1、本书使用的Android Studio版本为3.0.1,Kotlin版本为1.2.0...,最新的Android Studio安装包可前往Android官网页面下载。...7、第55页的“3.4.3 s和in” 该小节的标题“s和in”要改为“is和in”。...14、第180页的“7.2.5 仿支付宝首页的头部伸缩特效” 第三段的倒数第二行“遮罩变得越来越不透明”改为“遮罩变得越来越透明”,也就是去掉“不”字。...18、第277页的“9.4.2 绑定方式启动服务” 第一段第三行的“表示解除绑定并停止服务(如果原来没有启动)”改为“表示解除绑定并停止服务(如果原来有启动)”,也就是把括号里面的“没有”改成“有”。
、 Dragger 等等,但是随着谷歌官方推出了 DataBinding , Kotlin 很多框架都不在使用,甚至很少更新,甚至不更新了。...使用 DataBinding 会让我们的布局文件不简简单单的只有一个布局文件的作用,还包含和很多的逻辑。可以大量减少 Activity 内的代码。...对比之前的布局文件,我们发现多出了一个「layout」标签将原来的布局包裹起来,同时还多了一个「data」标签,这个标签是用来声明要用到的变量以及变量的类似使用。...声明了一个 Student 的类似数据变量 「studentInfo」,接下来我们就需要把 Student 当中的两个变量和布局文件当中的 TextView 控件关联上,而我们的关联的方式就是我们的数据变量...通过设置「studentInfo」变量值,同时使 TextView 显示我们要设置的文本信息,完整代码如下 <?xml version="1.0" encoding="utf-8"?
写到这里,我们的这个项目已经完成了一大半了,接下来开始进行界面展示相关的工作。 由于Paging 3是必须和RecyclerView结合使用的,下面我们定义一个RecyclerView的子项布局。...android:layout_gravity="center_vertical" /> 这个布局中使用到了一个图片资源,可以到本项目的源码中去获取...修改activity_main.xml布局,在里面定义一个RecyclerView和一个ProgressBar: 使用Kotlin的高阶函数来给重试按钮注册点击事件,这样当点击重试按钮时,构造函数中传入的函数类型参数就会被回调,我们待会将在那里加入重试逻辑。...最后,如果你需要获取Paging3Sample项目的源码,请访问以下地址: https://github.com/guolindev/Paging3Sample 另外,如果想要学习Kotlin和最新的Android
MVI框架适用于UI变化很多的项目,通过数据去驱动UI,MVI就是Model、View、Intent。 Model 这里的Model有所不同,里面还包含UI的状态。...三、意图与状态 之前我们说MVI的I 是Intent,表示意图或行为,和ViewModel一样,我们在使用Intent的时候,也是一个Intent对应一个Activity/Fragment。...:paddingStart="2dp" android:paddingEnd="2dp" android:visibility="gone" /> ProgressBar...initView()函数中是控件的一些配置,比如给RecyclerView添加布局管理器和设置适配器,给按钮添加点击事件,在点击的时候发送意图,发送的意图被MainViewModel中mainIntentChannel...observeViewModel()函数中是对状态的收集,在状态为Loading,隐藏按钮,显示加载条,然后网络请求会有结果,如果是成功,则在UI上隐藏按钮和加载条,显示列表控件,并添加数据到适配器中,
领取专属 10元无门槛券
手把手带您无忧上云