android.widget.Toolbar和android.support.v7.widget.Toolbar有什么区别?

时间:2019-04-03 09:22:08

标签: java android android-appcompat

有人可以告诉我它们之间的区别吗,为什么它们不能互换?

导入android.widget.Toolbar会导致编译错误,而导入android.support.v7.widget.Toolbar则效果很好。

这两种进口有什么区别?

import android.widget.Toolbar;

...

Toolbar toolbar = findViewById(R.id.app_bar);

setSupportActionBar(toolbar);

import android.support.v7.widget.Toolbar;

...

Toolbar toolbar = findViewById(R.id.app_bar);

setSupportActionBar(toolbar);

3 个答案:

答案 0 :(得分:1)

支持库(现为AndroidX)旨在向后兼容,而android.widget.Toolbar是当前的平台类型。
如果您不知道支持库是什么,请查看this answer
默认情况下,Android Studio使您可以使用支持库中的AppCompatActivity,因此也需要支持工具栏。

答案 1 :(得分:0)

当您看到v4 Support Libraries时,就会知道它是API水平较低(向后兼容)的较旧设备的android支持库。

  

与其他库相比,这些库包含最大的API集,包括对应用程序组件,用户界面功能,可访问性,数据处理,网络连接和编程实用程序的支持。

您可以检查所有支持库here

注意-您还可以使用AndroidX,它是新的和改进的支持库。

  

AndroidX是对原始Android支持库的重大改进。

答案 2 :(得分:0)

为什么会出现编译错误?

因为setSupportActionBar(toolbar)中的参数是

android.support.v7.widget.Toolbar而不是

android.widget.Toolbar

如何检查?

setSupportActionBarAppCompatActivity的一部分。如果要查看该参数,则只需在Activity中覆盖该方法并删除导入,它将指示应导入哪个类以摆脱Compilation错误。

enter image description here

  

有什么区别?

这很明显。两者都是不同的类,一个属于支持库,另一个不属于。

与AppCompatActivity共轭

所有新功能都会不断添加到支持库中,以便您在所有API级别上都具有相同的功能。换句话说,支持库会不断更新。例如,建议将android.support.v4.app.Fragment与AppcompatActivity结合使用。
因此,跨所有API级别的兼容性可能是一个原因。

要点如果您的活动扩展了AppCompatActivity,则使用

  • android.support.v7.widget.Toolbar
  • android.support.v4.app.Fragment
  • android.support.v7.widget.RecyclerView等