如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar
Posted
技术标签:
【中文标题】如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar【英文标题】:How to set MaterialToolbar as ActionBar without support libraries 【发布时间】:2021-01-31 22:46:22 【问题描述】:有没有办法将MaterialToolbar
设置为Activity
的ActionBar
?每当我尝试设置我的设置时,android Studio 都会不断从支持库中请求Toolbar
。
必需:工具栏? - 找到:MaterialToolbar
XML
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.AppBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:id="@+id/myAppBarLayout">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/myCollapsingToolbarLayout"
android:layout_
android:layout_
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|snap|exitUntilCollapsed">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/myToolbar"
android:layout_
android:layout_
app:contentInsetStartWithNavigation="0dp"
app:layout_collapseMode="pin" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
科特林
class MainActivity : Activity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.collapsingtoolbar_and_recyclerview)
val mCoordinatorLayout = findViewById<CoordinatorLayout>(R.id.myCoordinatorLayout)
val mCollapsingToolbarLayout = findViewById<CollapsingToolbarLayout>(R.id.myCollapsingToolbarLayout)
val mToolbar = findViewById<MaterialToolbar>(R.id.myToolbar)
// ...Do other stuff here
setActionBar(mCollapsingToolbarLayout)
mCollapsingToolbarLayout.title = "Hello, world!"
【问题讨论】:
【参考方案1】:setActionBar()
需要一个框架 Toolbar
。 MaterialToolbar
正确扩展了AndroidX Toolbar
,这意味着您必须使用AppCompatActivity
和setSupportActionBar()
而不是Activity
和setActionBar()
。
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.collapsingtoolbar_and_recyclerview)
//[...]
val toolbar = findViewById<MaterialToolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)
// ...Do other stuff here
supportActionBar.title = "My MainActivity"
supportActionBar.setDisplayHomeAsUpEnabled(true)
【讨论】:
如果尝试将我的项目移至 Material Design Components,那可不太理想。 API 29 是我的项目最低要求。 您已经将AppCompat
作为依赖项引入,Material 主题已经从 AppCompat
主题等扩展,等等。您还会发现 ~all of Architecture Components 和基本上,现代 Android 的任何其他构建块都也要求您使用基本 Activity
类以外的其他东西 - 通过将 minSdkVersion 设置为 29,您不会得到任何东西将你的 minSdkVersion 设置为 24 甚至 21。
我根本没有使用该依赖项 + 我不需要支持旧版本的 Android。
AppCompat 是 Material Design Components 的传递依赖,所以如果你使用 Material Design Components,你就是在使用它。无论您是否支持旧版本的 Android,~您在现代 Android 开发中使用的推荐工具都没有以任何有意义的方式与 Android 框架绑定。
那么 AppCompat 是否应该用于我创建的所有活动?如果我不使用 AppCompat 依赖项会怎样?以上是关于如何在没有支持库的情况下将 MaterialToolbar 设置为 ActionBar的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用存储库的情况下将Docker镜像从一个主机复制到另一个主机