androidviewbinding的简单介绍
本篇文章给大家谈谈androidviewbinding,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、解决DialogFragment状态栏亮色问题
- 2、ViewBinding与RecycleView(一)
- 3、android mvvm 角色分别有哪些担任
- 4、Android-Studio中View-Binding的使用
- 5、Android View Binding的使用
解决DialogFragment状态栏亮色问题
请先看上一篇文章,本篇文件紧接着上一篇的思路和框架,所有的操作还是在父类的拍雹 BaseDialog 下进行
官方文档: 视图绑定 | Android 开发者 | Android Developers (google.cn)
先说点题外话,DialogFragment也可以使用ViewBinding作为布局
在 BaseDialog 中添加一个泛型 VB 继承 ViewBinding ,添加父类通用的 binding 变量和 binding 泛型实例化的方法
这一波操作结束之后,子类的 binding 都可以直接调用获取相闷贺唯应的 View
和之前一样重写 onCreateView 方法,只不过这里的的返回值需要改成第一步中的 initViewBinding
至此,ViewBinding就可用在DialogFragment上了
LightStatusBar (以下简称亮色模式)属性在 DialogFragment 中一直是让我头疼的,主要是项目需求非常涣散,你根本不知道甲方会派一个什么外行来设计需求或者UI,有些时候弹窗是有背景蒙层的(就是背景自带的半透明黑,以下简称 Dim ),有些时候又不需要蒙层,反正UI也是想一出是一出,完全没有标准的设计方案。
在DialogFragment中就更令人烦躁,当 Dim 设置为0,且 Activity 开启亮色模式时,你会惊奇的发现状态栏不见了,其实是白色状态栏和白色的状态栏字体融合了。
有些人这个时候会将 Dialog 宽高设置成 MATCH_PARENT ,那么问题又来了,点击外部取消弹窗失效。
在网上找了很久还是没有直接有效的方法,干脆自己琢磨,最终找到一个比较可行的方案:重写 onCreateDialog 方法
当 Dim 小于0.1时禁用 Dim ,这个时候就可以设置亮色模式了,当 Dim 有值时,状态栏本身就是白色字体,不影响界面显示,下面是 Theme
注意, Theme 这里的 parent 属性,可以设置成蚂培任何一个 Dialog ,但是千万不要使用 Dialog.Alert ,会导致 Dialog 显示的位置有问题,暂时没有时间去挖源码
到此,解决一个烦人的小问题,如果有更好的方案,欢迎在评论区回复。
[img]ViewBinding与RecycleView(一)
在Android Studio 3.6的稳定版本中,我们就可以使用ViewBinding替代 findViewById
官方介绍
另外关于 ViewBinding 与 Kotlin Android Extensions 的区分这里不多做介绍,
可以参考下 stackoverflow中的讨论
ViewBinding如何使用?如果是Kotlin DSL的话这样添加:
否则:
然后在activity中:
在 app/buildle/generated/data_binding_base_class_source_out/... 目录看下生成的 ActivityTabBinding 类
关注下 ActivityTabBinding 类中的 inflate 方法是不是游庆跟我们RecycleView中的 onCreateViewHolder 方法特别像?创建 View root 时都不会将其添加到父对象闷搭 ViewGroup 上,一般神罩握我们创建 ViewHolder 像这样:
所以我们可以给自定义ViewHolder类传入ViewBinding引用 :
我们再给ViewGroup提供一个扩展方法省去ViewHolder在 onCreateViewHolder 中的创建 :
利用ViewBinding 一个简单的Adapter就这样:
CategoryItemBinding 是根据xml文件自动生成的
综上,这些是比较简单的操作..
kotlin源码中的实现判空的委托属性:
其中 NotNullVar 继承了 ReadWriteProperty,并实现了他的两个方法,而Delegates.notNull() 属于委托属性。
看一个自定义委托findViewById的例子:
如果我们把itemView与数据源的绑定通过自定义委托来代理,那是不是会方便很多??
简单说就是在一个map里存储属性的值,可以使用映射实例自身作为委托来实现委托属性。例如json解析
那itemView的setTag与getTag是否可以放在MutableMap中进行处理?
adapter中还有大量工作需要去做,比如itemView的setTag、OnClickListener()、ViewHolder中进行数据源与itemView的绑定,那么如何利用kotlin特性将这些行为进一步抽取?......
android mvvm 角色分别有哪些担任
MVVM的目标和思想MVP类似,利用数据绑定(Data Binding)、依赖属性(Dependency Property)、命令(Command)、路由事件(Routed Event)等新特性,打造了一个更加灵活高效的架构。
数据驱动
在MVVM中,以前开发模式中必须先处理业务数据,然后根据的数据变化,去获取UI的引用然后更新UI,通过也是通过UI来获取用户输入,而在MVVM中,数据和业务逻辑处于一个独立的View Model中,ViewModel只要关注数据和业务逻辑,不需要和UI或者控件打交道。由数据自动去驱动UI去自动团昌敬更新UI,UI的改变又同时自动反馈到数据,数据成为主导因素,这样使得在业务逻辑处理迅毕只要关心数据,方便而且简单很多。
低耦合度
MVVM模式中,数据是独立于UI的,ViewModel只负责处理和提供数据,UI想怎么处理数据都由UI自己决定,ViewModel 不涉及任何和UI相关的事也不持有UI控件的引用,即使控件改变(TextView 换成 EditText)ViewModel 几乎不需要更改任何代码,专注自己的数据处理就可以了,如果是MVP遇到UI更改,就可能需要改变获取UI的方式,改变更新UI的接口,改变从UI上获取输入的代码,可能还需要更改访问UI对象的属性代码等等。
更新 UI
在MVVM中,我们可以在工作线程中直接修改View Model的数据(只要数据是线程安全的),剩下的数据绑定框架帮你搞定,很多事情都不需要你去关心。
团队协作
MVVM的分工是非常明显的,由于View和View Model之间是松散耦合的。一个是处理业务和数据,一个是专门的UI处理。完全有两个人分工来做,一个做UI(xml 和 Activity)一个写ViewModel,效率更高。
可复用性
一个View Model复用到多个View中,同样的一份数据,用不同的UI去做展示,对于版本迭代频繁的UI改动,只要更换View层就行,对于如果想在UI上的做AbTest 更是方便的多。
单元测塌慎试
View Model里面是数据和业务逻辑,View中关注的是UI,这样的做测试是很方便的,完全没有彼此的依赖,不管是UI的单元测试还是业务逻辑的单元测试,都是低耦合的。
Android-Studio中View-Binding的使用
首先需要使用AndroidStudio 3.6 Canary 11之上的版本,升级gradle plugin版本到3.6.0 beta01以上
在build.gradle中修改如下在android中添加如下
android {
...
buildFeatures {
viewBinding true
}
...
}
在项目中开启了ViewBinding后,就会为每一个布局文件生成一对应的绑定文件,如果不需要生卖缓成绑定文件,只需碰哗要在根布局添加:tools:viewBindingIgnore="true":
...
tools:viewBindingIgnore="true"
中吵模...
在Activity中使用View Binding
Android View Binding的使用
官方文档
View Binding是Android Studio 3.6推坦纳出的新特性,目的是为了替代findViewById(内部实现还是使用findViewById)。。在启动视图绑定后,系统会为改模块中的每个xml文件生成一个绑定类,绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。游弯
View Binding 的优点
如果想在生成绑定类时忽略某个布局文件,将 tools:viewBindingIgnore="true" 属性添加到相应布局文件的神信闷 根视图 中:
为用视图绑定功能后,系统会为该模块中包含的每个 XML 布局文件生成一个绑定类。这个类的类名是以xml布局文件名去掉下换线后,单词首字母大写加上Binding命名的。如activity_main.xml生成的类ActivityMainBinding.
2.不通过反射的方式
关于androidviewbinding和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。