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
当我们上拉的时候,会出现一个提示界面,即 ListView 的 Footer 布局。...当我们开始滚动时,Footer 布局才慢慢显示出来,所以需要监听 ListView 的 onTouch() 事件。...自定义一个 FooterView,将 FooterView 添加到 ListView 底部,在上拉时候的显示和完成时候的隐藏。...1、定义 Footer Footer 要实现的效果: 第一次上拉时,Footer 逐渐显示,文字显示为下拉可以加载,箭头向上,进度条隐藏。 当松开加载的时候,箭头隐藏,进度条展示,文字改为正在加载。.../pull_to_refresh_arrow" / <ProgressBar android:id="@+id/progress" style="@style/progressBar_custom_drawable
前言 Android中WebView打卡前端页面时受到网路环境,页面内容大小的影响有时候会让用户等待很久。显示一个加载进度条可以提升很大的体验。微信内访问H5页面加载效果不错,效仿着写了一个。...类 class ProgressWebView(context: Context, attr: AttributeSet) : WebView(context, attr) { /** *xml布局中使用...,所以用两个构造参数的构造函数 */ private var progressBar: ProgressBar?...的布局参数 */ val layoutParams = FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, 10, 0) /** *绑定参数..."/ 1-3.代码实现 /** *android kotlin 的拓展,导入此包 使用到的组件不用findViewById */ import kotlinx.android.synthetic.main.activity_main
; 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,根据绑定状态而定,绑定过蓝牙的点击就是取消绑定,这里调用了一个方法。
看图说话: 上图是不是加载网页的时候会有一个进度条在横向加载,比以前网速不好的时候是一片空白给人的感觉友好多了是不,然后效果还不错。...实现思路 就是自己画一条进度线(大家应该都会吧)然后加载到WebView的上面,开始进度条是隐藏的,进度线初始值为1,然后为了效果好一点,初始少于10的进度都让它加载到10的位置,等进度到100的时候0.2...注意:使用渐变时数组的长度和透明度数组长度必须一致,否则会报错的 步骤二:自定义封装webView #ProgressWebView.java package com.losileeya.materialprogresswebview.widget...(newProgress)来更新进度,进度到100时再隐藏,是不是思路很清晰,其他的就是一些webView的设置和封装这里都有清楚的注释,自己去看。...使用ProgressWebView加载网页 布局使用: #activity_main.xml <?xml version="1.0" encoding="utf-8"?
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); -> 设置文本字体默认的大小...1 布局文件:activity_main.xml <?...布局规则,ProgressBar会覆盖在WebView之上,默认是隐藏不显示。...addJavascriptInterface传入的name一起使用的。
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项目,和Java还是有区别的,建议了解了Kotlin的语法再看文章会比较好,当然你也可以对照我写的Android 蓝牙开发(扫描设备、...然后是styles.xml文件 [在这里插入图片描述] 上面不涉及到代码,所以Java和Kotlin中的资源文件配置是差不多的。...在上面的代码中DeviceAdapter继承了BaseQuickAdapter,这一点和Java的相似,如下图所示 [在这里插入图片描述] 而Kotlin的语法可以让你把构造方法的参数作为类参数使用,这样解释不知道是不是对的...val 表示不可变量,而通过Kotlin的类型推导机制,tvName此时代表的就是一个通过R.id.tv_name实例化之后的TextView。...避免重复添加和添加null的设备进入列表,而点击item,根据绑定状态而定,绑定过蓝牙的点击就是取消绑定,这里调用了一个方法。
⑦ 数据渲染 ⑧ 开始和停止扫描 四、连接和数据交互 ① 绑定视图 ② 初始化连接 ③ 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-extensions插件的人可能并不知道这些隐藏的“坑”,这个问题在稍后介绍RecyclerView Adapter...当然,如果有些布局文件你不希望为它生成对应的Binding类,可以在该布局文件的根元素位置加入如下声明: <LinearLayout xmlns:tools="http://schemas.<em>android</em>.com...讲完了<em>kotlin</em>-<em>android</em>-extensions插件<em>的</em>“坑”,接下来我们还是看一下如何在Adapter中<em>使用</em>ViewBinding,别忘了我们<em>的</em>目标始终是<em>不</em>写findViewById。...merge<em>和</em>include最大<em>的</em>区别在于,<em>使用</em>merge标签引入<em>的</em><em>布局</em>在某些情况下可以减少一层<em>布局</em><em>的</em>嵌套,而更少<em>的</em><em>布局</em>嵌套通常就意味着更高<em>的</em>效率。...="Done" /> 可以看到,这里最外层的布局使用了merge标签,这就表示当有任何一个地方去include这个布局时,会将merge标签内包含的内容直接填充到include的位置
近两年由于谷歌对Kotlin的支持,我们开始使用 Android Kotlin extensions。 在文件中导入布局文件直接引用viewId。无需做其他额外操作,最为方便。...开发者直接使用就可以。和 Android Kotlin extensions 相比较我觉得都二者差不多。说不上谁更好。...和databinding相比较就是数据绑定库仅处理使用 <layout 代码创建的数据绑定布局。它具有局限性。...这意味着没有类强制转换异常的风险。 这些差异意味着布局和代码之间的不兼容性将导致编译在编译时而不是在运行时失败。...•view binding不支持布局变量或布局表达式,因此不能用于将布局与XML数据绑定。
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 绑定方式启动服务” 第一段第三行的“表示解除绑定并停止服务(如果原来没有启动)”改为“表示解除绑定并停止服务(如果原来有启动)”,也就是把括号里面的“没有”改成“有”。
领取专属 10元无门槛券
手把手带您无忧上云