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 ,然后

android studio 显示实时时间 android studio实时浏览_重启


[

一、布局编辑器窗口可拆分

可以将xml编辑窗口与设计窗口同时在编辑器中显示,如下图所示,如果使用的是大屏,这将会方便很多,比如在设计图中选中一个元素,就会对xml中高亮对应的代码,要在代码中修改属性的话定位非常快,而且能对照着看效果

android studio 显示实时时间 android studio实时浏览_重启_02

二、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 ActivityApply Code Changes (其实Run也是apply changes的一部分)。

Apply Changes and Restart Activity,顾名思义,就是应用修改并重启Activity。当你修改了代码,又修改了资源文件的时候可以应用这种方式直接重启activity而不需要重启app

Apply Code Changes,就是当你只修改了代码,并没有修改资源文件的时候,应用它连activity也不需要重启就能看到修改的效果。

但是要注意,以下情况是不能应用以上两种方式查看效果的,只能用平常用的run才有效。

  1. 增加或删除了一个方法或一个字段
  2. 改变了方法的签名,如改了方法名,参数名字或个数
  3. 更改方法或类的修饰符
  4. 更改类继承
  5. 更改枚举中的值
  6. 添加或删除资源
  7. 更改应用清单
  8. 更改SO文件


由于水平有限,如果文中存在错误之处,请大家批评指正,欢迎大家一起来分享、探讨!