android studio 3.6 新特性
android studio 3.6 稳定版已经在2月份就发布了,一直也没去看看,这两天决定看一下,老是提示我更新。新特性还是很多的,这里把自己感兴趣的几点记下来。完整的请看官方文档:https://developer.android.com/studio/releases
0、gradle 离线模式设置
当我一打开studio 3.6的时候,首先就是想要打开离线模式。
要打开gradle的离线模式,点菜单View > Tool Windows > Gradle ,然后
[
一、布局编辑器窗口可拆分
可以将xml编辑窗口与设计窗口同时在编辑器中显示,如下图所示,如果使用的是大屏,这将会方便很多,比如在设计图中选中一个元素,就会对xml中高亮对应的代码,要在代码中修改属性的话定位非常快,而且能对照着看效果
二、View binding 视图绑定
View binding 就是不用写 findViewById了,启用之后无论是java还是Kotlin都可以不用写 findViewById了。当然,Kotlin本身也支持不用写findViewById的,这一点对Kotlin来说吸引力并不大,唯一的优势我想可能是不用担心导入了错的绑定类,比方说activity_main.xml和edit_menu_activity.xml都有一个id叫tvTitle
的TextView,假定你的activity的contentView是activity_main.xml,页导入的却是edit_menu_activity.xml的绑定类(因为眼花?手抖?),像这样
import kotlinx.android.synthetic.main.edit_menu_activity.*
这时候给tvTitle
赋值就会报错说找不到view了。而用View binding 的话就可以避免这种情况的发生。其用法如下:
// 先在模块(比如app)的 build.gradle中添加以下配置
android {
viewBinding.enabled = true
}
接下来写个布局文件,名字叫 result_profile.xml
<LinearLayout ... >
<TextView android:id="@+id/name" />
<ImageView android:cropToPadding="true" />
<Button android:id="@+id/button"
android:background="@drawable/rounded_button" />
</LinearLayout>
然后在代码中:
private lateinit var binding: ResultProfileBinding
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
binding = ResultProfileBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}
接下来在xml中所有有id的元素都可以用binding来引用了
binding.name.text = viewModel.name
binding.button.setOnClickListener { viewModel.userClicked() }
view binding 与 data binding的比较:
优势:
1、编译速度更快,view binding不使用注释,所以不需要进行注释处理,编译速度相对更快
2、更容易使用:view binding不需要特殊标记的XML布局文件,布局文件跟传统的写法一模一样,不需要添加什么额外的东西,用起来更顺手。而且在模块中启用视图绑定后,它将自动应用于该模块的所有布局。
如果你想单独不绑定某个布局文件的话也可以,在根元素添加以下属性,如:
<LinearLayout
...
tools:viewBindingIgnore="true" >
...
</LinearLayout>
弱势:
1、view binding无法进行数据绑定,不能在xml中动态地为元素的属性赋值,比如要显示用户名,只能在登录后在代码中根据用户显示。
2、不支持双向绑定
所以要根据自己的实际需要选择使用view binding 还是 data binding
三、 apply changes
apply changes 严格来讲不是3.6的新特性,3.5开始就有了,不过之前没怎么关注它,我觉得是个挺有意思的东西,可惜我的测试机版本太低,平时都用不上这个功能。 apply changes是做什么的呢?就是在开发中改了代码或资源文件,不用重新编译apk,不用安装,不用重启app,甚至在某些情况下连activity也不用重启,就可以将修改的东西应用到已打开的app中,这样就可以更快地看到修改的效果。相对于Run要快很多,是不是觉得很期待,马上要去试一下?不过
apply changes 功能只能在android8.0(api26)以上的机器才能使用,并且要是debug版本的包
apply changes又分为Apply Changes and Restart Activity 和 Apply Code Changes (其实Run也是apply changes的一部分)。
Apply Changes and Restart Activity,顾名思义,就是应用修改并重启Activity。当你修改了代码,又修改了资源文件的时候可以应用这种方式直接重启activity而不需要重启app
Apply Code Changes,就是当你只修改了代码,并没有修改资源文件的时候,应用它连activity也不需要重启就能看到修改的效果。
但是要注意,以下情况是不能应用以上两种方式查看效果的,只能用平常用的run才有效。
- 增加或删除了一个方法或一个字段
- 改变了方法的签名,如改了方法名,参数名字或个数
- 更改方法或类的修饰符
- 更改类继承
- 更改枚举中的值
- 添加或删除资源
- 更改应用清单
- 更改SO文件
由于水平有限,如果文中存在错误之处,请大家批评指正,欢迎大家一起来分享、探讨!